diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_back.xml b/app/src/main/res/drawable/ic_left_back.xml new file mode 100644 index 0000000..a1996c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_back.xml b/app/src/main/res/drawable/ic_left_back.xml new file mode 100644 index 0000000..a1996c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..3b96761 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_back.xml b/app/src/main/res/drawable/ic_left_back.xml new file mode 100644 index 0000000..a1996c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..3b96761 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_back.xml b/app/src/main/res/drawable/ic_left_back.xml new file mode 100644 index 0000000..a1996c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..3b96761 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_back.xml b/app/src/main/res/drawable/ic_left_back.xml new file mode 100644 index 0000000..a1996c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..3b96761 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..1b04eb9 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_back.xml b/app/src/main/res/drawable/ic_left_back.xml new file mode 100644 index 0000000..a1996c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..3b96761 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..1b04eb9 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..d3313a6 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_back.xml b/app/src/main/res/drawable/ic_left_back.xml new file mode 100644 index 0000000..a1996c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..3b96761 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..1b04eb9 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..d3313a6 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..87a16cf --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_back.xml b/app/src/main/res/drawable/ic_left_back.xml new file mode 100644 index 0000000..a1996c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..3b96761 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..1b04eb9 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..d3313a6 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..87a16cf --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0421ec4 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_back.xml b/app/src/main/res/drawable/ic_left_back.xml new file mode 100644 index 0000000..a1996c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..3b96761 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..1b04eb9 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..d3313a6 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..87a16cf --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0421ec4 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index def59e4..8ff4dde 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,65 @@ - + android:orientation="vertical" + tools:context=".view.MainActivity"> - + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_back.xml b/app/src/main/res/drawable/ic_left_back.xml new file mode 100644 index 0000000..a1996c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..3b96761 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..1b04eb9 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..d3313a6 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..87a16cf --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0421ec4 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index def59e4..8ff4dde 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,65 @@ - + android:orientation="vertical" + tools:context=".view.MainActivity"> - + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user_settings.xml b/app/src/main/res/layout/activity_user_settings.xml new file mode 100644 index 0000000..362d44a --- /dev/null +++ b/app/src/main/res/layout/activity_user_settings.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_back.xml b/app/src/main/res/drawable/ic_left_back.xml new file mode 100644 index 0000000..a1996c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..3b96761 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..1b04eb9 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..d3313a6 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..87a16cf --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0421ec4 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index def59e4..8ff4dde 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,65 @@ - + android:orientation="vertical" + tools:context=".view.MainActivity"> - + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user_settings.xml b/app/src/main/res/layout/activity_user_settings.xml new file mode 100644 index 0000000..362d44a --- /dev/null +++ b/app/src/main/res/layout/activity_user_settings.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_base_title.xml b/app/src/main/res/layout/include_base_title.xml new file mode 100644 index 0000000..edb7a44 --- /dev/null +++ b/app/src/main/res/layout/include_base_title.xml @@ -0,0 +1,25 @@ + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_back.xml b/app/src/main/res/drawable/ic_left_back.xml new file mode 100644 index 0000000..a1996c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..3b96761 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..1b04eb9 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..d3313a6 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..87a16cf --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0421ec4 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index def59e4..8ff4dde 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,65 @@ - + android:orientation="vertical" + tools:context=".view.MainActivity"> - + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user_settings.xml b/app/src/main/res/layout/activity_user_settings.xml new file mode 100644 index 0000000..362d44a --- /dev/null +++ b/app/src/main/res/layout/activity_user_settings.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_base_title.xml b/app/src/main/res/layout/include_base_title.xml new file mode 100644 index 0000000..edb7a44 --- /dev/null +++ b/app/src/main/res/layout/include_base_title.xml @@ -0,0 +1,25 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/line.xml b/app/src/main/res/layout/line.xml new file mode 100644 index 0000000..fd99e01 --- /dev/null +++ b/app/src/main/res/layout/line.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_back.xml b/app/src/main/res/drawable/ic_left_back.xml new file mode 100644 index 0000000..a1996c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..3b96761 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..1b04eb9 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..d3313a6 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..87a16cf --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0421ec4 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index def59e4..8ff4dde 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,65 @@ - + android:orientation="vertical" + tools:context=".view.MainActivity"> - + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user_settings.xml b/app/src/main/res/layout/activity_user_settings.xml new file mode 100644 index 0000000..362d44a --- /dev/null +++ b/app/src/main/res/layout/activity_user_settings.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_base_title.xml b/app/src/main/res/layout/include_base_title.xml new file mode 100644 index 0000000..edb7a44 --- /dev/null +++ b/app/src/main/res/layout/include_base_title.xml @@ -0,0 +1,25 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/line.xml b/app/src/main/res/layout/line.xml new file mode 100644 index 0000000..fd99e01 --- /dev/null +++ b/app/src/main/res/layout/line.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/log.png b/app/src/main/res/mipmap-xxhdpi/log.png new file mode 100644 index 0000000..62900a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/log.png Binary files differ diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_back.xml b/app/src/main/res/drawable/ic_left_back.xml new file mode 100644 index 0000000..a1996c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..3b96761 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..1b04eb9 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..d3313a6 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..87a16cf --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0421ec4 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index def59e4..8ff4dde 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,65 @@ - + android:orientation="vertical" + tools:context=".view.MainActivity"> - + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user_settings.xml b/app/src/main/res/layout/activity_user_settings.xml new file mode 100644 index 0000000..362d44a --- /dev/null +++ b/app/src/main/res/layout/activity_user_settings.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_base_title.xml b/app/src/main/res/layout/include_base_title.xml new file mode 100644 index 0000000..edb7a44 --- /dev/null +++ b/app/src/main/res/layout/include_base_title.xml @@ -0,0 +1,25 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/line.xml b/app/src/main/res/layout/line.xml new file mode 100644 index 0000000..fd99e01 --- /dev/null +++ b/app/src/main/res/layout/line.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/log.png b/app/src/main/res/mipmap-xxhdpi/log.png new file mode 100644 index 0000000..62900a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/log.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/setting.png b/app/src/main/res/mipmap-xxhdpi/setting.png new file mode 100644 index 0000000..3f27b2f --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/setting.png Binary files differ diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_back.xml b/app/src/main/res/drawable/ic_left_back.xml new file mode 100644 index 0000000..a1996c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..3b96761 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..1b04eb9 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..d3313a6 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..87a16cf --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0421ec4 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index def59e4..8ff4dde 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,65 @@ - + android:orientation="vertical" + tools:context=".view.MainActivity"> - + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user_settings.xml b/app/src/main/res/layout/activity_user_settings.xml new file mode 100644 index 0000000..362d44a --- /dev/null +++ b/app/src/main/res/layout/activity_user_settings.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_base_title.xml b/app/src/main/res/layout/include_base_title.xml new file mode 100644 index 0000000..edb7a44 --- /dev/null +++ b/app/src/main/res/layout/include_base_title.xml @@ -0,0 +1,25 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/line.xml b/app/src/main/res/layout/line.xml new file mode 100644 index 0000000..fd99e01 --- /dev/null +++ b/app/src/main/res/layout/line.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/log.png b/app/src/main/res/mipmap-xxhdpi/log.png new file mode 100644 index 0000000..62900a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/log.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/setting.png b/app/src/main/res/mipmap-xxhdpi/setting.png new file mode 100644 index 0000000..3f27b2f --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/setting.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/xunjian.png b/app/src/main/res/mipmap-xxhdpi/xunjian.png new file mode 100644 index 0000000..13986cf --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/xunjian.png Binary files differ diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_back.xml b/app/src/main/res/drawable/ic_left_back.xml new file mode 100644 index 0000000..a1996c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..3b96761 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..1b04eb9 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..d3313a6 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..87a16cf --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0421ec4 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index def59e4..8ff4dde 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,65 @@ - + android:orientation="vertical" + tools:context=".view.MainActivity"> - + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user_settings.xml b/app/src/main/res/layout/activity_user_settings.xml new file mode 100644 index 0000000..362d44a --- /dev/null +++ b/app/src/main/res/layout/activity_user_settings.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_base_title.xml b/app/src/main/res/layout/include_base_title.xml new file mode 100644 index 0000000..edb7a44 --- /dev/null +++ b/app/src/main/res/layout/include_base_title.xml @@ -0,0 +1,25 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/line.xml b/app/src/main/res/layout/line.xml new file mode 100644 index 0000000..fd99e01 --- /dev/null +++ b/app/src/main/res/layout/line.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/log.png b/app/src/main/res/mipmap-xxhdpi/log.png new file mode 100644 index 0000000..62900a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/log.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/setting.png b/app/src/main/res/mipmap-xxhdpi/setting.png new file mode 100644 index 0000000..3f27b2f --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/setting.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/xunjian.png b/app/src/main/res/mipmap-xxhdpi/xunjian.png new file mode 100644 index 0000000..13986cf --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/xunjian.png Binary files differ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 662ee77..4f14018 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -6,11 +6,14 @@ #FFFFFF #E5E5E5 + #D3D3D3 #C0C0C0 + #A9A9A9 #808080 #000000 #1565E3 + #30BF47 #575757 #06134C @@ -18,4 +21,5 @@ #98A0BD #54000000 + #C0000000 diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_back.xml b/app/src/main/res/drawable/ic_left_back.xml new file mode 100644 index 0000000..a1996c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..3b96761 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..1b04eb9 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..d3313a6 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..87a16cf --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0421ec4 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index def59e4..8ff4dde 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,65 @@ - + android:orientation="vertical" + tools:context=".view.MainActivity"> - + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user_settings.xml b/app/src/main/res/layout/activity_user_settings.xml new file mode 100644 index 0000000..362d44a --- /dev/null +++ b/app/src/main/res/layout/activity_user_settings.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_base_title.xml b/app/src/main/res/layout/include_base_title.xml new file mode 100644 index 0000000..edb7a44 --- /dev/null +++ b/app/src/main/res/layout/include_base_title.xml @@ -0,0 +1,25 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/line.xml b/app/src/main/res/layout/line.xml new file mode 100644 index 0000000..fd99e01 --- /dev/null +++ b/app/src/main/res/layout/line.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/log.png b/app/src/main/res/mipmap-xxhdpi/log.png new file mode 100644 index 0000000..62900a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/log.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/setting.png b/app/src/main/res/mipmap-xxhdpi/setting.png new file mode 100644 index 0000000..3f27b2f --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/setting.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/xunjian.png b/app/src/main/res/mipmap-xxhdpi/xunjian.png new file mode 100644 index 0000000..13986cf --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/xunjian.png Binary files differ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 662ee77..4f14018 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -6,11 +6,14 @@ #FFFFFF #E5E5E5 + #D3D3D3 #C0C0C0 + #A9A9A9 #808080 #000000 #1565E3 + #30BF47 #575757 #06134C @@ -18,4 +21,5 @@ #98A0BD #54000000 + #C0000000 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 2dddf37..fa6f8c2 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -2,6 +2,7 @@ 16sp 18sp + 20sp 10dp diff --git a/app/build.gradle b/app/build.gradle index dd8fa19..c9fe38c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ minSdkVersion 21 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "v2.0.0.0" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be35467..1ed6ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,9 @@ + + @@ -33,6 +35,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt new file mode 100644 index 0000000..afffa16 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/ActionResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.birmm.inspect.model + +/** + * 请求成功统一实体类 + */ +class ActionResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt deleted file mode 100644 index abe817a..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultBean.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.casic.birmm.inspect.model - -class LoginResultBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var kaptcha: String? = null - var token: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt new file mode 100644 index 0000000..2905c3e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/LoginResultModel.kt @@ -0,0 +1,13 @@ +package com.casic.birmm.inspect.model + +class LoginResultModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var kaptcha: String? = null + var token: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt deleted file mode 100644 index 25c5436..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyBean.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.birmm.inspect.model - -/** - * PublicKey 登录校验Key - */ -class PublicKeyBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - var isAppKaptcha = false - var isKaptcha = false - var publicKey: String? = null - var sid: String? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt new file mode 100644 index 0000000..a2906dd --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/PublicKeyModel.kt @@ -0,0 +1,18 @@ +package com.casic.birmm.inspect.model + +/** + * PublicKey 登录校验Key + */ +class PublicKeyModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var isAppKaptcha = false + var isKaptcha = false + var publicKey: String? = null + var sid: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt deleted file mode 100644 index 7d31d42..0000000 --- a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoBean.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.birmm.inspect.model - -class UserInfoBean { - var code = 0 - var data: DataBean? = null - var message: String? = null - var isSuccess = false - - class DataBean { - /** - * account : wxy - * attr1 : - * avatar : - * bizData : - * dataScope : ["1236854643826184194"] - * deptId : 1236854643826184194 - * deptName : A公司 - * devices : [] - * id : 1281045327302316033 - * ipAddr : 223.104.40.162 - * name : 王晓颖 - * phone : - * roleList : ["1268776836310409218"] - * roleNames : ["普通用户"] - * roleTips : ["普通用户"] - * scopeType : 3 - * targetId : - * targetName : - * tenantId : - */ - var account: String? = null - var attr1: String? = null - var avatar: String? = null - var bizData: String? = null - var deptId: String? = null - var deptName: String? = null - var id: String? = null - var ipAddr: String? = null - var name: String? = null - var phone: String? = null - var scopeType: String? = null - var targetId: String? = null - var targetName: String? = null - var tenantId: String? = null - var dataScope: List? = null - var devices: List<*>? = null - var roleList: List? = null - var roleNames: List? = null - var roleTips: List? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt new file mode 100644 index 0000000..389b43f --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/UserInfoModel.kt @@ -0,0 +1,51 @@ +package com.casic.birmm.inspect.model + +class UserInfoModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * account : wxy + * attr1 : + * avatar : + * bizData : + * dataScope : ["1236854643826184194"] + * deptId : 1236854643826184194 + * deptName : A公司 + * devices : [] + * id : 1281045327302316033 + * ipAddr : 223.104.40.162 + * name : 王晓颖 + * phone : + * roleList : ["1268776836310409218"] + * roleNames : ["普通用户"] + * roleTips : ["普通用户"] + * scopeType : 3 + * targetId : + * targetName : + * tenantId : + */ + var account: String? = null + var attr1: String? = null + var avatar: String? = null + var bizData: String? = null + var deptId: String? = null + var deptName: String? = null + var id: String? = null + var ipAddr: String? = null + var name: String? = null + var phone: String? = null + var scopeType: String? = null + var targetId: String? = null + var targetName: String? = null + var tenantId: String? = null + var dataScope: List? = null + var devices: List<*>? = null + var roleList: List? = null + var roleNames: List? = null + var roleTips: List? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt index 78a633a..ce5b6ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/AuthenticationHelper.kt @@ -2,6 +2,7 @@ import com.casic.birmm.inspect.utils.SaveKeyValues.getValue import com.casic.birmm.inspect.utils.SaveKeyValues.putValue +import com.casic.birmm.inspect.utils.SaveKeyValues.removeKey object AuthenticationHelper { @@ -18,4 +19,8 @@ val token: String? get() = getValue("token", "") as String? + + fun removeToken() { + removeKey("token") + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index 44c3514..981afb0 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -13,4 +13,6 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val USER_OBJECT = "userObject" + const val OPEN_WARNING = "isOpenWarning" + const val AUTO_RECORD = "isRecordLog" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt index ff63747..070b1fd 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/OtherUtils.kt @@ -1,24 +1,12 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.view.View import com.qmuiteam.qmui.widget.dialog.QMUITipDialog object OtherUtils { private var loadingDialog: QMUITipDialog? = null - //替换Toast - fun showTipsDialog(context: Context, message: String, view: View) { - val tipDialog = QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_NOTHING) - .setTipWord(message).create() - tipDialog.show() - view.postDelayed({ - tipDialog.dismiss() - }, 2000) - } - fun showLoadingDialog(context: Context?, message: String?) { loadingDialog = QMUITipDialog.Builder(context) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt index 04c9f5a..b64d2d1 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/SaveKeyValues.kt @@ -1,12 +1,9 @@ package com.casic.birmm.inspect.utils import android.content.Context -import android.content.SharedPreferences import com.casic.birmm.inspect.base.BaseApplication object SaveKeyValues { - private var sharedPreferences: SharedPreferences? = null - private var editor: SharedPreferences.Editor? = null private var fileName: String? = null fun initSharedPreferences() { @@ -20,11 +17,11 @@ * 存储 */ fun putValue(key: String?, obj: Any) { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - val editor = sharedPreferences!!.edit() + )!! + val editor = sharedPreferences.edit() when (obj) { is String -> { editor.putString(key, obj).apply() @@ -51,28 +48,28 @@ * 获取保存的数据 */ operator fun getValue(key: String?, defaultObject: Any?): Any? { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) + )!! return when (defaultObject) { is String -> { - sharedPreferences!!.getString(key, defaultObject as String?) + sharedPreferences.getString(key, defaultObject as String?) } is Int -> { - sharedPreferences!!.getInt(key, (defaultObject as Int?)!!) + sharedPreferences.getInt(key, (defaultObject as Int?)!!) } is Boolean -> { - sharedPreferences!!.getBoolean(key, (defaultObject as Boolean?)!!) + sharedPreferences.getBoolean(key, (defaultObject as Boolean?)!!) } is Float -> { - sharedPreferences!!.getFloat(key, (defaultObject as Float?)!!) + sharedPreferences.getFloat(key, (defaultObject as Float?)!!) } is Long -> { - sharedPreferences!!.getLong(key, (defaultObject as Long?)!!) + sharedPreferences.getLong(key, (defaultObject as Long?)!!) } else -> { - sharedPreferences!!.getString(key, null) + sharedPreferences.getString(key, null) } } } @@ -81,26 +78,32 @@ * 移除某个key值已经对应的值 */ fun removeKey(key: String?) { - editor!!.remove(key) - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().remove(key).apply() } /** * 清除所有数据 */ fun clearAll() { - editor!!.clear() - editor!!.commit() + val sharedPreferences = BaseApplication.instance.getSharedPreferences( + fileName, + Context.MODE_PRIVATE + )!! + sharedPreferences.edit().clear().apply() } /** * 查询某个key是否存在 */ fun containsKey(key: String?): Boolean { - sharedPreferences = BaseApplication.instance.getSharedPreferences( + val sharedPreferences = BaseApplication.instance.getSharedPreferences( fileName, Context.MODE_PRIVATE - ) - return sharedPreferences!!.contains(key) + )!! + return sharedPreferences.contains(key) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt new file mode 100644 index 0000000..82e47ad --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/StatusBarColorUtil.kt @@ -0,0 +1,47 @@ +package com.casic.birmm.inspect.utils + +import android.R +import android.app.Activity +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.LinearLayout + +object StatusBarColorUtil { + fun setColor(activity: Activity, color: Int) { //限制android系统的版本 + // 设置状态栏透明 + activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + // 生成一个状态栏大小的矩形 + val statusView = createStatusView(activity, color) + // 添加 statusView 到布局中 + val decorView = activity.window.decorView as ViewGroup + decorView.addView(statusView) + // 设置根布局的参数 + val rootView = + (activity.findViewById(R.id.content) as ViewGroup).getChildAt( + 0 + ) as ViewGroup + rootView.fitsSystemWindows = true + rootView.clipToPadding = true + } + + /** + * 生成一个和状态栏大小相同的矩形条 + * + * @param activity 需要设置的activity + * @param color 状态栏颜色值 + * @return 状态栏矩形条 + */ + private fun createStatusView(activity: Activity, color: Int): View { // 获得状态栏高度 + val resourceId = + activity.resources.getIdentifier("status_bar_height", "dimen", "android") + val statusBarHeight = activity.resources.getDimensionPixelSize(resourceId) + // 绘制一个和状态栏一样高的矩形 + val statusView = View(activity) + val params = + LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight) + statusView.layoutParams = params + statusView.setBackgroundColor(color) + return statusView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt new file mode 100644 index 0000000..0ed4ff4 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/utils/ToastHelper.kt @@ -0,0 +1,31 @@ +package com.casic.birmm.inspect.utils + +import android.content.Context +import android.graphics.Color +import android.view.Gravity +import android.widget.TextView +import android.widget.Toast +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +object ToastHelper { + fun showToast(context: Context, message: String) { + val toast = Toast(context) + val textView = TextView(context) + textView.setBackgroundResource(R.drawable.bg_toast_layout) + textView.setTextColor(Color.WHITE) + textView.textSize = 16.0f + textView.text = message + textView.setPadding( + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10), + QMUIDisplayHelper.dp2px(context, 20), + QMUIDisplayHelper.dp2px(context, 10) + ) + toast.setGravity(Gravity.CENTER, 0, 0) + toast.view = textView + toast.duration = Toast.LENGTH_SHORT + toast.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ea45d68..a870f5a 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import retrofit2.http.* /** @@ -14,18 +15,27 @@ * PublicKey校验 */ @GET("/config/baseConfig") - suspend fun obtainPublicKey(): PublicKeyBean + suspend fun obtainPublicKey(): PublicKeyModel /** * 登录并获取Token */ @FormUrlEncoded @POST("/user/appLogin") - suspend fun obtainLoginResult(@Field("username") account: String, @Field("password") secretKey: String): LoginResultBean + suspend fun obtainLoginResult( + @Field("username") account: String, + @Field("password") secretKey: String + ): LoginResultModel /** * 获取用户信息 */ @GET("/user/info") - suspend fun obtainUserInfo(@Header("token") token: String): UserInfoBean + suspend fun obtainUserInfo(@Header("token") token: String): UserInfoModel + + /** + * 退出登录 + */ + @GET("/user/logout") + suspend fun obtainLoginOutResult(@Header("token") token: String): ActionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index ec0a4c9..4dde02f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -1,8 +1,9 @@ package com.casic.birmm.inspect.utils.retrofit -import com.casic.birmm.inspect.model.LoginResultBean -import com.casic.birmm.inspect.model.PublicKeyBean -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.model.LoginResultModel +import com.casic.birmm.inspect.model.PublicKeyModel +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.AuthenticationHelper @@ -13,21 +14,28 @@ /** * 验证PublicKey */ - suspend fun authenticate(): PublicKeyBean { + suspend fun authenticate(): PublicKeyModel { return api.obtainPublicKey() } /** * 登录并获取Token */ - suspend fun login(account: String, secretKey: String): LoginResultBean { + suspend fun login(account: String, secretKey: String): LoginResultModel { return api.obtainLoginResult(account, secretKey) } /** * 获取用户信息 */ - suspend fun getUserInfo(): UserInfoBean { + suspend fun getUserInfo(): UserInfoModel { return api.obtainUserInfo(AuthenticationHelper.token!!) } + + /** + * 退出登录 + */ + suspend fun loginOut(): ActionResultModel { + return api.obtainLoginOutResult(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt index d0d42e8..cb01ce4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/GuideActivity.kt @@ -13,6 +13,7 @@ import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.activity_guide.* @@ -65,8 +66,8 @@ } else { val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) userViewModel.getUserInfo() - userViewModel.resultBean.observe(this, Observer { - SaveKeyValues.putValue(Constant.USER_OBJECT, it)//保存用户对象 + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 startActivity(Intent(this, MainActivity::class.java)) finish() }) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt index 82c765c..36e6828 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt @@ -31,7 +31,7 @@ override fun initData() { authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - authenticateViewModel.keyBean.observe(this, Observer { + authenticateViewModel.keyModel.observe(this, Observer { if (it.code == 200) {//用code判断,别的判断可能有坑 val keyString = it.data!!.publicKey!! /** @@ -47,9 +47,9 @@ //登录并获取Token,POST请求 val loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) loginInViewModel.login(account, dataByPublicKey) - loginInViewModel.resultBean.observe(this, Observer { loginResultBean -> - if (loginResultBean.code == 200) { - AuthenticationHelper.saveToken(loginResultBean.data!!.token!!) + loginInViewModel.resultModel.observe(this, Observer { loginResult -> + if (loginResult.code == 200) { + AuthenticationHelper.saveToken(loginResult.data!!.token!!) //验证成功登录 startActivity(Intent(this, MainActivity::class.java)) finish() @@ -59,7 +59,7 @@ changeLoadStatus(loginState) }) } else { - OtherUtils.showTipsDialog(this, it.message!!, loginButton) + ToastHelper.showToast(this, it.message!!) } }) authenticateViewModel.loadState.observe(this, Observer { @@ -109,11 +109,11 @@ val account = userNameView.text.toString() val userPassword = userPasswordView.text.toString() if (TextUtils.isEmpty(account)) { - OtherUtils.showTipsDialog(this, "用户名不能为空", userNameView) + ToastHelper.showToast(this, "用户名不能为空") return@setOnClickListener } if (TextUtils.isEmpty(userPassword)) { - OtherUtils.showTipsDialog(this, "密码不能为空", userPasswordView) + ToastHelper.showToast(this, "密码不能为空") return@setOnClickListener } authenticateViewModel.obtainPublicKey() diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index 98b9e9a..6baf2fb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -1,21 +1,73 @@ package com.casic.birmm.inspect.view +import android.content.Intent +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.utils.Constant +import com.casic.birmm.inspect.utils.SaveKeyValues +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.utils.ToastHelper +import com.casic.birmm.inspect.vm.UserViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.include_base_title.* + class MainActivity : BaseActivity() { + private var clickTime: Long = 0 + override fun initLayoutView(): Int = R.layout.activity_main override fun setupTopBarLayout() { - + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + leftBackView.visibility = View.GONE + titleView.text = "主菜单" } override fun initData() { - + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + if (TextUtils.isEmpty(userModelJson)) { + val userViewModel = ViewModelProvider(this).get(UserViewModel::class.java) + userViewModel.getUserInfo() + userViewModel.resultModel.observe(this, Observer { + SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 + }) + } } override fun initEvent() { + //新建巡检 + createIssueLayout.setOnClickListener { + } + //记录查询 + logSearchLayout.setOnClickListener { + + } + //系统设置 + settingsLayout.setOnClickListener { + startActivity(Intent(this, UserSettingsActivity::class.java)) + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + ToastHelper.showToast(this, "再按一次退出程序") + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt new file mode 100644 index 0000000..2e73469 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/UserSettingsActivity.kt @@ -0,0 +1,110 @@ +package com.casic.birmm.inspect.view + +import android.content.Context +import android.content.Intent +import android.os.Vibrator +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.casic.birmm.inspect.BuildConfig +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.base.BaseActivity +import com.casic.birmm.inspect.model.UserInfoModel +import com.casic.birmm.inspect.utils.* +import com.casic.birmm.inspect.vm.LoginOutViewModel +import com.google.gson.Gson +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.widget.dialog.QMUIDialog +import kotlinx.android.synthetic.main.activity_user_settings.* +import kotlinx.android.synthetic.main.include_base_title.* + + +class UserSettingsActivity : BaseActivity() { + + private lateinit var vibrator: Vibrator + + override fun initLayoutView(): Int = R.layout.activity_user_settings + + override fun setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "系统设置" + } + + override fun initData() { + val userModelJson = SaveKeyValues.getValue(Constant.USER_OBJECT, "") as String + val userModel = Gson().fromJson(userModelJson, UserInfoModel::class.java) + val data = userModel.data + userNameView.text = data?.name + userPhoneView.text = data?.phone + + val isOpen = SaveKeyValues.getValue(Constant.OPEN_WARNING, false) as Boolean + warningSwitch.isChecked = isOpen + val isRecord = SaveKeyValues.getValue(Constant.AUTO_RECORD, false) as Boolean + autoRecordSwitch.isChecked = isRecord + + appVersionView.text = BuildConfig.VERSION_NAME + + //震动 + vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + warningSwitch.setOnClickListener { + if (!vibrator.hasVibrator()) { + ToastHelper.showToast(this, "设备没有震动蜂鸣器,无法打开此开关") + warningSwitch.isChecked = false + return@setOnClickListener + } + } + warningSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.OPEN_WARNING, true) + vibrator.vibrate(1000) + } else { + SaveKeyValues.putValue(Constant.OPEN_WARNING, false) + } + } + autoRecordSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + SaveKeyValues.putValue(Constant.AUTO_RECORD, true) + } else { + SaveKeyValues.putValue(Constant.AUTO_RECORD, false) + } + } + loginOutButton.setChangeAlphaWhenPress(true) + loginOutButton.setOnClickListener { + QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction( + "取消" + ) { dialog, _ -> dialog?.dismiss() } + .addAction( + "确定" + ) { dialog, _ -> + dialog?.dismiss() + //执行退出登录操作 + val loginOutModel = + ViewModelProvider(this@UserSettingsActivity).get(LoginOutViewModel::class.java) + loginOutModel.loginOut() + loginOutModel.resultModel.observe(this@UserSettingsActivity, Observer { + if (it.code == 200) { + AuthenticationHelper.removeToken() + startActivity( + Intent( + this@UserSettingsActivity, + LoginActivity::class.java + ) + ) + finish() + } else { + ToastHelper.showToast(this@UserSettingsActivity, "操作失败") + } + }) + }.create().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt index bc9161d..f14f4cb 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/AuthenticateViewModel.kt @@ -2,17 +2,17 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.PublicKeyBean +import com.casic.birmm.inspect.model.PublicKeyModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class AuthenticateViewModel : BaseViewModel() { - val keyBean = MutableLiveData() + val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading - keyBean.value = RetrofitServiceManager.authenticate() + keyModel.value = RetrofitServiceManager.authenticate() }, { loadState.value = LoadState.Fail }) diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt index b1b34de..d9bd8ba 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginInViewModel.kt @@ -2,16 +2,16 @@ import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.LoginResultBean +import com.casic.birmm.inspect.model.LoginResultModel import com.casic.birmm.inspect.utils.LoadState import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager class LoginInViewModel : BaseViewModel() { - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun login(account: String, secretKey: String) = launch({ - resultBean.value = RetrofitServiceManager.login(account, secretKey) + resultModel.value = RetrofitServiceManager.login(account, secretKey) loadState.value = LoadState.Success }, { loadState.value = LoadState.Fail diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt new file mode 100644 index 0000000..fa22f6c --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/LoginOutViewModel.kt @@ -0,0 +1,23 @@ +package com.casic.birmm.inspect.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.model.ActionResultModel +import com.casic.birmm.inspect.utils.launch +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class LoginOutViewModel : BaseViewModel() { + + companion object { + private const val Tag = "LoginOutViewModel" + } + + val resultModel = MutableLiveData() + + fun loginOut() = launch({ + resultModel.value = RetrofitServiceManager.loginOut() + }, { + Log.d(Tag, it.stackTrace.toString()) + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt index c410715..f13301d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt @@ -3,7 +3,7 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.birmm.inspect.base.BaseViewModel -import com.casic.birmm.inspect.model.UserInfoBean +import com.casic.birmm.inspect.model.UserInfoModel import com.casic.birmm.inspect.utils.launch import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager @@ -12,10 +12,10 @@ private const val Tag = "UserViewModel" } - val resultBean = MutableLiveData() + val resultModel = MutableLiveData() fun getUserInfo() = launch({ - resultBean.value = RetrofitServiceManager.getUserInfo() + resultModel.value = RetrofitServiceManager.getUserInfo() }, { Log.d(Tag, it.stackTrace.toString()) }) diff --git a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt index 278e72b..cb30ae3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt +++ b/app/src/main/java/com/casic/birmm/inspect/widgets/InputDialog.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.WindowManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.ToastHelper import com.qmuiteam.qmui.util.QMUIDisplayHelper import kotlinx.android.synthetic.main.dialog_input.* @@ -53,7 +53,7 @@ dialogConfirmButton.setOnClickListener { val inputValue = dialogInputView.text.toString().trim() if (inputValue.isEmpty()) { - OtherUtils.showTipsDialog(ctx!!, "什么都没输入,请重新输入", dialogConfirmButton) + ToastHelper.showToast(ctx!!, "什么都没输入,请重新输入") return@setOnClickListener } listener?.onButtonClick(inputValue) diff --git a/app/src/main/res/drawable/bg_dialog_button.xml b/app/src/main/res/drawable/bg_dialog_button.xml deleted file mode 100644 index 5f7d57d..0000000 --- a/app/src/main/res/drawable/bg_dialog_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_toast_layout.xml b/app/src/main/res/drawable/bg_toast_layout.xml new file mode 100644 index 0000000..78ff8e6 --- /dev/null +++ b/app/src/main/res/drawable/bg_toast_layout.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_back.xml b/app/src/main/res/drawable/ic_left_back.xml new file mode 100644 index 0000000..a1996c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..3b96761 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/select_switch_background.xml b/app/src/main/res/drawable/select_switch_background.xml new file mode 100644 index 0000000..30f4f28 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_switch_circle.xml b/app/src/main/res/drawable/select_switch_circle.xml new file mode 100644 index 0000000..d28d829 --- /dev/null +++ b/app/src/main/res/drawable/select_switch_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_off.xml b/app/src/main/res/drawable/switch_background_off.xml new file mode 100644 index 0000000..1b04eb9 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_off.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_background_on.xml b/app/src/main/res/drawable/switch_background_on.xml new file mode 100644 index 0000000..d3313a6 --- /dev/null +++ b/app/src/main/res/drawable/switch_background_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_off.xml b/app/src/main/res/drawable/switch_circle_off.xml new file mode 100644 index 0000000..87a16cf --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_off.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/switch_circle_on.xml b/app/src/main/res/drawable/switch_circle_on.xml new file mode 100644 index 0000000..0421ec4 --- /dev/null +++ b/app/src/main/res/drawable/switch_circle_on.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index def59e4..8ff4dde 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,65 @@ - + android:orientation="vertical" + tools:context=".view.MainActivity"> - + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user_settings.xml b/app/src/main/res/layout/activity_user_settings.xml new file mode 100644 index 0000000..362d44a --- /dev/null +++ b/app/src/main/res/layout/activity_user_settings.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_base_title.xml b/app/src/main/res/layout/include_base_title.xml new file mode 100644 index 0000000..edb7a44 --- /dev/null +++ b/app/src/main/res/layout/include_base_title.xml @@ -0,0 +1,25 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/line.xml b/app/src/main/res/layout/line.xml new file mode 100644 index 0000000..fd99e01 --- /dev/null +++ b/app/src/main/res/layout/line.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/log.png b/app/src/main/res/mipmap-xxhdpi/log.png new file mode 100644 index 0000000..62900a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/log.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/setting.png b/app/src/main/res/mipmap-xxhdpi/setting.png new file mode 100644 index 0000000..3f27b2f --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/setting.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/xunjian.png b/app/src/main/res/mipmap-xxhdpi/xunjian.png new file mode 100644 index 0000000..13986cf --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/xunjian.png Binary files differ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 662ee77..4f14018 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -6,11 +6,14 @@ #FFFFFF #E5E5E5 + #D3D3D3 #C0C0C0 + #A9A9A9 #808080 #000000 #1565E3 + #30BF47 #575757 #06134C @@ -18,4 +21,5 @@ #98A0BD #54000000 + #C0000000 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 2dddf37..fa6f8c2 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -2,6 +2,7 @@ 16sp 18sp + 20sp 10dp diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index f16f3a9..f88da9d 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -20,4 +20,60 @@ @color/hintColor @color/mainThemeColor + + + + + + + + + + + + + + +