diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + + + + + + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java new file mode 100644 index 0000000..1b2bb6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java @@ -0,0 +1,107 @@ +package com.casic.dcms.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:55 + * @email : 290677893@qq.com + **/ +public class BroadcastManager { + private static final String TAG = "BroadcastManager"; + private Context mContext; + private static BroadcastManager broadcastManager; + private Map receiverMap; + + private BroadcastManager(Context context) { + this.mContext = context; + receiverMap = new HashMap<>(); + } + + /** + * 双重锁单例 + */ + public static BroadcastManager getInstance(Context context) { + if (broadcastManager == null) { + synchronized (BroadcastManager.class) { + if (broadcastManager == null) { + broadcastManager = new BroadcastManager(context); + } + } + } + return broadcastManager; + } + + /** + * 添加单个Action,广播的初始化 + */ + public void addAction(String action, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + filter.addAction(action); + mContext.registerReceiver(receiver, filter); + receiverMap.put(action, receiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 添加多个Action,广播的初始化 + */ + public void addAction(String[] actions, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + for (String action : actions) { + filter.addAction(action); + receiverMap.put(action, receiver); + } + mContext.registerReceiver(receiver, filter); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 发送广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + public void sendBroadcast(String action, String msg) { + try { + Intent intent = new Intent(); + intent.setAction(action); + intent.putExtra("data", msg); + mContext.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + public void destroy(String... actions) { + try { + if (receiverMap != null) { + for (String action : actions) { + BroadcastReceiver receiver = receiverMap.get(action); + if (receiver != null) { + mContext.unregisterReceiver(receiver); + } + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java new file mode 100644 index 0000000..1b2bb6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java @@ -0,0 +1,107 @@ +package com.casic.dcms.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:55 + * @email : 290677893@qq.com + **/ +public class BroadcastManager { + private static final String TAG = "BroadcastManager"; + private Context mContext; + private static BroadcastManager broadcastManager; + private Map receiverMap; + + private BroadcastManager(Context context) { + this.mContext = context; + receiverMap = new HashMap<>(); + } + + /** + * 双重锁单例 + */ + public static BroadcastManager getInstance(Context context) { + if (broadcastManager == null) { + synchronized (BroadcastManager.class) { + if (broadcastManager == null) { + broadcastManager = new BroadcastManager(context); + } + } + } + return broadcastManager; + } + + /** + * 添加单个Action,广播的初始化 + */ + public void addAction(String action, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + filter.addAction(action); + mContext.registerReceiver(receiver, filter); + receiverMap.put(action, receiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 添加多个Action,广播的初始化 + */ + public void addAction(String[] actions, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + for (String action : actions) { + filter.addAction(action); + receiverMap.put(action, receiver); + } + mContext.registerReceiver(receiver, filter); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 发送广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + public void sendBroadcast(String action, String msg) { + try { + Intent intent = new Intent(); + intent.setAction(action); + intent.putExtra("data", msg); + mContext.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + public void destroy(String... actions) { + try { + if (receiverMap != null) { + for (String action : actions) { + BroadcastReceiver receiver = receiverMap.get(action); + if (receiver != null) { + mContext.unregisterReceiver(receiver); + } + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8c90ccd..e346e1d 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -33,4 +33,6 @@ public static final int PERMISSIONS_CODE = 999; public static final String IP_KEY = "BASE_IP"; + + public static final String LOGIN_OUT_ACTION = "loginOut"; } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java new file mode 100644 index 0000000..1b2bb6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java @@ -0,0 +1,107 @@ +package com.casic.dcms.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:55 + * @email : 290677893@qq.com + **/ +public class BroadcastManager { + private static final String TAG = "BroadcastManager"; + private Context mContext; + private static BroadcastManager broadcastManager; + private Map receiverMap; + + private BroadcastManager(Context context) { + this.mContext = context; + receiverMap = new HashMap<>(); + } + + /** + * 双重锁单例 + */ + public static BroadcastManager getInstance(Context context) { + if (broadcastManager == null) { + synchronized (BroadcastManager.class) { + if (broadcastManager == null) { + broadcastManager = new BroadcastManager(context); + } + } + } + return broadcastManager; + } + + /** + * 添加单个Action,广播的初始化 + */ + public void addAction(String action, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + filter.addAction(action); + mContext.registerReceiver(receiver, filter); + receiverMap.put(action, receiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 添加多个Action,广播的初始化 + */ + public void addAction(String[] actions, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + for (String action : actions) { + filter.addAction(action); + receiverMap.put(action, receiver); + } + mContext.registerReceiver(receiver, filter); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 发送广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + public void sendBroadcast(String action, String msg) { + try { + Intent intent = new Intent(); + intent.setAction(action); + intent.putExtra("data", msg); + mContext.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + public void destroy(String... actions) { + try { + if (receiverMap != null) { + for (String action : actions) { + BroadcastReceiver receiver = receiverMap.get(action); + if (receiver != null) { + mContext.unregisterReceiver(receiver); + } + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8c90ccd..e346e1d 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -33,4 +33,6 @@ public static final int PERMISSIONS_CODE = 999; public static final String IP_KEY = "BASE_IP"; + + public static final String LOGIN_OUT_ACTION = "loginOut"; } diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 1781080..c5e0e37 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -2,4 +2,40 @@ public class StringHelper { + public static void saveUserName(String name) { + SaveKeyValues.putValue("userName", name); + } + + public static String getUserName() { + return (String) SaveKeyValues.getValue("userName", ""); + } + + public static void saveUserPhone(String phone) { + SaveKeyValues.putValue("userPhone", phone); + } + + public static String getUserPhone() { + return (String) SaveKeyValues.getValue("userPhone", ""); + } + + public static void saveUserDept(String dept) { + SaveKeyValues.putValue("userDept", dept); + } + + public static String getUserDept() { + return (String) SaveKeyValues.getValue("userDept", ""); + } + + public static boolean isLetterAndDigit(String str) { + boolean isDigit = false; + boolean isLetter = false; + for (int i = 0; i < str.length(); i++) { + if (Character.isDigit(str.charAt(i))) { + isDigit = true; + } else if (Character.isLetter(str.charAt(i))) { + isLetter = true; + } + } + return isDigit && isLetter; + } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java new file mode 100644 index 0000000..1b2bb6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java @@ -0,0 +1,107 @@ +package com.casic.dcms.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:55 + * @email : 290677893@qq.com + **/ +public class BroadcastManager { + private static final String TAG = "BroadcastManager"; + private Context mContext; + private static BroadcastManager broadcastManager; + private Map receiverMap; + + private BroadcastManager(Context context) { + this.mContext = context; + receiverMap = new HashMap<>(); + } + + /** + * 双重锁单例 + */ + public static BroadcastManager getInstance(Context context) { + if (broadcastManager == null) { + synchronized (BroadcastManager.class) { + if (broadcastManager == null) { + broadcastManager = new BroadcastManager(context); + } + } + } + return broadcastManager; + } + + /** + * 添加单个Action,广播的初始化 + */ + public void addAction(String action, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + filter.addAction(action); + mContext.registerReceiver(receiver, filter); + receiverMap.put(action, receiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 添加多个Action,广播的初始化 + */ + public void addAction(String[] actions, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + for (String action : actions) { + filter.addAction(action); + receiverMap.put(action, receiver); + } + mContext.registerReceiver(receiver, filter); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 发送广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + public void sendBroadcast(String action, String msg) { + try { + Intent intent = new Intent(); + intent.setAction(action); + intent.putExtra("data", msg); + mContext.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + public void destroy(String... actions) { + try { + if (receiverMap != null) { + for (String action : actions) { + BroadcastReceiver receiver = receiverMap.get(action); + if (receiver != null) { + mContext.unregisterReceiver(receiver); + } + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8c90ccd..e346e1d 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -33,4 +33,6 @@ public static final int PERMISSIONS_CODE = 999; public static final String IP_KEY = "BASE_IP"; + + public static final String LOGIN_OUT_ACTION = "loginOut"; } diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 1781080..c5e0e37 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -2,4 +2,40 @@ public class StringHelper { + public static void saveUserName(String name) { + SaveKeyValues.putValue("userName", name); + } + + public static String getUserName() { + return (String) SaveKeyValues.getValue("userName", ""); + } + + public static void saveUserPhone(String phone) { + SaveKeyValues.putValue("userPhone", phone); + } + + public static String getUserPhone() { + return (String) SaveKeyValues.getValue("userPhone", ""); + } + + public static void saveUserDept(String dept) { + SaveKeyValues.putValue("userDept", dept); + } + + public static String getUserDept() { + return (String) SaveKeyValues.getValue("userDept", ""); + } + + public static boolean isLetterAndDigit(String str) { + boolean isDigit = false; + boolean isLetter = false; + for (int i = 0; i < str.length(); i++) { + if (Character.isDigit(str.charAt(i))) { + isDigit = true; + } else if (Character.isLetter(str.charAt(i))) { + isLetter = true; + } + } + return isDigit && isLetter; + } } diff --git a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java index a02a103..0e63632 100644 --- a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java @@ -2,6 +2,14 @@ public class TokenHelper { + public static void savePublicKey(String key) { + SaveKeyValues.putValue("keyString", key); + } + + public static String getPublicKey() { + return (String) SaveKeyValues.getValue("keyString", ""); + } + public static void saveToken(String token) { SaveKeyValues.putValue("token", token); } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java new file mode 100644 index 0000000..1b2bb6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java @@ -0,0 +1,107 @@ +package com.casic.dcms.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:55 + * @email : 290677893@qq.com + **/ +public class BroadcastManager { + private static final String TAG = "BroadcastManager"; + private Context mContext; + private static BroadcastManager broadcastManager; + private Map receiverMap; + + private BroadcastManager(Context context) { + this.mContext = context; + receiverMap = new HashMap<>(); + } + + /** + * 双重锁单例 + */ + public static BroadcastManager getInstance(Context context) { + if (broadcastManager == null) { + synchronized (BroadcastManager.class) { + if (broadcastManager == null) { + broadcastManager = new BroadcastManager(context); + } + } + } + return broadcastManager; + } + + /** + * 添加单个Action,广播的初始化 + */ + public void addAction(String action, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + filter.addAction(action); + mContext.registerReceiver(receiver, filter); + receiverMap.put(action, receiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 添加多个Action,广播的初始化 + */ + public void addAction(String[] actions, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + for (String action : actions) { + filter.addAction(action); + receiverMap.put(action, receiver); + } + mContext.registerReceiver(receiver, filter); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 发送广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + public void sendBroadcast(String action, String msg) { + try { + Intent intent = new Intent(); + intent.setAction(action); + intent.putExtra("data", msg); + mContext.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + public void destroy(String... actions) { + try { + if (receiverMap != null) { + for (String action : actions) { + BroadcastReceiver receiver = receiverMap.get(action); + if (receiver != null) { + mContext.unregisterReceiver(receiver); + } + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8c90ccd..e346e1d 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -33,4 +33,6 @@ public static final int PERMISSIONS_CODE = 999; public static final String IP_KEY = "BASE_IP"; + + public static final String LOGIN_OUT_ACTION = "loginOut"; } diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 1781080..c5e0e37 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -2,4 +2,40 @@ public class StringHelper { + public static void saveUserName(String name) { + SaveKeyValues.putValue("userName", name); + } + + public static String getUserName() { + return (String) SaveKeyValues.getValue("userName", ""); + } + + public static void saveUserPhone(String phone) { + SaveKeyValues.putValue("userPhone", phone); + } + + public static String getUserPhone() { + return (String) SaveKeyValues.getValue("userPhone", ""); + } + + public static void saveUserDept(String dept) { + SaveKeyValues.putValue("userDept", dept); + } + + public static String getUserDept() { + return (String) SaveKeyValues.getValue("userDept", ""); + } + + public static boolean isLetterAndDigit(String str) { + boolean isDigit = false; + boolean isLetter = false; + for (int i = 0; i < str.length(); i++) { + if (Character.isDigit(str.charAt(i))) { + isDigit = true; + } else if (Character.isLetter(str.charAt(i))) { + isLetter = true; + } + } + return isDigit && isLetter; + } } diff --git a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java index a02a103..0e63632 100644 --- a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java @@ -2,6 +2,14 @@ public class TokenHelper { + public static void savePublicKey(String key) { + SaveKeyValues.putValue("keyString", key); + } + + public static String getPublicKey() { + return (String) SaveKeyValues.getValue("keyString", ""); + } + public static void saveToken(String token) { SaveKeyValues.putValue("token", token); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index d5dd48a..26c505c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -2,6 +2,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -62,4 +64,20 @@ @POST("/case/add") Observable submit(@Header("token") String token, @Body SubmitInfoBean infoBean); + + /** + * 退出登录 + */ + @GET("/user/logout") + Observable loginOut(@Header("token") String token); + + /** + * 修改密码 + * 如果有转义字符串,需要用FormUrlEncoded + */ + @FormUrlEncoded + @POST("/mgr/changePwd") + Observable changePassword(@Header("token") String token, + @Field("oldPwd") String oldPwd, + @Field("newPwd") String newPwd); } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java new file mode 100644 index 0000000..1b2bb6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java @@ -0,0 +1,107 @@ +package com.casic.dcms.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:55 + * @email : 290677893@qq.com + **/ +public class BroadcastManager { + private static final String TAG = "BroadcastManager"; + private Context mContext; + private static BroadcastManager broadcastManager; + private Map receiverMap; + + private BroadcastManager(Context context) { + this.mContext = context; + receiverMap = new HashMap<>(); + } + + /** + * 双重锁单例 + */ + public static BroadcastManager getInstance(Context context) { + if (broadcastManager == null) { + synchronized (BroadcastManager.class) { + if (broadcastManager == null) { + broadcastManager = new BroadcastManager(context); + } + } + } + return broadcastManager; + } + + /** + * 添加单个Action,广播的初始化 + */ + public void addAction(String action, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + filter.addAction(action); + mContext.registerReceiver(receiver, filter); + receiverMap.put(action, receiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 添加多个Action,广播的初始化 + */ + public void addAction(String[] actions, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + for (String action : actions) { + filter.addAction(action); + receiverMap.put(action, receiver); + } + mContext.registerReceiver(receiver, filter); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 发送广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + public void sendBroadcast(String action, String msg) { + try { + Intent intent = new Intent(); + intent.setAction(action); + intent.putExtra("data", msg); + mContext.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + public void destroy(String... actions) { + try { + if (receiverMap != null) { + for (String action : actions) { + BroadcastReceiver receiver = receiverMap.get(action); + if (receiver != null) { + mContext.unregisterReceiver(receiver); + } + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8c90ccd..e346e1d 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -33,4 +33,6 @@ public static final int PERMISSIONS_CODE = 999; public static final String IP_KEY = "BASE_IP"; + + public static final String LOGIN_OUT_ACTION = "loginOut"; } diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 1781080..c5e0e37 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -2,4 +2,40 @@ public class StringHelper { + public static void saveUserName(String name) { + SaveKeyValues.putValue("userName", name); + } + + public static String getUserName() { + return (String) SaveKeyValues.getValue("userName", ""); + } + + public static void saveUserPhone(String phone) { + SaveKeyValues.putValue("userPhone", phone); + } + + public static String getUserPhone() { + return (String) SaveKeyValues.getValue("userPhone", ""); + } + + public static void saveUserDept(String dept) { + SaveKeyValues.putValue("userDept", dept); + } + + public static String getUserDept() { + return (String) SaveKeyValues.getValue("userDept", ""); + } + + public static boolean isLetterAndDigit(String str) { + boolean isDigit = false; + boolean isLetter = false; + for (int i = 0; i < str.length(); i++) { + if (Character.isDigit(str.charAt(i))) { + isDigit = true; + } else if (Character.isLetter(str.charAt(i))) { + isLetter = true; + } + } + return isDigit && isLetter; + } } diff --git a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java index a02a103..0e63632 100644 --- a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java @@ -2,6 +2,14 @@ public class TokenHelper { + public static void savePublicKey(String key) { + SaveKeyValues.putValue("keyString", key); + } + + public static String getPublicKey() { + return (String) SaveKeyValues.getValue("keyString", ""); + } + public static void saveToken(String token) { SaveKeyValues.putValue("token", token); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index d5dd48a..26c505c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -2,6 +2,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -62,4 +64,20 @@ @POST("/case/add") Observable submit(@Header("token") String token, @Body SubmitInfoBean infoBean); + + /** + * 退出登录 + */ + @GET("/user/logout") + Observable loginOut(@Header("token") String token); + + /** + * 修改密码 + * 如果有转义字符串,需要用FormUrlEncoded + */ + @FormUrlEncoded + @POST("/mgr/changePwd") + Observable changePassword(@Header("token") String token, + @Field("oldPwd") String oldPwd, + @Field("newPwd") String newPwd); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index b557907..1477a0c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -4,6 +4,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -107,4 +109,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.submit(TokenHelper.getToken(), infoBean); } + + /** + * 退出登录 + */ + public static Observable getLoginOutResult() { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.loginOut(TokenHelper.getToken()); + } + + /** + * 修改密码 + */ + public static Observable getChangePasswordResult(String oldPwd, String newPwd) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); + } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java new file mode 100644 index 0000000..1b2bb6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java @@ -0,0 +1,107 @@ +package com.casic.dcms.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:55 + * @email : 290677893@qq.com + **/ +public class BroadcastManager { + private static final String TAG = "BroadcastManager"; + private Context mContext; + private static BroadcastManager broadcastManager; + private Map receiverMap; + + private BroadcastManager(Context context) { + this.mContext = context; + receiverMap = new HashMap<>(); + } + + /** + * 双重锁单例 + */ + public static BroadcastManager getInstance(Context context) { + if (broadcastManager == null) { + synchronized (BroadcastManager.class) { + if (broadcastManager == null) { + broadcastManager = new BroadcastManager(context); + } + } + } + return broadcastManager; + } + + /** + * 添加单个Action,广播的初始化 + */ + public void addAction(String action, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + filter.addAction(action); + mContext.registerReceiver(receiver, filter); + receiverMap.put(action, receiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 添加多个Action,广播的初始化 + */ + public void addAction(String[] actions, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + for (String action : actions) { + filter.addAction(action); + receiverMap.put(action, receiver); + } + mContext.registerReceiver(receiver, filter); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 发送广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + public void sendBroadcast(String action, String msg) { + try { + Intent intent = new Intent(); + intent.setAction(action); + intent.putExtra("data", msg); + mContext.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + public void destroy(String... actions) { + try { + if (receiverMap != null) { + for (String action : actions) { + BroadcastReceiver receiver = receiverMap.get(action); + if (receiver != null) { + mContext.unregisterReceiver(receiver); + } + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8c90ccd..e346e1d 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -33,4 +33,6 @@ public static final int PERMISSIONS_CODE = 999; public static final String IP_KEY = "BASE_IP"; + + public static final String LOGIN_OUT_ACTION = "loginOut"; } diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 1781080..c5e0e37 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -2,4 +2,40 @@ public class StringHelper { + public static void saveUserName(String name) { + SaveKeyValues.putValue("userName", name); + } + + public static String getUserName() { + return (String) SaveKeyValues.getValue("userName", ""); + } + + public static void saveUserPhone(String phone) { + SaveKeyValues.putValue("userPhone", phone); + } + + public static String getUserPhone() { + return (String) SaveKeyValues.getValue("userPhone", ""); + } + + public static void saveUserDept(String dept) { + SaveKeyValues.putValue("userDept", dept); + } + + public static String getUserDept() { + return (String) SaveKeyValues.getValue("userDept", ""); + } + + public static boolean isLetterAndDigit(String str) { + boolean isDigit = false; + boolean isLetter = false; + for (int i = 0; i < str.length(); i++) { + if (Character.isDigit(str.charAt(i))) { + isDigit = true; + } else if (Character.isLetter(str.charAt(i))) { + isLetter = true; + } + } + return isDigit && isLetter; + } } diff --git a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java index a02a103..0e63632 100644 --- a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java @@ -2,6 +2,14 @@ public class TokenHelper { + public static void savePublicKey(String key) { + SaveKeyValues.putValue("keyString", key); + } + + public static String getPublicKey() { + return (String) SaveKeyValues.getValue("keyString", ""); + } + public static void saveToken(String token) { SaveKeyValues.putValue("token", token); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index d5dd48a..26c505c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -2,6 +2,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -62,4 +64,20 @@ @POST("/case/add") Observable submit(@Header("token") String token, @Body SubmitInfoBean infoBean); + + /** + * 退出登录 + */ + @GET("/user/logout") + Observable loginOut(@Header("token") String token); + + /** + * 修改密码 + * 如果有转义字符串,需要用FormUrlEncoded + */ + @FormUrlEncoded + @POST("/mgr/changePwd") + Observable changePassword(@Header("token") String token, + @Field("oldPwd") String oldPwd, + @Field("newPwd") String newPwd); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index b557907..1477a0c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -4,6 +4,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -107,4 +109,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.submit(TokenHelper.getToken(), infoBean); } + + /** + * 退出登录 + */ + public static Observable getLoginOutResult() { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.loginOut(TokenHelper.getToken()); + } + + /** + * 修改密码 + */ + public static Observable getChangePasswordResult(String oldPwd, String newPwd) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); + } } diff --git a/app/src/main/res/drawable/bg_editor.xml b/app/src/main/res/drawable/bg_editor.xml new file mode 100644 index 0000000..949d474 --- /dev/null +++ b/app/src/main/res/drawable/bg_editor.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java new file mode 100644 index 0000000..1b2bb6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java @@ -0,0 +1,107 @@ +package com.casic.dcms.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:55 + * @email : 290677893@qq.com + **/ +public class BroadcastManager { + private static final String TAG = "BroadcastManager"; + private Context mContext; + private static BroadcastManager broadcastManager; + private Map receiverMap; + + private BroadcastManager(Context context) { + this.mContext = context; + receiverMap = new HashMap<>(); + } + + /** + * 双重锁单例 + */ + public static BroadcastManager getInstance(Context context) { + if (broadcastManager == null) { + synchronized (BroadcastManager.class) { + if (broadcastManager == null) { + broadcastManager = new BroadcastManager(context); + } + } + } + return broadcastManager; + } + + /** + * 添加单个Action,广播的初始化 + */ + public void addAction(String action, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + filter.addAction(action); + mContext.registerReceiver(receiver, filter); + receiverMap.put(action, receiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 添加多个Action,广播的初始化 + */ + public void addAction(String[] actions, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + for (String action : actions) { + filter.addAction(action); + receiverMap.put(action, receiver); + } + mContext.registerReceiver(receiver, filter); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 发送广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + public void sendBroadcast(String action, String msg) { + try { + Intent intent = new Intent(); + intent.setAction(action); + intent.putExtra("data", msg); + mContext.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + public void destroy(String... actions) { + try { + if (receiverMap != null) { + for (String action : actions) { + BroadcastReceiver receiver = receiverMap.get(action); + if (receiver != null) { + mContext.unregisterReceiver(receiver); + } + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8c90ccd..e346e1d 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -33,4 +33,6 @@ public static final int PERMISSIONS_CODE = 999; public static final String IP_KEY = "BASE_IP"; + + public static final String LOGIN_OUT_ACTION = "loginOut"; } diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 1781080..c5e0e37 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -2,4 +2,40 @@ public class StringHelper { + public static void saveUserName(String name) { + SaveKeyValues.putValue("userName", name); + } + + public static String getUserName() { + return (String) SaveKeyValues.getValue("userName", ""); + } + + public static void saveUserPhone(String phone) { + SaveKeyValues.putValue("userPhone", phone); + } + + public static String getUserPhone() { + return (String) SaveKeyValues.getValue("userPhone", ""); + } + + public static void saveUserDept(String dept) { + SaveKeyValues.putValue("userDept", dept); + } + + public static String getUserDept() { + return (String) SaveKeyValues.getValue("userDept", ""); + } + + public static boolean isLetterAndDigit(String str) { + boolean isDigit = false; + boolean isLetter = false; + for (int i = 0; i < str.length(); i++) { + if (Character.isDigit(str.charAt(i))) { + isDigit = true; + } else if (Character.isLetter(str.charAt(i))) { + isLetter = true; + } + } + return isDigit && isLetter; + } } diff --git a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java index a02a103..0e63632 100644 --- a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java @@ -2,6 +2,14 @@ public class TokenHelper { + public static void savePublicKey(String key) { + SaveKeyValues.putValue("keyString", key); + } + + public static String getPublicKey() { + return (String) SaveKeyValues.getValue("keyString", ""); + } + public static void saveToken(String token) { SaveKeyValues.putValue("token", token); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index d5dd48a..26c505c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -2,6 +2,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -62,4 +64,20 @@ @POST("/case/add") Observable submit(@Header("token") String token, @Body SubmitInfoBean infoBean); + + /** + * 退出登录 + */ + @GET("/user/logout") + Observable loginOut(@Header("token") String token); + + /** + * 修改密码 + * 如果有转义字符串,需要用FormUrlEncoded + */ + @FormUrlEncoded + @POST("/mgr/changePwd") + Observable changePassword(@Header("token") String token, + @Field("oldPwd") String oldPwd, + @Field("newPwd") String newPwd); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index b557907..1477a0c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -4,6 +4,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -107,4 +109,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.submit(TokenHelper.getToken(), infoBean); } + + /** + * 退出登录 + */ + public static Observable getLoginOutResult() { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.loginOut(TokenHelper.getToken()); + } + + /** + * 修改密码 + */ + public static Observable getChangePasswordResult(String oldPwd, String newPwd) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); + } } diff --git a/app/src/main/res/drawable/bg_editor.xml b/app/src/main/res/drawable/bg_editor.xml new file mode 100644 index 0000000..949d474 --- /dev/null +++ b/app/src/main/res/drawable/bg_editor.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_white.xml b/app/src/main/res/drawable/ic_left_white.xml new file mode 100644 index 0000000..5487d77 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_white.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java new file mode 100644 index 0000000..1b2bb6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java @@ -0,0 +1,107 @@ +package com.casic.dcms.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:55 + * @email : 290677893@qq.com + **/ +public class BroadcastManager { + private static final String TAG = "BroadcastManager"; + private Context mContext; + private static BroadcastManager broadcastManager; + private Map receiverMap; + + private BroadcastManager(Context context) { + this.mContext = context; + receiverMap = new HashMap<>(); + } + + /** + * 双重锁单例 + */ + public static BroadcastManager getInstance(Context context) { + if (broadcastManager == null) { + synchronized (BroadcastManager.class) { + if (broadcastManager == null) { + broadcastManager = new BroadcastManager(context); + } + } + } + return broadcastManager; + } + + /** + * 添加单个Action,广播的初始化 + */ + public void addAction(String action, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + filter.addAction(action); + mContext.registerReceiver(receiver, filter); + receiverMap.put(action, receiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 添加多个Action,广播的初始化 + */ + public void addAction(String[] actions, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + for (String action : actions) { + filter.addAction(action); + receiverMap.put(action, receiver); + } + mContext.registerReceiver(receiver, filter); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 发送广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + public void sendBroadcast(String action, String msg) { + try { + Intent intent = new Intent(); + intent.setAction(action); + intent.putExtra("data", msg); + mContext.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + public void destroy(String... actions) { + try { + if (receiverMap != null) { + for (String action : actions) { + BroadcastReceiver receiver = receiverMap.get(action); + if (receiver != null) { + mContext.unregisterReceiver(receiver); + } + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8c90ccd..e346e1d 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -33,4 +33,6 @@ public static final int PERMISSIONS_CODE = 999; public static final String IP_KEY = "BASE_IP"; + + public static final String LOGIN_OUT_ACTION = "loginOut"; } diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 1781080..c5e0e37 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -2,4 +2,40 @@ public class StringHelper { + public static void saveUserName(String name) { + SaveKeyValues.putValue("userName", name); + } + + public static String getUserName() { + return (String) SaveKeyValues.getValue("userName", ""); + } + + public static void saveUserPhone(String phone) { + SaveKeyValues.putValue("userPhone", phone); + } + + public static String getUserPhone() { + return (String) SaveKeyValues.getValue("userPhone", ""); + } + + public static void saveUserDept(String dept) { + SaveKeyValues.putValue("userDept", dept); + } + + public static String getUserDept() { + return (String) SaveKeyValues.getValue("userDept", ""); + } + + public static boolean isLetterAndDigit(String str) { + boolean isDigit = false; + boolean isLetter = false; + for (int i = 0; i < str.length(); i++) { + if (Character.isDigit(str.charAt(i))) { + isDigit = true; + } else if (Character.isLetter(str.charAt(i))) { + isLetter = true; + } + } + return isDigit && isLetter; + } } diff --git a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java index a02a103..0e63632 100644 --- a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java @@ -2,6 +2,14 @@ public class TokenHelper { + public static void savePublicKey(String key) { + SaveKeyValues.putValue("keyString", key); + } + + public static String getPublicKey() { + return (String) SaveKeyValues.getValue("keyString", ""); + } + public static void saveToken(String token) { SaveKeyValues.putValue("token", token); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index d5dd48a..26c505c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -2,6 +2,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -62,4 +64,20 @@ @POST("/case/add") Observable submit(@Header("token") String token, @Body SubmitInfoBean infoBean); + + /** + * 退出登录 + */ + @GET("/user/logout") + Observable loginOut(@Header("token") String token); + + /** + * 修改密码 + * 如果有转义字符串,需要用FormUrlEncoded + */ + @FormUrlEncoded + @POST("/mgr/changePwd") + Observable changePassword(@Header("token") String token, + @Field("oldPwd") String oldPwd, + @Field("newPwd") String newPwd); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index b557907..1477a0c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -4,6 +4,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -107,4 +109,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.submit(TokenHelper.getToken(), infoBean); } + + /** + * 退出登录 + */ + public static Observable getLoginOutResult() { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.loginOut(TokenHelper.getToken()); + } + + /** + * 修改密码 + */ + public static Observable getChangePasswordResult(String oldPwd, String newPwd) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); + } } diff --git a/app/src/main/res/drawable/bg_editor.xml b/app/src/main/res/drawable/bg_editor.xml new file mode 100644 index 0000000..949d474 --- /dev/null +++ b/app/src/main/res/drawable/bg_editor.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_white.xml b/app/src/main/res/drawable/ic_left_white.xml new file mode 100644 index 0000000..5487d77 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_white.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml new file mode 100644 index 0000000..79d695f --- /dev/null +++ b/app/src/main/res/drawable/ic_right_80.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java new file mode 100644 index 0000000..1b2bb6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java @@ -0,0 +1,107 @@ +package com.casic.dcms.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:55 + * @email : 290677893@qq.com + **/ +public class BroadcastManager { + private static final String TAG = "BroadcastManager"; + private Context mContext; + private static BroadcastManager broadcastManager; + private Map receiverMap; + + private BroadcastManager(Context context) { + this.mContext = context; + receiverMap = new HashMap<>(); + } + + /** + * 双重锁单例 + */ + public static BroadcastManager getInstance(Context context) { + if (broadcastManager == null) { + synchronized (BroadcastManager.class) { + if (broadcastManager == null) { + broadcastManager = new BroadcastManager(context); + } + } + } + return broadcastManager; + } + + /** + * 添加单个Action,广播的初始化 + */ + public void addAction(String action, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + filter.addAction(action); + mContext.registerReceiver(receiver, filter); + receiverMap.put(action, receiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 添加多个Action,广播的初始化 + */ + public void addAction(String[] actions, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + for (String action : actions) { + filter.addAction(action); + receiverMap.put(action, receiver); + } + mContext.registerReceiver(receiver, filter); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 发送广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + public void sendBroadcast(String action, String msg) { + try { + Intent intent = new Intent(); + intent.setAction(action); + intent.putExtra("data", msg); + mContext.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + public void destroy(String... actions) { + try { + if (receiverMap != null) { + for (String action : actions) { + BroadcastReceiver receiver = receiverMap.get(action); + if (receiver != null) { + mContext.unregisterReceiver(receiver); + } + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8c90ccd..e346e1d 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -33,4 +33,6 @@ public static final int PERMISSIONS_CODE = 999; public static final String IP_KEY = "BASE_IP"; + + public static final String LOGIN_OUT_ACTION = "loginOut"; } diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 1781080..c5e0e37 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -2,4 +2,40 @@ public class StringHelper { + public static void saveUserName(String name) { + SaveKeyValues.putValue("userName", name); + } + + public static String getUserName() { + return (String) SaveKeyValues.getValue("userName", ""); + } + + public static void saveUserPhone(String phone) { + SaveKeyValues.putValue("userPhone", phone); + } + + public static String getUserPhone() { + return (String) SaveKeyValues.getValue("userPhone", ""); + } + + public static void saveUserDept(String dept) { + SaveKeyValues.putValue("userDept", dept); + } + + public static String getUserDept() { + return (String) SaveKeyValues.getValue("userDept", ""); + } + + public static boolean isLetterAndDigit(String str) { + boolean isDigit = false; + boolean isLetter = false; + for (int i = 0; i < str.length(); i++) { + if (Character.isDigit(str.charAt(i))) { + isDigit = true; + } else if (Character.isLetter(str.charAt(i))) { + isLetter = true; + } + } + return isDigit && isLetter; + } } diff --git a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java index a02a103..0e63632 100644 --- a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java @@ -2,6 +2,14 @@ public class TokenHelper { + public static void savePublicKey(String key) { + SaveKeyValues.putValue("keyString", key); + } + + public static String getPublicKey() { + return (String) SaveKeyValues.getValue("keyString", ""); + } + public static void saveToken(String token) { SaveKeyValues.putValue("token", token); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index d5dd48a..26c505c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -2,6 +2,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -62,4 +64,20 @@ @POST("/case/add") Observable submit(@Header("token") String token, @Body SubmitInfoBean infoBean); + + /** + * 退出登录 + */ + @GET("/user/logout") + Observable loginOut(@Header("token") String token); + + /** + * 修改密码 + * 如果有转义字符串,需要用FormUrlEncoded + */ + @FormUrlEncoded + @POST("/mgr/changePwd") + Observable changePassword(@Header("token") String token, + @Field("oldPwd") String oldPwd, + @Field("newPwd") String newPwd); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index b557907..1477a0c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -4,6 +4,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -107,4 +109,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.submit(TokenHelper.getToken(), infoBean); } + + /** + * 退出登录 + */ + public static Observable getLoginOutResult() { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.loginOut(TokenHelper.getToken()); + } + + /** + * 修改密码 + */ + public static Observable getChangePasswordResult(String oldPwd, String newPwd) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); + } } diff --git a/app/src/main/res/drawable/bg_editor.xml b/app/src/main/res/drawable/bg_editor.xml new file mode 100644 index 0000000..949d474 --- /dev/null +++ b/app/src/main/res/drawable/bg_editor.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_white.xml b/app/src/main/res/drawable/ic_left_white.xml new file mode 100644 index 0000000..5487d77 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_white.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml new file mode 100644 index 0000000..79d695f --- /dev/null +++ b/app/src/main/res/drawable/ic_right_80.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_update.xml b/app/src/main/res/drawable/ic_update.xml new file mode 100644 index 0000000..5b8e458 --- /dev/null +++ b/app/src/main/res/drawable/ic_update.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java new file mode 100644 index 0000000..1b2bb6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java @@ -0,0 +1,107 @@ +package com.casic.dcms.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:55 + * @email : 290677893@qq.com + **/ +public class BroadcastManager { + private static final String TAG = "BroadcastManager"; + private Context mContext; + private static BroadcastManager broadcastManager; + private Map receiverMap; + + private BroadcastManager(Context context) { + this.mContext = context; + receiverMap = new HashMap<>(); + } + + /** + * 双重锁单例 + */ + public static BroadcastManager getInstance(Context context) { + if (broadcastManager == null) { + synchronized (BroadcastManager.class) { + if (broadcastManager == null) { + broadcastManager = new BroadcastManager(context); + } + } + } + return broadcastManager; + } + + /** + * 添加单个Action,广播的初始化 + */ + public void addAction(String action, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + filter.addAction(action); + mContext.registerReceiver(receiver, filter); + receiverMap.put(action, receiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 添加多个Action,广播的初始化 + */ + public void addAction(String[] actions, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + for (String action : actions) { + filter.addAction(action); + receiverMap.put(action, receiver); + } + mContext.registerReceiver(receiver, filter); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 发送广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + public void sendBroadcast(String action, String msg) { + try { + Intent intent = new Intent(); + intent.setAction(action); + intent.putExtra("data", msg); + mContext.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + public void destroy(String... actions) { + try { + if (receiverMap != null) { + for (String action : actions) { + BroadcastReceiver receiver = receiverMap.get(action); + if (receiver != null) { + mContext.unregisterReceiver(receiver); + } + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8c90ccd..e346e1d 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -33,4 +33,6 @@ public static final int PERMISSIONS_CODE = 999; public static final String IP_KEY = "BASE_IP"; + + public static final String LOGIN_OUT_ACTION = "loginOut"; } diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 1781080..c5e0e37 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -2,4 +2,40 @@ public class StringHelper { + public static void saveUserName(String name) { + SaveKeyValues.putValue("userName", name); + } + + public static String getUserName() { + return (String) SaveKeyValues.getValue("userName", ""); + } + + public static void saveUserPhone(String phone) { + SaveKeyValues.putValue("userPhone", phone); + } + + public static String getUserPhone() { + return (String) SaveKeyValues.getValue("userPhone", ""); + } + + public static void saveUserDept(String dept) { + SaveKeyValues.putValue("userDept", dept); + } + + public static String getUserDept() { + return (String) SaveKeyValues.getValue("userDept", ""); + } + + public static boolean isLetterAndDigit(String str) { + boolean isDigit = false; + boolean isLetter = false; + for (int i = 0; i < str.length(); i++) { + if (Character.isDigit(str.charAt(i))) { + isDigit = true; + } else if (Character.isLetter(str.charAt(i))) { + isLetter = true; + } + } + return isDigit && isLetter; + } } diff --git a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java index a02a103..0e63632 100644 --- a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java @@ -2,6 +2,14 @@ public class TokenHelper { + public static void savePublicKey(String key) { + SaveKeyValues.putValue("keyString", key); + } + + public static String getPublicKey() { + return (String) SaveKeyValues.getValue("keyString", ""); + } + public static void saveToken(String token) { SaveKeyValues.putValue("token", token); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index d5dd48a..26c505c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -2,6 +2,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -62,4 +64,20 @@ @POST("/case/add") Observable submit(@Header("token") String token, @Body SubmitInfoBean infoBean); + + /** + * 退出登录 + */ + @GET("/user/logout") + Observable loginOut(@Header("token") String token); + + /** + * 修改密码 + * 如果有转义字符串,需要用FormUrlEncoded + */ + @FormUrlEncoded + @POST("/mgr/changePwd") + Observable changePassword(@Header("token") String token, + @Field("oldPwd") String oldPwd, + @Field("newPwd") String newPwd); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index b557907..1477a0c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -4,6 +4,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -107,4 +109,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.submit(TokenHelper.getToken(), infoBean); } + + /** + * 退出登录 + */ + public static Observable getLoginOutResult() { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.loginOut(TokenHelper.getToken()); + } + + /** + * 修改密码 + */ + public static Observable getChangePasswordResult(String oldPwd, String newPwd) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); + } } diff --git a/app/src/main/res/drawable/bg_editor.xml b/app/src/main/res/drawable/bg_editor.xml new file mode 100644 index 0000000..949d474 --- /dev/null +++ b/app/src/main/res/drawable/bg_editor.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_white.xml b/app/src/main/res/drawable/ic_left_white.xml new file mode 100644 index 0000000..5487d77 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_white.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml new file mode 100644 index 0000000..79d695f --- /dev/null +++ b/app/src/main/res/drawable/ic_right_80.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_update.xml b/app/src/main/res/drawable/ic_update.xml new file mode 100644 index 0000000..5b8e458 --- /dev/null +++ b/app/src/main/res/drawable/ic_update.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/layout/activity_big_pic.xml b/app/src/main/res/layout/activity_big_pic.xml new file mode 100644 index 0000000..551ed62 --- /dev/null +++ b/app/src/main/res/layout/activity_big_pic.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java new file mode 100644 index 0000000..1b2bb6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java @@ -0,0 +1,107 @@ +package com.casic.dcms.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:55 + * @email : 290677893@qq.com + **/ +public class BroadcastManager { + private static final String TAG = "BroadcastManager"; + private Context mContext; + private static BroadcastManager broadcastManager; + private Map receiverMap; + + private BroadcastManager(Context context) { + this.mContext = context; + receiverMap = new HashMap<>(); + } + + /** + * 双重锁单例 + */ + public static BroadcastManager getInstance(Context context) { + if (broadcastManager == null) { + synchronized (BroadcastManager.class) { + if (broadcastManager == null) { + broadcastManager = new BroadcastManager(context); + } + } + } + return broadcastManager; + } + + /** + * 添加单个Action,广播的初始化 + */ + public void addAction(String action, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + filter.addAction(action); + mContext.registerReceiver(receiver, filter); + receiverMap.put(action, receiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 添加多个Action,广播的初始化 + */ + public void addAction(String[] actions, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + for (String action : actions) { + filter.addAction(action); + receiverMap.put(action, receiver); + } + mContext.registerReceiver(receiver, filter); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 发送广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + public void sendBroadcast(String action, String msg) { + try { + Intent intent = new Intent(); + intent.setAction(action); + intent.putExtra("data", msg); + mContext.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + public void destroy(String... actions) { + try { + if (receiverMap != null) { + for (String action : actions) { + BroadcastReceiver receiver = receiverMap.get(action); + if (receiver != null) { + mContext.unregisterReceiver(receiver); + } + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8c90ccd..e346e1d 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -33,4 +33,6 @@ public static final int PERMISSIONS_CODE = 999; public static final String IP_KEY = "BASE_IP"; + + public static final String LOGIN_OUT_ACTION = "loginOut"; } diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 1781080..c5e0e37 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -2,4 +2,40 @@ public class StringHelper { + public static void saveUserName(String name) { + SaveKeyValues.putValue("userName", name); + } + + public static String getUserName() { + return (String) SaveKeyValues.getValue("userName", ""); + } + + public static void saveUserPhone(String phone) { + SaveKeyValues.putValue("userPhone", phone); + } + + public static String getUserPhone() { + return (String) SaveKeyValues.getValue("userPhone", ""); + } + + public static void saveUserDept(String dept) { + SaveKeyValues.putValue("userDept", dept); + } + + public static String getUserDept() { + return (String) SaveKeyValues.getValue("userDept", ""); + } + + public static boolean isLetterAndDigit(String str) { + boolean isDigit = false; + boolean isLetter = false; + for (int i = 0; i < str.length(); i++) { + if (Character.isDigit(str.charAt(i))) { + isDigit = true; + } else if (Character.isLetter(str.charAt(i))) { + isLetter = true; + } + } + return isDigit && isLetter; + } } diff --git a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java index a02a103..0e63632 100644 --- a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java @@ -2,6 +2,14 @@ public class TokenHelper { + public static void savePublicKey(String key) { + SaveKeyValues.putValue("keyString", key); + } + + public static String getPublicKey() { + return (String) SaveKeyValues.getValue("keyString", ""); + } + public static void saveToken(String token) { SaveKeyValues.putValue("token", token); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index d5dd48a..26c505c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -2,6 +2,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -62,4 +64,20 @@ @POST("/case/add") Observable submit(@Header("token") String token, @Body SubmitInfoBean infoBean); + + /** + * 退出登录 + */ + @GET("/user/logout") + Observable loginOut(@Header("token") String token); + + /** + * 修改密码 + * 如果有转义字符串,需要用FormUrlEncoded + */ + @FormUrlEncoded + @POST("/mgr/changePwd") + Observable changePassword(@Header("token") String token, + @Field("oldPwd") String oldPwd, + @Field("newPwd") String newPwd); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index b557907..1477a0c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -4,6 +4,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -107,4 +109,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.submit(TokenHelper.getToken(), infoBean); } + + /** + * 退出登录 + */ + public static Observable getLoginOutResult() { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.loginOut(TokenHelper.getToken()); + } + + /** + * 修改密码 + */ + public static Observable getChangePasswordResult(String oldPwd, String newPwd) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); + } } diff --git a/app/src/main/res/drawable/bg_editor.xml b/app/src/main/res/drawable/bg_editor.xml new file mode 100644 index 0000000..949d474 --- /dev/null +++ b/app/src/main/res/drawable/bg_editor.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_white.xml b/app/src/main/res/drawable/ic_left_white.xml new file mode 100644 index 0000000..5487d77 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_white.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml new file mode 100644 index 0000000..79d695f --- /dev/null +++ b/app/src/main/res/drawable/ic_right_80.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_update.xml b/app/src/main/res/drawable/ic_update.xml new file mode 100644 index 0000000..5b8e458 --- /dev/null +++ b/app/src/main/res/drawable/ic_update.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/layout/activity_big_pic.xml b/app/src/main/res/layout/activity_big_pic.xml new file mode 100644 index 0000000..551ed62 --- /dev/null +++ b/app/src/main/res/layout/activity_big_pic.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_help.xml b/app/src/main/res/layout/activity_help.xml new file mode 100644 index 0000000..f6ef5eb --- /dev/null +++ b/app/src/main/res/layout/activity_help.xml @@ -0,0 +1,28 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java new file mode 100644 index 0000000..1b2bb6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java @@ -0,0 +1,107 @@ +package com.casic.dcms.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:55 + * @email : 290677893@qq.com + **/ +public class BroadcastManager { + private static final String TAG = "BroadcastManager"; + private Context mContext; + private static BroadcastManager broadcastManager; + private Map receiverMap; + + private BroadcastManager(Context context) { + this.mContext = context; + receiverMap = new HashMap<>(); + } + + /** + * 双重锁单例 + */ + public static BroadcastManager getInstance(Context context) { + if (broadcastManager == null) { + synchronized (BroadcastManager.class) { + if (broadcastManager == null) { + broadcastManager = new BroadcastManager(context); + } + } + } + return broadcastManager; + } + + /** + * 添加单个Action,广播的初始化 + */ + public void addAction(String action, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + filter.addAction(action); + mContext.registerReceiver(receiver, filter); + receiverMap.put(action, receiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 添加多个Action,广播的初始化 + */ + public void addAction(String[] actions, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + for (String action : actions) { + filter.addAction(action); + receiverMap.put(action, receiver); + } + mContext.registerReceiver(receiver, filter); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 发送广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + public void sendBroadcast(String action, String msg) { + try { + Intent intent = new Intent(); + intent.setAction(action); + intent.putExtra("data", msg); + mContext.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + public void destroy(String... actions) { + try { + if (receiverMap != null) { + for (String action : actions) { + BroadcastReceiver receiver = receiverMap.get(action); + if (receiver != null) { + mContext.unregisterReceiver(receiver); + } + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8c90ccd..e346e1d 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -33,4 +33,6 @@ public static final int PERMISSIONS_CODE = 999; public static final String IP_KEY = "BASE_IP"; + + public static final String LOGIN_OUT_ACTION = "loginOut"; } diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 1781080..c5e0e37 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -2,4 +2,40 @@ public class StringHelper { + public static void saveUserName(String name) { + SaveKeyValues.putValue("userName", name); + } + + public static String getUserName() { + return (String) SaveKeyValues.getValue("userName", ""); + } + + public static void saveUserPhone(String phone) { + SaveKeyValues.putValue("userPhone", phone); + } + + public static String getUserPhone() { + return (String) SaveKeyValues.getValue("userPhone", ""); + } + + public static void saveUserDept(String dept) { + SaveKeyValues.putValue("userDept", dept); + } + + public static String getUserDept() { + return (String) SaveKeyValues.getValue("userDept", ""); + } + + public static boolean isLetterAndDigit(String str) { + boolean isDigit = false; + boolean isLetter = false; + for (int i = 0; i < str.length(); i++) { + if (Character.isDigit(str.charAt(i))) { + isDigit = true; + } else if (Character.isLetter(str.charAt(i))) { + isLetter = true; + } + } + return isDigit && isLetter; + } } diff --git a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java index a02a103..0e63632 100644 --- a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java @@ -2,6 +2,14 @@ public class TokenHelper { + public static void savePublicKey(String key) { + SaveKeyValues.putValue("keyString", key); + } + + public static String getPublicKey() { + return (String) SaveKeyValues.getValue("keyString", ""); + } + public static void saveToken(String token) { SaveKeyValues.putValue("token", token); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index d5dd48a..26c505c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -2,6 +2,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -62,4 +64,20 @@ @POST("/case/add") Observable submit(@Header("token") String token, @Body SubmitInfoBean infoBean); + + /** + * 退出登录 + */ + @GET("/user/logout") + Observable loginOut(@Header("token") String token); + + /** + * 修改密码 + * 如果有转义字符串,需要用FormUrlEncoded + */ + @FormUrlEncoded + @POST("/mgr/changePwd") + Observable changePassword(@Header("token") String token, + @Field("oldPwd") String oldPwd, + @Field("newPwd") String newPwd); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index b557907..1477a0c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -4,6 +4,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -107,4 +109,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.submit(TokenHelper.getToken(), infoBean); } + + /** + * 退出登录 + */ + public static Observable getLoginOutResult() { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.loginOut(TokenHelper.getToken()); + } + + /** + * 修改密码 + */ + public static Observable getChangePasswordResult(String oldPwd, String newPwd) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); + } } diff --git a/app/src/main/res/drawable/bg_editor.xml b/app/src/main/res/drawable/bg_editor.xml new file mode 100644 index 0000000..949d474 --- /dev/null +++ b/app/src/main/res/drawable/bg_editor.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_white.xml b/app/src/main/res/drawable/ic_left_white.xml new file mode 100644 index 0000000..5487d77 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_white.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml new file mode 100644 index 0000000..79d695f --- /dev/null +++ b/app/src/main/res/drawable/ic_right_80.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_update.xml b/app/src/main/res/drawable/ic_update.xml new file mode 100644 index 0000000..5b8e458 --- /dev/null +++ b/app/src/main/res/drawable/ic_update.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/layout/activity_big_pic.xml b/app/src/main/res/layout/activity_big_pic.xml new file mode 100644 index 0000000..551ed62 --- /dev/null +++ b/app/src/main/res/layout/activity_big_pic.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_help.xml b/app/src/main/res/layout/activity_help.xml new file mode 100644 index 0000000..f6ef5eb --- /dev/null +++ b/app/src/main/res/layout/activity_help.xml @@ -0,0 +1,28 @@ + + + + + + + + + + \ 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 866df49..a567af8 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,11 +1,15 @@ + android:orientation="vertical"> + + + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java new file mode 100644 index 0000000..1b2bb6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java @@ -0,0 +1,107 @@ +package com.casic.dcms.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:55 + * @email : 290677893@qq.com + **/ +public class BroadcastManager { + private static final String TAG = "BroadcastManager"; + private Context mContext; + private static BroadcastManager broadcastManager; + private Map receiverMap; + + private BroadcastManager(Context context) { + this.mContext = context; + receiverMap = new HashMap<>(); + } + + /** + * 双重锁单例 + */ + public static BroadcastManager getInstance(Context context) { + if (broadcastManager == null) { + synchronized (BroadcastManager.class) { + if (broadcastManager == null) { + broadcastManager = new BroadcastManager(context); + } + } + } + return broadcastManager; + } + + /** + * 添加单个Action,广播的初始化 + */ + public void addAction(String action, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + filter.addAction(action); + mContext.registerReceiver(receiver, filter); + receiverMap.put(action, receiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 添加多个Action,广播的初始化 + */ + public void addAction(String[] actions, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + for (String action : actions) { + filter.addAction(action); + receiverMap.put(action, receiver); + } + mContext.registerReceiver(receiver, filter); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 发送广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + public void sendBroadcast(String action, String msg) { + try { + Intent intent = new Intent(); + intent.setAction(action); + intent.putExtra("data", msg); + mContext.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + public void destroy(String... actions) { + try { + if (receiverMap != null) { + for (String action : actions) { + BroadcastReceiver receiver = receiverMap.get(action); + if (receiver != null) { + mContext.unregisterReceiver(receiver); + } + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8c90ccd..e346e1d 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -33,4 +33,6 @@ public static final int PERMISSIONS_CODE = 999; public static final String IP_KEY = "BASE_IP"; + + public static final String LOGIN_OUT_ACTION = "loginOut"; } diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 1781080..c5e0e37 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -2,4 +2,40 @@ public class StringHelper { + public static void saveUserName(String name) { + SaveKeyValues.putValue("userName", name); + } + + public static String getUserName() { + return (String) SaveKeyValues.getValue("userName", ""); + } + + public static void saveUserPhone(String phone) { + SaveKeyValues.putValue("userPhone", phone); + } + + public static String getUserPhone() { + return (String) SaveKeyValues.getValue("userPhone", ""); + } + + public static void saveUserDept(String dept) { + SaveKeyValues.putValue("userDept", dept); + } + + public static String getUserDept() { + return (String) SaveKeyValues.getValue("userDept", ""); + } + + public static boolean isLetterAndDigit(String str) { + boolean isDigit = false; + boolean isLetter = false; + for (int i = 0; i < str.length(); i++) { + if (Character.isDigit(str.charAt(i))) { + isDigit = true; + } else if (Character.isLetter(str.charAt(i))) { + isLetter = true; + } + } + return isDigit && isLetter; + } } diff --git a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java index a02a103..0e63632 100644 --- a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java @@ -2,6 +2,14 @@ public class TokenHelper { + public static void savePublicKey(String key) { + SaveKeyValues.putValue("keyString", key); + } + + public static String getPublicKey() { + return (String) SaveKeyValues.getValue("keyString", ""); + } + public static void saveToken(String token) { SaveKeyValues.putValue("token", token); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index d5dd48a..26c505c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -2,6 +2,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -62,4 +64,20 @@ @POST("/case/add") Observable submit(@Header("token") String token, @Body SubmitInfoBean infoBean); + + /** + * 退出登录 + */ + @GET("/user/logout") + Observable loginOut(@Header("token") String token); + + /** + * 修改密码 + * 如果有转义字符串,需要用FormUrlEncoded + */ + @FormUrlEncoded + @POST("/mgr/changePwd") + Observable changePassword(@Header("token") String token, + @Field("oldPwd") String oldPwd, + @Field("newPwd") String newPwd); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index b557907..1477a0c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -4,6 +4,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -107,4 +109,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.submit(TokenHelper.getToken(), infoBean); } + + /** + * 退出登录 + */ + public static Observable getLoginOutResult() { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.loginOut(TokenHelper.getToken()); + } + + /** + * 修改密码 + */ + public static Observable getChangePasswordResult(String oldPwd, String newPwd) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); + } } diff --git a/app/src/main/res/drawable/bg_editor.xml b/app/src/main/res/drawable/bg_editor.xml new file mode 100644 index 0000000..949d474 --- /dev/null +++ b/app/src/main/res/drawable/bg_editor.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_white.xml b/app/src/main/res/drawable/ic_left_white.xml new file mode 100644 index 0000000..5487d77 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_white.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml new file mode 100644 index 0000000..79d695f --- /dev/null +++ b/app/src/main/res/drawable/ic_right_80.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_update.xml b/app/src/main/res/drawable/ic_update.xml new file mode 100644 index 0000000..5b8e458 --- /dev/null +++ b/app/src/main/res/drawable/ic_update.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/layout/activity_big_pic.xml b/app/src/main/res/layout/activity_big_pic.xml new file mode 100644 index 0000000..551ed62 --- /dev/null +++ b/app/src/main/res/layout/activity_big_pic.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_help.xml b/app/src/main/res/layout/activity_help.xml new file mode 100644 index 0000000..f6ef5eb --- /dev/null +++ b/app/src/main/res/layout/activity_help.xml @@ -0,0 +1,28 @@ + + + + + + + + + + \ 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 866df49..a567af8 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,11 +1,15 @@ + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java new file mode 100644 index 0000000..1b2bb6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java @@ -0,0 +1,107 @@ +package com.casic.dcms.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:55 + * @email : 290677893@qq.com + **/ +public class BroadcastManager { + private static final String TAG = "BroadcastManager"; + private Context mContext; + private static BroadcastManager broadcastManager; + private Map receiverMap; + + private BroadcastManager(Context context) { + this.mContext = context; + receiverMap = new HashMap<>(); + } + + /** + * 双重锁单例 + */ + public static BroadcastManager getInstance(Context context) { + if (broadcastManager == null) { + synchronized (BroadcastManager.class) { + if (broadcastManager == null) { + broadcastManager = new BroadcastManager(context); + } + } + } + return broadcastManager; + } + + /** + * 添加单个Action,广播的初始化 + */ + public void addAction(String action, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + filter.addAction(action); + mContext.registerReceiver(receiver, filter); + receiverMap.put(action, receiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 添加多个Action,广播的初始化 + */ + public void addAction(String[] actions, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + for (String action : actions) { + filter.addAction(action); + receiverMap.put(action, receiver); + } + mContext.registerReceiver(receiver, filter); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 发送广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + public void sendBroadcast(String action, String msg) { + try { + Intent intent = new Intent(); + intent.setAction(action); + intent.putExtra("data", msg); + mContext.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + public void destroy(String... actions) { + try { + if (receiverMap != null) { + for (String action : actions) { + BroadcastReceiver receiver = receiverMap.get(action); + if (receiver != null) { + mContext.unregisterReceiver(receiver); + } + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8c90ccd..e346e1d 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -33,4 +33,6 @@ public static final int PERMISSIONS_CODE = 999; public static final String IP_KEY = "BASE_IP"; + + public static final String LOGIN_OUT_ACTION = "loginOut"; } diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 1781080..c5e0e37 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -2,4 +2,40 @@ public class StringHelper { + public static void saveUserName(String name) { + SaveKeyValues.putValue("userName", name); + } + + public static String getUserName() { + return (String) SaveKeyValues.getValue("userName", ""); + } + + public static void saveUserPhone(String phone) { + SaveKeyValues.putValue("userPhone", phone); + } + + public static String getUserPhone() { + return (String) SaveKeyValues.getValue("userPhone", ""); + } + + public static void saveUserDept(String dept) { + SaveKeyValues.putValue("userDept", dept); + } + + public static String getUserDept() { + return (String) SaveKeyValues.getValue("userDept", ""); + } + + public static boolean isLetterAndDigit(String str) { + boolean isDigit = false; + boolean isLetter = false; + for (int i = 0; i < str.length(); i++) { + if (Character.isDigit(str.charAt(i))) { + isDigit = true; + } else if (Character.isLetter(str.charAt(i))) { + isLetter = true; + } + } + return isDigit && isLetter; + } } diff --git a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java index a02a103..0e63632 100644 --- a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java @@ -2,6 +2,14 @@ public class TokenHelper { + public static void savePublicKey(String key) { + SaveKeyValues.putValue("keyString", key); + } + + public static String getPublicKey() { + return (String) SaveKeyValues.getValue("keyString", ""); + } + public static void saveToken(String token) { SaveKeyValues.putValue("token", token); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index d5dd48a..26c505c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -2,6 +2,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -62,4 +64,20 @@ @POST("/case/add") Observable submit(@Header("token") String token, @Body SubmitInfoBean infoBean); + + /** + * 退出登录 + */ + @GET("/user/logout") + Observable loginOut(@Header("token") String token); + + /** + * 修改密码 + * 如果有转义字符串,需要用FormUrlEncoded + */ + @FormUrlEncoded + @POST("/mgr/changePwd") + Observable changePassword(@Header("token") String token, + @Field("oldPwd") String oldPwd, + @Field("newPwd") String newPwd); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index b557907..1477a0c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -4,6 +4,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -107,4 +109,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.submit(TokenHelper.getToken(), infoBean); } + + /** + * 退出登录 + */ + public static Observable getLoginOutResult() { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.loginOut(TokenHelper.getToken()); + } + + /** + * 修改密码 + */ + public static Observable getChangePasswordResult(String oldPwd, String newPwd) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); + } } diff --git a/app/src/main/res/drawable/bg_editor.xml b/app/src/main/res/drawable/bg_editor.xml new file mode 100644 index 0000000..949d474 --- /dev/null +++ b/app/src/main/res/drawable/bg_editor.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_white.xml b/app/src/main/res/drawable/ic_left_white.xml new file mode 100644 index 0000000..5487d77 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_white.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml new file mode 100644 index 0000000..79d695f --- /dev/null +++ b/app/src/main/res/drawable/ic_right_80.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_update.xml b/app/src/main/res/drawable/ic_update.xml new file mode 100644 index 0000000..5b8e458 --- /dev/null +++ b/app/src/main/res/drawable/ic_update.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/layout/activity_big_pic.xml b/app/src/main/res/layout/activity_big_pic.xml new file mode 100644 index 0000000..551ed62 --- /dev/null +++ b/app/src/main/res/layout/activity_big_pic.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_help.xml b/app/src/main/res/layout/activity_help.xml new file mode 100644 index 0000000..f6ef5eb --- /dev/null +++ b/app/src/main/res/layout/activity_help.xml @@ -0,0 +1,28 @@ + + + + + + + + + + \ 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 866df49..a567af8 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,11 +1,15 @@ + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user.xml b/app/src/main/res/layout/activity_user.xml new file mode 100644 index 0000000..5fb2176 --- /dev/null +++ b/app/src/main/res/layout/activity_user.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java new file mode 100644 index 0000000..1b2bb6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java @@ -0,0 +1,107 @@ +package com.casic.dcms.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:55 + * @email : 290677893@qq.com + **/ +public class BroadcastManager { + private static final String TAG = "BroadcastManager"; + private Context mContext; + private static BroadcastManager broadcastManager; + private Map receiverMap; + + private BroadcastManager(Context context) { + this.mContext = context; + receiverMap = new HashMap<>(); + } + + /** + * 双重锁单例 + */ + public static BroadcastManager getInstance(Context context) { + if (broadcastManager == null) { + synchronized (BroadcastManager.class) { + if (broadcastManager == null) { + broadcastManager = new BroadcastManager(context); + } + } + } + return broadcastManager; + } + + /** + * 添加单个Action,广播的初始化 + */ + public void addAction(String action, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + filter.addAction(action); + mContext.registerReceiver(receiver, filter); + receiverMap.put(action, receiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 添加多个Action,广播的初始化 + */ + public void addAction(String[] actions, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + for (String action : actions) { + filter.addAction(action); + receiverMap.put(action, receiver); + } + mContext.registerReceiver(receiver, filter); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 发送广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + public void sendBroadcast(String action, String msg) { + try { + Intent intent = new Intent(); + intent.setAction(action); + intent.putExtra("data", msg); + mContext.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + public void destroy(String... actions) { + try { + if (receiverMap != null) { + for (String action : actions) { + BroadcastReceiver receiver = receiverMap.get(action); + if (receiver != null) { + mContext.unregisterReceiver(receiver); + } + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8c90ccd..e346e1d 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -33,4 +33,6 @@ public static final int PERMISSIONS_CODE = 999; public static final String IP_KEY = "BASE_IP"; + + public static final String LOGIN_OUT_ACTION = "loginOut"; } diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 1781080..c5e0e37 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -2,4 +2,40 @@ public class StringHelper { + public static void saveUserName(String name) { + SaveKeyValues.putValue("userName", name); + } + + public static String getUserName() { + return (String) SaveKeyValues.getValue("userName", ""); + } + + public static void saveUserPhone(String phone) { + SaveKeyValues.putValue("userPhone", phone); + } + + public static String getUserPhone() { + return (String) SaveKeyValues.getValue("userPhone", ""); + } + + public static void saveUserDept(String dept) { + SaveKeyValues.putValue("userDept", dept); + } + + public static String getUserDept() { + return (String) SaveKeyValues.getValue("userDept", ""); + } + + public static boolean isLetterAndDigit(String str) { + boolean isDigit = false; + boolean isLetter = false; + for (int i = 0; i < str.length(); i++) { + if (Character.isDigit(str.charAt(i))) { + isDigit = true; + } else if (Character.isLetter(str.charAt(i))) { + isLetter = true; + } + } + return isDigit && isLetter; + } } diff --git a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java index a02a103..0e63632 100644 --- a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java @@ -2,6 +2,14 @@ public class TokenHelper { + public static void savePublicKey(String key) { + SaveKeyValues.putValue("keyString", key); + } + + public static String getPublicKey() { + return (String) SaveKeyValues.getValue("keyString", ""); + } + public static void saveToken(String token) { SaveKeyValues.putValue("token", token); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index d5dd48a..26c505c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -2,6 +2,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -62,4 +64,20 @@ @POST("/case/add") Observable submit(@Header("token") String token, @Body SubmitInfoBean infoBean); + + /** + * 退出登录 + */ + @GET("/user/logout") + Observable loginOut(@Header("token") String token); + + /** + * 修改密码 + * 如果有转义字符串,需要用FormUrlEncoded + */ + @FormUrlEncoded + @POST("/mgr/changePwd") + Observable changePassword(@Header("token") String token, + @Field("oldPwd") String oldPwd, + @Field("newPwd") String newPwd); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index b557907..1477a0c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -4,6 +4,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -107,4 +109,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.submit(TokenHelper.getToken(), infoBean); } + + /** + * 退出登录 + */ + public static Observable getLoginOutResult() { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.loginOut(TokenHelper.getToken()); + } + + /** + * 修改密码 + */ + public static Observable getChangePasswordResult(String oldPwd, String newPwd) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); + } } diff --git a/app/src/main/res/drawable/bg_editor.xml b/app/src/main/res/drawable/bg_editor.xml new file mode 100644 index 0000000..949d474 --- /dev/null +++ b/app/src/main/res/drawable/bg_editor.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_white.xml b/app/src/main/res/drawable/ic_left_white.xml new file mode 100644 index 0000000..5487d77 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_white.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml new file mode 100644 index 0000000..79d695f --- /dev/null +++ b/app/src/main/res/drawable/ic_right_80.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_update.xml b/app/src/main/res/drawable/ic_update.xml new file mode 100644 index 0000000..5b8e458 --- /dev/null +++ b/app/src/main/res/drawable/ic_update.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/layout/activity_big_pic.xml b/app/src/main/res/layout/activity_big_pic.xml new file mode 100644 index 0000000..551ed62 --- /dev/null +++ b/app/src/main/res/layout/activity_big_pic.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_help.xml b/app/src/main/res/layout/activity_help.xml new file mode 100644 index 0000000..f6ef5eb --- /dev/null +++ b/app/src/main/res/layout/activity_help.xml @@ -0,0 +1,28 @@ + + + + + + + + + + \ 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 866df49..a567af8 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,11 +1,15 @@ + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user.xml b/app/src/main/res/layout/activity_user.xml new file mode 100644 index 0000000..5fb2176 --- /dev/null +++ b/app/src/main/res/layout/activity_user.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 5b20e2d..18ec11b 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -9,14 +9,14 @@ android:layout_width="match_parent" android:layout_height="260dp" android:background="@color/mainThemeColor" - android:gravity="center" android:orientation="vertical"> @@ -25,7 +25,8 @@ android:id="@+id/userNameView" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginVertical="10dp" + android:layout_gravity="center_horizontal" + android:layout_marginVertical="5dp" android:textColor="@color/white" android:textSize="20sp" /> @@ -33,14 +34,15 @@ android:id="@+id/userDeptView" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" android:textColor="@color/userJobTextColor" /> diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java new file mode 100644 index 0000000..1b2bb6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java @@ -0,0 +1,107 @@ +package com.casic.dcms.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:55 + * @email : 290677893@qq.com + **/ +public class BroadcastManager { + private static final String TAG = "BroadcastManager"; + private Context mContext; + private static BroadcastManager broadcastManager; + private Map receiverMap; + + private BroadcastManager(Context context) { + this.mContext = context; + receiverMap = new HashMap<>(); + } + + /** + * 双重锁单例 + */ + public static BroadcastManager getInstance(Context context) { + if (broadcastManager == null) { + synchronized (BroadcastManager.class) { + if (broadcastManager == null) { + broadcastManager = new BroadcastManager(context); + } + } + } + return broadcastManager; + } + + /** + * 添加单个Action,广播的初始化 + */ + public void addAction(String action, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + filter.addAction(action); + mContext.registerReceiver(receiver, filter); + receiverMap.put(action, receiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 添加多个Action,广播的初始化 + */ + public void addAction(String[] actions, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + for (String action : actions) { + filter.addAction(action); + receiverMap.put(action, receiver); + } + mContext.registerReceiver(receiver, filter); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 发送广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + public void sendBroadcast(String action, String msg) { + try { + Intent intent = new Intent(); + intent.setAction(action); + intent.putExtra("data", msg); + mContext.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + public void destroy(String... actions) { + try { + if (receiverMap != null) { + for (String action : actions) { + BroadcastReceiver receiver = receiverMap.get(action); + if (receiver != null) { + mContext.unregisterReceiver(receiver); + } + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8c90ccd..e346e1d 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -33,4 +33,6 @@ public static final int PERMISSIONS_CODE = 999; public static final String IP_KEY = "BASE_IP"; + + public static final String LOGIN_OUT_ACTION = "loginOut"; } diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 1781080..c5e0e37 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -2,4 +2,40 @@ public class StringHelper { + public static void saveUserName(String name) { + SaveKeyValues.putValue("userName", name); + } + + public static String getUserName() { + return (String) SaveKeyValues.getValue("userName", ""); + } + + public static void saveUserPhone(String phone) { + SaveKeyValues.putValue("userPhone", phone); + } + + public static String getUserPhone() { + return (String) SaveKeyValues.getValue("userPhone", ""); + } + + public static void saveUserDept(String dept) { + SaveKeyValues.putValue("userDept", dept); + } + + public static String getUserDept() { + return (String) SaveKeyValues.getValue("userDept", ""); + } + + public static boolean isLetterAndDigit(String str) { + boolean isDigit = false; + boolean isLetter = false; + for (int i = 0; i < str.length(); i++) { + if (Character.isDigit(str.charAt(i))) { + isDigit = true; + } else if (Character.isLetter(str.charAt(i))) { + isLetter = true; + } + } + return isDigit && isLetter; + } } diff --git a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java index a02a103..0e63632 100644 --- a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java @@ -2,6 +2,14 @@ public class TokenHelper { + public static void savePublicKey(String key) { + SaveKeyValues.putValue("keyString", key); + } + + public static String getPublicKey() { + return (String) SaveKeyValues.getValue("keyString", ""); + } + public static void saveToken(String token) { SaveKeyValues.putValue("token", token); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index d5dd48a..26c505c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -2,6 +2,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -62,4 +64,20 @@ @POST("/case/add") Observable submit(@Header("token") String token, @Body SubmitInfoBean infoBean); + + /** + * 退出登录 + */ + @GET("/user/logout") + Observable loginOut(@Header("token") String token); + + /** + * 修改密码 + * 如果有转义字符串,需要用FormUrlEncoded + */ + @FormUrlEncoded + @POST("/mgr/changePwd") + Observable changePassword(@Header("token") String token, + @Field("oldPwd") String oldPwd, + @Field("newPwd") String newPwd); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index b557907..1477a0c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -4,6 +4,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -107,4 +109,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.submit(TokenHelper.getToken(), infoBean); } + + /** + * 退出登录 + */ + public static Observable getLoginOutResult() { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.loginOut(TokenHelper.getToken()); + } + + /** + * 修改密码 + */ + public static Observable getChangePasswordResult(String oldPwd, String newPwd) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); + } } diff --git a/app/src/main/res/drawable/bg_editor.xml b/app/src/main/res/drawable/bg_editor.xml new file mode 100644 index 0000000..949d474 --- /dev/null +++ b/app/src/main/res/drawable/bg_editor.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_white.xml b/app/src/main/res/drawable/ic_left_white.xml new file mode 100644 index 0000000..5487d77 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_white.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml new file mode 100644 index 0000000..79d695f --- /dev/null +++ b/app/src/main/res/drawable/ic_right_80.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_update.xml b/app/src/main/res/drawable/ic_update.xml new file mode 100644 index 0000000..5b8e458 --- /dev/null +++ b/app/src/main/res/drawable/ic_update.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/layout/activity_big_pic.xml b/app/src/main/res/layout/activity_big_pic.xml new file mode 100644 index 0000000..551ed62 --- /dev/null +++ b/app/src/main/res/layout/activity_big_pic.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_help.xml b/app/src/main/res/layout/activity_help.xml new file mode 100644 index 0000000..f6ef5eb --- /dev/null +++ b/app/src/main/res/layout/activity_help.xml @@ -0,0 +1,28 @@ + + + + + + + + + + \ 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 866df49..a567af8 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,11 +1,15 @@ + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user.xml b/app/src/main/res/layout/activity_user.xml new file mode 100644 index 0000000..5fb2176 --- /dev/null +++ b/app/src/main/res/layout/activity_user.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 5b20e2d..18ec11b 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -9,14 +9,14 @@ android:layout_width="match_parent" android:layout_height="260dp" android:background="@color/mainThemeColor" - android:gravity="center" android:orientation="vertical"> @@ -25,7 +25,8 @@ android:id="@+id/userNameView" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginVertical="10dp" + android:layout_gravity="center_horizontal" + android:layout_marginVertical="5dp" android:textColor="@color/white" android:textSize="20sp" /> @@ -33,14 +34,15 @@ android:id="@+id/userDeptView" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" android:textColor="@color/userJobTextColor" /> diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index 608b04e..b4c4ff3 100644 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -1,7 +1,131 @@ - + android:background="@color/white"> - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a15228..7befe7c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,10 @@ + + + + 2000) { - Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); + ToastHelper.showToast("再按一次退出程序", ToastHelper.DEFAULT); clickTime = System.currentTimeMillis(); return true; } else { diff --git a/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java new file mode 100644 index 0000000..b1fd3d8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/ChangePasswordResultBean.java @@ -0,0 +1,63 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 14:18 + * @email : 290677893@qq.com + **/ +public class ChangePasswordResultBean { + + /** + * code : 500.0 + * data : + * exceptionClazz : + * message : 服务器异常 + * success : false + */ + + private double code; + private String data; + private String exceptionClazz; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getExceptionClazz() { + return exceptionClazz; + } + + public void setExceptionClazz(String exceptionClazz) { + this.exceptionClazz = exceptionClazz; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java new file mode 100644 index 0000000..8bbc26c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/LoginOutResultBean.java @@ -0,0 +1,53 @@ +package com.casic.dcms.bean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:37 + * @email : 290677893@qq.com + **/ +public class LoginOutResultBean { + + /** + * code : 200 + * data : + * message : 请求成功 + * success : true + */ + + private int code; + private String data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java index d307cbc..f23402b 100644 --- a/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java +++ b/app/src/main/java/com/casic/dcms/bean/SubmitInfoBean.java @@ -22,9 +22,9 @@ * @param gridId 万米网格ID,后期地图接入后维护 * @param description 案件描述 * @param fieldintro 位置描述 - * @param fileIdVerify 核实照片id,即照片路径 - * @param bzhours 限制完成总时限(小时) - * @param bzminis 限制完成总时限(分) + * @param fileIdVerify 核实照片id,即照片路径(非必填) + * @param bzhours 限制完成总时限(小时)(非必填) + * @param bzminis 限制完成总时限(分)(非必填) */ private String isNeedVerify; private String isNeedRevisit; diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java new file mode 100644 index 0000000..cd640aa --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ChangePasswordModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class ChangePasswordModelImpl implements IChangePasswordModel { + + private OnPasswordChangedListener listener; + + public ChangePasswordModelImpl(OnPasswordChangedListener changedListener) { + this.listener = changedListener; + } + + /** + * 数据回调接口 + */ + public interface OnPasswordChangedListener { + void onSuccess(ChangePasswordResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest(String oldPwd, String newPwd) { + Observable observable = RetrofitServiceManager.getChangePasswordResult(oldPwd, newPwd); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ChangePasswordResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java new file mode 100644 index 0000000..1cfa514 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IChangePasswordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface IChangePasswordModel { + Subscription sendRetrofitRequest(String oldPwd, String newPwd); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java new file mode 100644 index 0000000..279a0dd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ILoginOutActionModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ILoginOutActionModel { + Subscription sendRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java new file mode 100644 index 0000000..5bf3b34 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/LoginOutActionModelImpl.java @@ -0,0 +1,54 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginOutActionModelImpl implements ILoginOutActionModel { + + private OnLoginOutListener listener; + + public LoginOutActionModelImpl(OnLoginOutListener loginOutListener) { + this.listener = loginOutListener; + } + + /** + * 数据回调接口 + */ + public interface OnLoginOutListener { + void onSuccess(LoginOutResultBean resultBean); + + void onFailure(Throwable throwable); + } + + + @Override + public Subscription sendRetrofitRequest() { + Observable observable = RetrofitServiceManager.getLoginOutResult(); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(LoginOutResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java new file mode 100644 index 0000000..3eba3f3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ChangePasswordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.ChangePasswordModelImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; + +public class ChangePasswordPresenterImpl extends BasePresenter implements IChangePasswordPresenter, ChangePasswordModelImpl.OnPasswordChangedListener { + + private IChangePasswordView view; + private ChangePasswordModelImpl actionModel; + + public ChangePasswordPresenterImpl(IChangePasswordView changePasswordView) { + this.view = changePasswordView; + actionModel = new ChangePasswordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String oldPwd, String newPwd) { + addSubscription(actionModel.sendRetrofitRequest(oldPwd, newPwd)); + } + + @Override + public void onSuccess(ChangePasswordResultBean resultBean) { + view.obtainChangePassResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java new file mode 100644 index 0000000..fe6c5f7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IChangePasswordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface IChangePasswordPresenter { + void onReadyRetrofitRequest(String oldPwd, String newPwd); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java new file mode 100644 index 0000000..4e2c7c1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ILoginOutPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ILoginOutPresenter { + void onReadyRetrofitRequest(); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java new file mode 100644 index 0000000..74a6a24 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/LoginOutPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.LoginOutActionModelImpl; +import com.casic.dcms.mvp.view.ILoginOutView; + +public class LoginOutPresenterImpl extends BasePresenter implements ILoginOutPresenter, LoginOutActionModelImpl.OnLoginOutListener { + + private ILoginOutView view; + private LoginOutActionModelImpl actionModel; + + public LoginOutPresenterImpl(ILoginOutView loginOutView) { + this.view = loginOutView; + actionModel = new LoginOutActionModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest() { + addSubscription(actionModel.sendRetrofitRequest()); + } + + @Override + public void onSuccess(LoginOutResultBean resultBean) { + view.obtainLoginOutResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java index 2119b70..0bcea6a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UserDataPresenterImpl.java @@ -17,7 +17,6 @@ @Override public void onReadyRetrofitRequest() { - view.showProgress(); addSubscription(actionModel.sendRetrofitRequest()); } @@ -28,12 +27,11 @@ @Override public void onSuccess(UserBean userBean) { - view.hideProgress(); view.obtainUserData(userBean); } @Override public void onFailure(Throwable throwable) { - view.hideProgress(); + } } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java new file mode 100644 index 0000000..c2a84ab --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IChangePasswordView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ChangePasswordResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface IChangePasswordView { + void obtainChangePassResult(ChangePasswordResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java new file mode 100644 index 0000000..de3e421 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ILoginOutView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.LoginOutResultBean; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:29 + * @email : 290677893@qq.com + **/ +public interface ILoginOutView { + void obtainLoginOutResult(LoginOutResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java index 2b51d64..bcd16a9 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/IUserDataView.java @@ -3,9 +3,5 @@ import com.casic.dcms.bean.UserBean; public interface IUserDataView { - void showProgress(); - - void hideProgress(); - void obtainUserData(UserBean userBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java new file mode 100644 index 0000000..ad70b7a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/BigPictureActivity.java @@ -0,0 +1,61 @@ +package com.casic.dcms.ui; + +import com.bumptech.glide.Glide; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.luck.picture.lib.photoview.PhotoView; +import com.qmuiteam.qmui.util.QMUIStatusBarHelper; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 17:09 + * @email : 290677893@qq.com + **/ +public class BigPictureActivity extends BaseActivity { + + @BindView(R.id.photoView) + PhotoView photoView; + + @Override + public int initLayoutView() { + return R.layout.activity_big_pic; + } + + @Override + protected void setupTopBarLayout() { + QMUIStatusBarHelper.setStatusBarLightMode(this); + } + + @Override + public void initData() { +// String mediaJson = getIntent().getStringExtra("mediaJson"); +// +// List mediaList = new Gson().fromJson(mediaJson, new TypeToken>() { +// }.getType()); +// +// list = new ArrayList<>(); +// assert mediaList != null; +// for (LocalMedia media : mediaList) { +// list.add(media.getRealPath()); +// } + String path = getIntent().getStringExtra("path"); + Glide.with(this).load(path).into(photoView); + } + + @Override + public void initEvent() { +// //轮播图 +// bigImageBanner.setImageLoader(new ImageLoader() { +// +// @Override +// public void displayImage(Context context, Object path, ImageView imageView) { +// Glide.with(context).load(path).into(imageView); +// } +// }); +// bigImageBanner.isAutoPlay(false); +// bigImageBanner.setImages(list); +// bigImageBanner.start(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 7c2bbc6..aa4100a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -109,6 +109,7 @@ private QMUITipDialog submitDialog; private SubmitInfoBean infoBean; private HashMap locationMap; + private Gson gson; @Override public int initLayoutView() { @@ -129,6 +130,7 @@ @Override public void initData() { + gson = new Gson(); //进入页面即创建提交表单的实体 infoBean = new SubmitInfoBean(); infoBean.setIsNeedRevisit("0"); @@ -388,6 +390,10 @@ imageGridViewAdapter.notifyDataSetChanged(); if (selectList.size() == 0) { selectedResultView.setVisibility(View.GONE); + addImageView.setVisibility(View.VISIBLE); + } else { + selectedResultView.setVisibility(View.VISIBLE); + addImageView.setVisibility(View.GONE); } } }); @@ -433,7 +439,10 @@ } private void showBigImage(String path) { - + Intent intent = new Intent(this, BigPictureActivity.class); +// intent.putExtra("mediaJson", gson.toJson(mediaList)); + intent.putExtra("path", path); + startActivity(intent); } @SuppressLint("ClickableViewAccessibility") @@ -501,7 +510,7 @@ @Override public void obtainLargeClassData(CaseLargeClassBean largeClassBean) { -// Log.d(TAG, "obtainLargeClassData: " + new Gson().toJson(largeClassBean)); +// Log.d(TAG, "obtainLargeClassData: " + gson.toJson(largeClassBean)); if (largeClassBean.isSuccess()) { //设置大类数据 this.largeClassBeans = largeClassBean.getData(); @@ -556,13 +565,13 @@ } else { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - Log.d(TAG, "submitCase: " + new Gson().toJson(infoBean)); + Log.d(TAG, "submitCase: " + gson.toJson(infoBean)); caseSubmitPresenter.onReadyRetrofitRequest(infoBean); } @Override public void obtainSubmitResult(SubmitResultBean resultBean) { - Log.d(TAG, "obtainSubmitResult: " + new Gson().toJson(resultBean)); + Log.d(TAG, "obtainSubmitResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { ToastHelper.showToast("案卷提交成功", ToastHelper.SUCCESS); } else { diff --git a/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java new file mode 100644 index 0000000..891b7a3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ChangePasswordActivity.java @@ -0,0 +1,124 @@ +package com.casic.dcms.ui; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.mvp.presenter.ChangePasswordPresenterImpl; +import com.casic.dcms.mvp.view.IChangePasswordView; +import com.casic.dcms.utils.RSAUtils; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.TokenHelper; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.security.PublicKey; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:20 + * @email : 290677893@qq.com + **/ +public class ChangePasswordActivity extends BaseActivity implements View.OnClickListener, IChangePasswordView { + + private static final String TAG = "ChangePasswordActivity"; + @BindView(R.id.passwordTopLayout) + QMUITopBarLayout passwordTopLayout; + @BindView(R.id.originalEditView) + EditText originalEditView; + @BindView(R.id.newEditView) + EditText newEditView; + @BindView(R.id.confirmEditView) + EditText confirmEditView; + @BindView(R.id.changePasswordButton) + QMUIRoundButton changePasswordButton; + private ChangePasswordPresenterImpl changePasswordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_password; + } + + @Override + protected void setupTopBarLayout() { + passwordTopLayout.setTitle("修改密码").setTextColor(ContextCompat.getColor(this, R.color.white)); + passwordTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + passwordTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + changePasswordPresenter = new ChangePasswordPresenterImpl(this); + } + + @Override + public void initEvent() { + changePasswordButton.setChangeAlphaWhenPress(true); + } + + @OnClick(R.id.changePasswordButton) + @Override + public void onClick(View v) { + String oldPassword = originalEditView.getText().toString(); + if (TextUtils.isEmpty(oldPassword)) { + ToastHelper.showToast("请先输入原密码", ToastHelper.WARING); + return; + } + String newPassword = newEditView.getText().toString(); + if (TextUtils.isEmpty(newPassword)) { + ToastHelper.showToast("请先输入新密码", ToastHelper.WARING); + return; + } + String confirmPassword = confirmEditView.getText().toString(); + if (TextUtils.isEmpty(confirmPassword)) { + ToastHelper.showToast("请再次输入新密码", ToastHelper.WARING); + return; + } + if (!newPassword.equals(confirmPassword)) { + ToastHelper.showToast("新密码和确认密码输入不一致,请重新输入", ToastHelper.WARING); + return; + } + if (newPassword.length() < 6 || newPassword.length() > 12) { + ToastHelper.showToast("新密码长度不正确,请重新输入", ToastHelper.WARING); + return; + } + if (!StringHelper.isLetterAndDigit(newPassword)) { + ToastHelper.showToast("新密码请输入6-12位的数字字母组合", ToastHelper.WARING); + return; + } + //数据校验OK,可以修改密码 + PublicKey publicKey = RSAUtils.keyStrToPublicKey(TokenHelper.getPublicKey()); + String oldPassKey = RSAUtils.encryptDataByPublicKey(oldPassword.getBytes(), publicKey); + String newPassKey = RSAUtils.encryptDataByPublicKey(newPassword.getBytes(), publicKey); + +// ChangeNewPasswordBean passwordBean = new ChangeNewPasswordBean(); +// passwordBean.setOldPwd(oldPassKey.replace("=\n", "=")); +// passwordBean.setNewPwd(newPassKey.replace("=\n", "=")); + changePasswordPresenter.onReadyRetrofitRequest(oldPassKey, newPassKey); + } + + @Override + public void obtainChangePassResult(ChangePasswordResultBean resultBean) { + Log.d(TAG, "obtainChangePassResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + ToastHelper.showToast("密码修改成功", ToastHelper.WARING); + finish(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java new file mode 100644 index 0000000..058f5d2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HelpfulActivity.java @@ -0,0 +1,49 @@ +package com.casic.dcms.ui; + +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 13:05 + * @email : 290677893@qq.com + **/ +public class HelpfulActivity extends BaseActivity { + + @BindView(R.id.helpTopLayout) + QMUITopBarLayout helpTopLayout; + + @Override + public int initLayoutView() { + return R.layout.activity_help; + } + + @Override + protected void setupTopBarLayout() { + helpTopLayout.setTitle("帮助中心").setTextColor(ContextCompat.getColor(this, R.color.white)); + helpTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + helpTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index 979deff..5535f61 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -66,8 +66,8 @@ @Override public void initData() { - String userName = (String) SaveKeyValues.getValue("userName", ""); - String userPassword = (String) SaveKeyValues.getValue("userPassword", ""); + String userName = (String) SaveKeyValues.getValue("name", ""); + String userPassword = (String) SaveKeyValues.getValue("password", ""); userNameView.setText(userName); userPasswordView.setText(userPassword); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(userPassword)) { @@ -149,12 +149,15 @@ @Override public void authenticateResult(PublicKeyBean result) { if (result.isSuccess()) { - PublicKey publicKey = RSAUtils.keyStrToPublicKey(result.getData().getPublicKey()); + String keyString = result.getData().getPublicKey(); + TokenHelper.savePublicKey(keyString); + + PublicKey publicKey = RSAUtils.keyStrToPublicKey(keyString); String userName = userNameView.getText().toString(); String userPassword = userPasswordView.getText().toString(); if (rememberPasswordView.isChecked()) { - SaveKeyValues.putValue("userName", userName); - SaveKeyValues.putValue("userPassword", userPassword); + SaveKeyValues.putValue("name", userName); + SaveKeyValues.putValue("password", userPassword); } if (autoLoginView.isChecked()) { SaveKeyValues.putValue("autoLogin", true); diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 82eb21e..4351cb6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -1,8 +1,12 @@ package com.casic.dcms.ui; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; @@ -13,7 +17,10 @@ import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; import java.util.ArrayList; import java.util.List; @@ -22,12 +29,16 @@ public class MainActivity extends DoubleClickExitActivity { + @BindView(R.id.mainTopLayout) + QMUITopBarLayout mainTopLayout; @BindView(R.id.mainViewPager) ViewPager mainViewPager; @BindView(R.id.bottomNavigation) BottomNavigationView bottomNavigation; + private Context context = this; private MenuItem menuItem; private List pageList; + private BroadcastManager broadcastManager; @Override public int initLayoutView() { @@ -36,7 +47,8 @@ @Override protected void setupTopBarLayout() { - //TODO 此页面无需实现 + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); + mainTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); } @Override @@ -46,6 +58,20 @@ pageList.add(new PhonePageFragment()); pageList.add(new DashBoardPageFragment()); pageList.add(new MinePageFragment()); + broadcastManager = BroadcastManager.getInstance(this); + broadcastManager.addAction(Constant.LOGIN_OUT_ACTION, new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action != null) { + String data = intent.getStringExtra("data"); + assert data != null; + if (data.equals("请求成功")) { + finish(); + } + } + } + }); } @Override @@ -56,15 +82,19 @@ switch (item.getItemId()) { case R.id.navigation_home: mainViewPager.setCurrentItem(0); + mainTopLayout.setTitle("首页").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_phone: mainViewPager.setCurrentItem(1); + mainTopLayout.setTitle("通讯录").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_dashboard: mainViewPager.setCurrentItem(2); + mainTopLayout.setTitle("消息").setTextColor(ContextCompat.getColor(context, R.color.white)); break; case R.id.navigation_mine: mainViewPager.setCurrentItem(3); + mainTopLayout.setTitle("我的").setTextColor(ContextCompat.getColor(context, R.color.white)); break; default: break; @@ -97,4 +127,10 @@ MainPageAdapter mainPageAdapter = new MainPageAdapter(getSupportFragmentManager(), pageList); mainViewPager.setAdapter(mainPageAdapter); } + + @Override + protected void onDestroy() { + broadcastManager.destroy(Constant.LOGIN_OUT_ACTION); + super.onDestroy(); + } } diff --git a/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java new file mode 100644 index 0000000..07fdd6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UserInfoActivity.java @@ -0,0 +1,59 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.StringHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/14 15:22 + * @email : 290677893@qq.com + **/ +public class UserInfoActivity extends BaseActivity { + + @BindView(R.id.userTopLayout) + QMUITopBarLayout userTopLayout; + @BindView(R.id.userNameView) + TextView userNameView; + @BindView(R.id.userPhoneView) + TextView userPhoneView; + @BindView(R.id.userDeptView) + TextView userDeptView; + + @Override + public int initLayoutView() { + return R.layout.activity_user; + } + + @Override + protected void setupTopBarLayout() { + userTopLayout.setTitle("个人资料").setTextColor(ContextCompat.getColor(this, R.color.white)); + userTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + userTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userNameView.setText(StringHelper.getUserName()); + userPhoneView.setText(StringHelper.getUserPhone()); + userDeptView.setText(StringHelper.getUserDept()); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index a1e68ba..ed8bf57 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 4922b08..e467298 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,9 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.widget.TextView; -import android.widget.Toast; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -19,7 +17,7 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseUploadActivity; -import com.casic.dcms.utils.TokenHelper; +import com.casic.dcms.utils.StringHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -49,15 +47,13 @@ } @Override - protected void initData() { + protected void setupTopBarLayout() { context = getContext(); - userDataPresenter = new UserDataPresenterImpl(this); + } - String token = TokenHelper.getToken(); - if (TextUtils.isEmpty(token)) { - Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show(); - return; - } + @Override + protected void initData() { + userDataPresenter = new UserDataPresenterImpl(this); userDataPresenter.onReadyRetrofitRequest(); } @@ -86,6 +82,7 @@ break; case 4: + break; case 5: break; @@ -114,16 +111,6 @@ }); } - @Override - public void showProgress() { - - } - - @Override - public void hideProgress() { - - } - @SuppressLint("SetTextI18n") @Override public void obtainUserData(UserBean userBean) { @@ -135,8 +122,10 @@ UserBean.DataBean data = userBean.getData(); userNameView.setText(data.getName()); userDeptView.setText(data.getDeptName() + data.getRoleNames()); - } else { - Toast.makeText(context, "", Toast.LENGTH_SHORT).show(); + + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index f698e72..8dd20ef 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -1,21 +1,98 @@ package com.casic.dcms.ui.fragment; +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.BuildConfig; import com.casic.dcms.R; import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.LoginOutResultBean; +import com.casic.dcms.mvp.presenter.LoginOutPresenterImpl; +import com.casic.dcms.mvp.view.ILoginOutView; +import com.casic.dcms.ui.ChangePasswordActivity; +import com.casic.dcms.ui.HelpfulActivity; +import com.casic.dcms.ui.UserInfoActivity; +import com.casic.dcms.utils.BroadcastManager; +import com.casic.dcms.utils.Constant; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; -public class MinePageFragment extends BaseFragment { +import butterknife.BindView; +import butterknife.OnClick; + +public class MinePageFragment extends BaseFragment implements View.OnClickListener, ILoginOutView { + + private static final String TAG = "MinePageFragment"; + + @BindView(R.id.versionCodeView) + TextView versionCodeView; + @BindView(R.id.loginOutButton) + QMUIRoundButton loginOutButton; + + private Context context; + private LoginOutPresenterImpl loginOutPresenter; + @Override protected int initLayoutView() { return R.layout.fragment_mine; } @Override - protected void initData() { + protected void setupTopBarLayout() { + context = getContext(); + } + @Override + protected void initData() { + versionCodeView.setText(BuildConfig.VERSION_NAME); + loginOutPresenter = new LoginOutPresenterImpl(this); } @Override protected void initEvent() { + loginOutButton.setChangeAlphaWhenPress(true); + } + @OnClick({R.id.userNameLayout, R.id.passwordLayout, R.id.helpfulLayout, R.id.loginOutButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.userNameLayout: + startActivity(new Intent(context, UserInfoActivity.class)); + break; + case R.id.passwordLayout: + startActivity(new Intent(context, ChangePasswordActivity.class)); + break; + case R.id.helpfulLayout: + startActivity(new Intent(context, HelpfulActivity.class)); + break; + case R.id.loginOutButton: + //退出登录对话框 + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + loginOutPresenter.onReadyRetrofitRequest(); + } + }).create().show(); + break; + default: + break; + } + } + + @Override + public void obtainLoginOutResult(LoginOutResultBean resultBean) { +// Log.d(TAG, "obtainLoginOutResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + BroadcastManager.getInstance(context).sendBroadcast(Constant.LOGIN_OUT_ACTION, resultBean.getMessage()); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java index f07526a..516830f 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PhonePageFragment.java @@ -10,6 +10,11 @@ } @Override + protected void setupTopBarLayout() { + + } + + @Override protected void initData() { } diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java new file mode 100644 index 0000000..1b2bb6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java @@ -0,0 +1,107 @@ +package com.casic.dcms.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author : Pengxh + * @time : 2021/4/14 10:55 + * @email : 290677893@qq.com + **/ +public class BroadcastManager { + private static final String TAG = "BroadcastManager"; + private Context mContext; + private static BroadcastManager broadcastManager; + private Map receiverMap; + + private BroadcastManager(Context context) { + this.mContext = context; + receiverMap = new HashMap<>(); + } + + /** + * 双重锁单例 + */ + public static BroadcastManager getInstance(Context context) { + if (broadcastManager == null) { + synchronized (BroadcastManager.class) { + if (broadcastManager == null) { + broadcastManager = new BroadcastManager(context); + } + } + } + return broadcastManager; + } + + /** + * 添加单个Action,广播的初始化 + */ + public void addAction(String action, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + filter.addAction(action); + mContext.registerReceiver(receiver, filter); + receiverMap.put(action, receiver); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 添加多个Action,广播的初始化 + */ + public void addAction(String[] actions, BroadcastReceiver receiver) { + try { + IntentFilter filter = new IntentFilter(); + for (String action : actions) { + filter.addAction(action); + receiverMap.put(action, receiver); + } + mContext.registerReceiver(receiver, filter); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 发送广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + public void sendBroadcast(String action, String msg) { + try { + Intent intent = new Intent(); + intent.setAction(action); + intent.putExtra("data", msg); + mContext.sendBroadcast(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + public void destroy(String... actions) { + try { + if (receiverMap != null) { + for (String action : actions) { + BroadcastReceiver receiver = receiverMap.get(action); + if (receiver != null) { + mContext.unregisterReceiver(receiver); + } + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8c90ccd..e346e1d 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -33,4 +33,6 @@ public static final int PERMISSIONS_CODE = 999; public static final String IP_KEY = "BASE_IP"; + + public static final String LOGIN_OUT_ACTION = "loginOut"; } diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 1781080..c5e0e37 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -2,4 +2,40 @@ public class StringHelper { + public static void saveUserName(String name) { + SaveKeyValues.putValue("userName", name); + } + + public static String getUserName() { + return (String) SaveKeyValues.getValue("userName", ""); + } + + public static void saveUserPhone(String phone) { + SaveKeyValues.putValue("userPhone", phone); + } + + public static String getUserPhone() { + return (String) SaveKeyValues.getValue("userPhone", ""); + } + + public static void saveUserDept(String dept) { + SaveKeyValues.putValue("userDept", dept); + } + + public static String getUserDept() { + return (String) SaveKeyValues.getValue("userDept", ""); + } + + public static boolean isLetterAndDigit(String str) { + boolean isDigit = false; + boolean isLetter = false; + for (int i = 0; i < str.length(); i++) { + if (Character.isDigit(str.charAt(i))) { + isDigit = true; + } else if (Character.isLetter(str.charAt(i))) { + isLetter = true; + } + } + return isDigit && isLetter; + } } diff --git a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java index a02a103..0e63632 100644 --- a/app/src/main/java/com/casic/dcms/utils/TokenHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/TokenHelper.java @@ -2,6 +2,14 @@ public class TokenHelper { + public static void savePublicKey(String key) { + SaveKeyValues.putValue("keyString", key); + } + + public static String getPublicKey() { + return (String) SaveKeyValues.getValue("keyString", ""); + } + public static void saveToken(String token) { SaveKeyValues.putValue("token", token); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index d5dd48a..26c505c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -2,6 +2,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -62,4 +64,20 @@ @POST("/case/add") Observable submit(@Header("token") String token, @Body SubmitInfoBean infoBean); + + /** + * 退出登录 + */ + @GET("/user/logout") + Observable loginOut(@Header("token") String token); + + /** + * 修改密码 + * 如果有转义字符串,需要用FormUrlEncoded + */ + @FormUrlEncoded + @POST("/mgr/changePwd") + Observable changePassword(@Header("token") String token, + @Field("oldPwd") String oldPwd, + @Field("newPwd") String newPwd); } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index b557907..1477a0c 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -4,6 +4,8 @@ import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; +import com.casic.dcms.bean.ChangePasswordResultBean; +import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PublicKeyBean; import com.casic.dcms.bean.SubmitInfoBean; @@ -107,4 +109,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.submit(TokenHelper.getToken(), infoBean); } + + /** + * 退出登录 + */ + public static Observable getLoginOutResult() { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.loginOut(TokenHelper.getToken()); + } + + /** + * 修改密码 + */ + public static Observable getChangePasswordResult(String oldPwd, String newPwd) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.changePassword(TokenHelper.getToken(), oldPwd, newPwd); + } } diff --git a/app/src/main/res/drawable/bg_editor.xml b/app/src/main/res/drawable/bg_editor.xml new file mode 100644 index 0000000..949d474 --- /dev/null +++ b/app/src/main/res/drawable/bg_editor.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_white.xml b/app/src/main/res/drawable/ic_left_white.xml new file mode 100644 index 0000000..5487d77 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_white.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_right_80.xml b/app/src/main/res/drawable/ic_right_80.xml new file mode 100644 index 0000000..79d695f --- /dev/null +++ b/app/src/main/res/drawable/ic_right_80.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_update.xml b/app/src/main/res/drawable/ic_update.xml new file mode 100644 index 0000000..5b8e458 --- /dev/null +++ b/app/src/main/res/drawable/ic_update.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/layout/activity_big_pic.xml b/app/src/main/res/layout/activity_big_pic.xml new file mode 100644 index 0000000..551ed62 --- /dev/null +++ b/app/src/main/res/layout/activity_big_pic.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_help.xml b/app/src/main/res/layout/activity_help.xml new file mode 100644 index 0000000..f6ef5eb --- /dev/null +++ b/app/src/main/res/layout/activity_help.xml @@ -0,0 +1,28 @@ + + + + + + + + + + \ 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 866df49..a567af8 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,11 +1,15 @@ + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user.xml b/app/src/main/res/layout/activity_user.xml new file mode 100644 index 0000000..5fb2176 --- /dev/null +++ b/app/src/main/res/layout/activity_user.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 5b20e2d..18ec11b 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -9,14 +9,14 @@ android:layout_width="match_parent" android:layout_height="260dp" android:background="@color/mainThemeColor" - android:gravity="center" android:orientation="vertical"> @@ -25,7 +25,8 @@ android:id="@+id/userNameView" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginVertical="10dp" + android:layout_gravity="center_horizontal" + android:layout_marginVertical="5dp" android:textColor="@color/white" android:textSize="20sp" /> @@ -33,14 +34,15 @@ android:id="@+id/userDeptView" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" android:textColor="@color/userJobTextColor" /> diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index 608b04e..b4c4ff3 100644 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -1,7 +1,131 @@ - + android:background="@color/white"> - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e4f6d1b..04296eb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,6 +1,22 @@ 移动城管 - + + 1.城管通程序安装完成后,在设置-省电管理-省电模式 选择"性能模式"。\n + 2.点击设置-省电管理-耗电详情-受保护应用,选择“移动城管”应用为开启状态(受保护状态)。\n + 3.根据一般情况要求,案卷录入中需要上传两张图片。一张为近景图片,要求拍摄清楚所发生案卷的细节信息,另一张为远景图片,要求在图片中包含案卷状况以及周边环境,便于显示该案卷的位置信息。\n + 4.根据一般情况要求,案卷核查过程中需要上传两张图片。图片要求与案卷录入要求一致。\n + 5.手机照相中保存路径默认为手机本机存储,具体路径为:文件管理-图片。\n + 6.图片上载通过无线网络传输,受制于网络连接速度,上传需要一段时间,期间请耐心等待。\n + 7.在允许条件下,录音时间尽量缩短,这是由于录音文件数据量一般较大,鉴于无线网络传输速度的局限性,可能导致上传时间过长或网络异常,从而影响其他操作。\n + 8.由于无线网络传输速度因素,在地图模块中的浏览、放大、缩小、取点等操作,需要短暂的响应时间,期间请耐心等待。\n + 9.部件案卷录入过程中,在进行地图点选部件点时,由于部分部件点之间的距离很短,为了避免选错部件点或选中多个部件点,请适当的放大地图到部件点可区分的状态。\n + 10.地图操作说明:\n + (I)放大:点击放大按钮,地图响应放大操作;\n + (II)缩小:点击缩小按钮,地图响应缩小操作;\n + (III)平移:在地图上滑动,地图按照您滑动的方向平移;\n + (IV)我的位置:如果能获取到当前手机位置,地图将定位至当前用户所在位置;\n + (V)取事部件点:通过地图取点打开的地图窗口,直接在地图上单击,即可完成取事件点或部件点的操作,获取网格、坐标等信息。 + pk.eyJ1IjoiMTgzMTA1ODE5MTYiLCJhIjoiY2tuN2hna2hhMG9hYzJ1bTFzamY0dXhsaCJ9.yWjMxHEHvXFe8c0AWT1bTQ AAPK068bca9a1246485881b11f568444dc8ajG37wO52bDOv5NZgrAiOZstaEdqvG0bjKEZJX9gXgvR5Jq56g56eyswsu5ziFquD