diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d3d6972 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d3d6972 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java new file mode 100644 index 0000000..eb7fac5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java @@ -0,0 +1,53 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +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 CleanToiletModelImpl implements ICleanToiletModel { + + private OnGetCleanResultListener listener; + + public CleanToiletModelImpl(OnGetCleanResultListener cleanResultListener) { + this.listener = cleanResultListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetCleanResultListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + Observable observable = RetrofitServiceManager.getCleanToiletResult(toiletId, userId, lng, lat, cleanTime, photo, workContent); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d3d6972 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java new file mode 100644 index 0000000..eb7fac5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java @@ -0,0 +1,53 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +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 CleanToiletModelImpl implements ICleanToiletModel { + + private OnGetCleanResultListener listener; + + public CleanToiletModelImpl(OnGetCleanResultListener cleanResultListener) { + this.listener = cleanResultListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetCleanResultListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + Observable observable = RetrofitServiceManager.getCleanToiletResult(toiletId, userId, lng, lat, cleanTime, photo, workContent); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java new file mode 100644 index 0000000..88bdd50 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanToiletModel { + Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); +} diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d3d6972 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java new file mode 100644 index 0000000..eb7fac5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java @@ -0,0 +1,53 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +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 CleanToiletModelImpl implements ICleanToiletModel { + + private OnGetCleanResultListener listener; + + public CleanToiletModelImpl(OnGetCleanResultListener cleanResultListener) { + this.listener = cleanResultListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetCleanResultListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + Observable observable = RetrofitServiceManager.getCleanToiletResult(toiletId, userId, lng, lat, cleanTime, photo, workContent); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java new file mode 100644 index 0000000..88bdd50 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanToiletModel { + Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java new file mode 100644 index 0000000..c59b5ca --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanToiletModelImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; + +public class CleanToiletPresenterImpl extends BasePresenter implements ICleanToiletPresenter, CleanToiletModelImpl.OnGetCleanResultListener { + + private IPublicToiletView view; + private CleanToiletModelImpl actionModel; + + public CleanToiletPresenterImpl(IPublicToiletView toiletView) { + this.view = toiletView; + actionModel = new CleanToiletModelImpl(this); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.obtainCleanResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + addSubscription(actionModel.sendRetrofitRequest(toiletId, userId, lng, lat, cleanTime, photo, workContent)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d3d6972 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java new file mode 100644 index 0000000..eb7fac5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java @@ -0,0 +1,53 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +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 CleanToiletModelImpl implements ICleanToiletModel { + + private OnGetCleanResultListener listener; + + public CleanToiletModelImpl(OnGetCleanResultListener cleanResultListener) { + this.listener = cleanResultListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetCleanResultListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + Observable observable = RetrofitServiceManager.getCleanToiletResult(toiletId, userId, lng, lat, cleanTime, photo, workContent); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java new file mode 100644 index 0000000..88bdd50 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanToiletModel { + Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java new file mode 100644 index 0000000..c59b5ca --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanToiletModelImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; + +public class CleanToiletPresenterImpl extends BasePresenter implements ICleanToiletPresenter, CleanToiletModelImpl.OnGetCleanResultListener { + + private IPublicToiletView view; + private CleanToiletModelImpl actionModel; + + public CleanToiletPresenterImpl(IPublicToiletView toiletView) { + this.view = toiletView; + actionModel = new CleanToiletModelImpl(this); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.obtainCleanResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + addSubscription(actionModel.sendRetrofitRequest(toiletId, userId, lng, lat, cleanTime, photo, workContent)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java new file mode 100644 index 0000000..0b38424 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanToiletPresenter { + void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); + + void disposeRetrofitRequest(); +} diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d3d6972 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java new file mode 100644 index 0000000..eb7fac5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java @@ -0,0 +1,53 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +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 CleanToiletModelImpl implements ICleanToiletModel { + + private OnGetCleanResultListener listener; + + public CleanToiletModelImpl(OnGetCleanResultListener cleanResultListener) { + this.listener = cleanResultListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetCleanResultListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + Observable observable = RetrofitServiceManager.getCleanToiletResult(toiletId, userId, lng, lat, cleanTime, photo, workContent); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java new file mode 100644 index 0000000..88bdd50 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanToiletModel { + Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java new file mode 100644 index 0000000..c59b5ca --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanToiletModelImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; + +public class CleanToiletPresenterImpl extends BasePresenter implements ICleanToiletPresenter, CleanToiletModelImpl.OnGetCleanResultListener { + + private IPublicToiletView view; + private CleanToiletModelImpl actionModel; + + public CleanToiletPresenterImpl(IPublicToiletView toiletView) { + this.view = toiletView; + actionModel = new CleanToiletModelImpl(this); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.obtainCleanResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + addSubscription(actionModel.sendRetrofitRequest(toiletId, userId, lng, lat, cleanTime, photo, workContent)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java new file mode 100644 index 0000000..0b38424 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanToiletPresenter { + void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java new file mode 100644 index 0000000..0272202 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface IPublicToiletView { + void obtainCleanResult(ActionResultBean resultBean); +} diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d3d6972 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java new file mode 100644 index 0000000..eb7fac5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java @@ -0,0 +1,53 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +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 CleanToiletModelImpl implements ICleanToiletModel { + + private OnGetCleanResultListener listener; + + public CleanToiletModelImpl(OnGetCleanResultListener cleanResultListener) { + this.listener = cleanResultListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetCleanResultListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + Observable observable = RetrofitServiceManager.getCleanToiletResult(toiletId, userId, lng, lat, cleanTime, photo, workContent); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java new file mode 100644 index 0000000..88bdd50 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanToiletModel { + Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java new file mode 100644 index 0000000..c59b5ca --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanToiletModelImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; + +public class CleanToiletPresenterImpl extends BasePresenter implements ICleanToiletPresenter, CleanToiletModelImpl.OnGetCleanResultListener { + + private IPublicToiletView view; + private CleanToiletModelImpl actionModel; + + public CleanToiletPresenterImpl(IPublicToiletView toiletView) { + this.view = toiletView; + actionModel = new CleanToiletModelImpl(this); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.obtainCleanResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + addSubscription(actionModel.sendRetrofitRequest(toiletId, userId, lng, lat, cleanTime, photo, workContent)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java new file mode 100644 index 0000000..0b38424 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanToiletPresenter { + void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java new file mode 100644 index 0000000..0272202 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface IPublicToiletView { + void obtainCleanResult(ActionResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java index 52c10a5..a7ff4f7 100644 --- a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -42,7 +42,7 @@ MainActivity.sendMessage(message); } } - }); + }, false); } @Override diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d3d6972 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java new file mode 100644 index 0000000..eb7fac5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java @@ -0,0 +1,53 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +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 CleanToiletModelImpl implements ICleanToiletModel { + + private OnGetCleanResultListener listener; + + public CleanToiletModelImpl(OnGetCleanResultListener cleanResultListener) { + this.listener = cleanResultListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetCleanResultListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + Observable observable = RetrofitServiceManager.getCleanToiletResult(toiletId, userId, lng, lat, cleanTime, photo, workContent); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java new file mode 100644 index 0000000..88bdd50 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanToiletModel { + Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java new file mode 100644 index 0000000..c59b5ca --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanToiletModelImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; + +public class CleanToiletPresenterImpl extends BasePresenter implements ICleanToiletPresenter, CleanToiletModelImpl.OnGetCleanResultListener { + + private IPublicToiletView view; + private CleanToiletModelImpl actionModel; + + public CleanToiletPresenterImpl(IPublicToiletView toiletView) { + this.view = toiletView; + actionModel = new CleanToiletModelImpl(this); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.obtainCleanResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + addSubscription(actionModel.sendRetrofitRequest(toiletId, userId, lng, lat, cleanTime, photo, workContent)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java new file mode 100644 index 0000000..0b38424 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanToiletPresenter { + void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java new file mode 100644 index 0000000..0272202 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface IPublicToiletView { + void obtainCleanResult(ActionResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java index 52c10a5..a7ff4f7 100644 --- a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -42,7 +42,7 @@ MainActivity.sendMessage(message); } } - }); + }, false); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 4f06f45..552cb77 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -392,7 +392,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d3d6972 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java new file mode 100644 index 0000000..eb7fac5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java @@ -0,0 +1,53 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +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 CleanToiletModelImpl implements ICleanToiletModel { + + private OnGetCleanResultListener listener; + + public CleanToiletModelImpl(OnGetCleanResultListener cleanResultListener) { + this.listener = cleanResultListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetCleanResultListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + Observable observable = RetrofitServiceManager.getCleanToiletResult(toiletId, userId, lng, lat, cleanTime, photo, workContent); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java new file mode 100644 index 0000000..88bdd50 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanToiletModel { + Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java new file mode 100644 index 0000000..c59b5ca --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanToiletModelImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; + +public class CleanToiletPresenterImpl extends BasePresenter implements ICleanToiletPresenter, CleanToiletModelImpl.OnGetCleanResultListener { + + private IPublicToiletView view; + private CleanToiletModelImpl actionModel; + + public CleanToiletPresenterImpl(IPublicToiletView toiletView) { + this.view = toiletView; + actionModel = new CleanToiletModelImpl(this); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.obtainCleanResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + addSubscription(actionModel.sendRetrofitRequest(toiletId, userId, lng, lat, cleanTime, photo, workContent)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java new file mode 100644 index 0000000..0b38424 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanToiletPresenter { + void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java new file mode 100644 index 0000000..0272202 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface IPublicToiletView { + void obtainCleanResult(ActionResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java index 52c10a5..a7ff4f7 100644 --- a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -42,7 +42,7 @@ MainActivity.sendMessage(message); } } - }); + }, false); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 4f06f45..552cb77 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -392,7 +392,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index f9cd111..0cd126c 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -149,7 +149,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d3d6972 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java new file mode 100644 index 0000000..eb7fac5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java @@ -0,0 +1,53 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +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 CleanToiletModelImpl implements ICleanToiletModel { + + private OnGetCleanResultListener listener; + + public CleanToiletModelImpl(OnGetCleanResultListener cleanResultListener) { + this.listener = cleanResultListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetCleanResultListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + Observable observable = RetrofitServiceManager.getCleanToiletResult(toiletId, userId, lng, lat, cleanTime, photo, workContent); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java new file mode 100644 index 0000000..88bdd50 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanToiletModel { + Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java new file mode 100644 index 0000000..c59b5ca --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanToiletModelImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; + +public class CleanToiletPresenterImpl extends BasePresenter implements ICleanToiletPresenter, CleanToiletModelImpl.OnGetCleanResultListener { + + private IPublicToiletView view; + private CleanToiletModelImpl actionModel; + + public CleanToiletPresenterImpl(IPublicToiletView toiletView) { + this.view = toiletView; + actionModel = new CleanToiletModelImpl(this); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.obtainCleanResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + addSubscription(actionModel.sendRetrofitRequest(toiletId, userId, lng, lat, cleanTime, photo, workContent)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java new file mode 100644 index 0000000..0b38424 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanToiletPresenter { + void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java new file mode 100644 index 0000000..0272202 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface IPublicToiletView { + void obtainCleanResult(ActionResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java index 52c10a5..a7ff4f7 100644 --- a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -42,7 +42,7 @@ MainActivity.sendMessage(message); } } - }); + }, false); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 4f06f45..552cb77 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -392,7 +392,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index f9cd111..0cd126c 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -149,7 +149,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index 1064b85..b421b01 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -7,9 +7,11 @@ import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.location.Location; +import android.text.InputType; +import android.text.TextUtils; +import android.util.Log; import android.view.View; import android.widget.ImageView; -import android.widget.TextClock; import android.widget.TextView; import androidx.annotation.Nullable; @@ -20,7 +22,9 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.CleanToiletPresenterImpl; import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; @@ -28,6 +32,7 @@ import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.geometry.Point; @@ -40,15 +45,20 @@ import com.esri.arcgisruntime.mapping.view.MapView; import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; +import java.util.ArrayList; import butterknife.BindView; import butterknife.OnClick; @@ -57,8 +67,10 @@ import cn.bertsir.zbar.QrManager; import cn.bertsir.zbar.view.ScanLineView; -public class PublicToiletActivity extends BaseActivity implements View.OnClickListener, IUploadFileView { +public class PublicToiletActivity extends BaseActivity implements View.OnClickListener, + IUploadFileView, IPublicToiletView { + private static final String TAG = "PublicToiletActivity"; private Context context = this; @BindView(R.id.topLayout) QMUITopBarLayout topLayout; @@ -66,6 +78,8 @@ MapView mapView; @BindView(R.id.locationStreetView) TextView locationStreetView; + @BindView(R.id.workContentView) + TextView workContentView; @BindView(R.id.toiletIdView) TextView toiletIdView; @BindView(R.id.startScanView) @@ -76,12 +90,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; - @BindView(R.id.timeClockView) - TextClock timeClockView; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; - private String imagePath;//服务器返回的拍照数据集 + private String imagePath = "";//服务器返回的拍照数据 + private QMUITipDialog loadingDialog; + private CleanToiletPresenterImpl cleanToiletPresenter; @Override public int initLayoutView() { @@ -102,8 +116,8 @@ @Override public void initData() { - double lng = getIntent().getDoubleExtra("lng", 0); - double lat = getIntent().getDoubleExtra("lat", 0); + double lng = getIntent().getDoubleExtra("lng", Constant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", Constant.DEFAULT_LAT); LocationHelper.obtainCurrentLocation(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -113,10 +127,10 @@ locationStreetView.setText("定位失败"); } } - }); + }, false); mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - mapView.setViewpointScaleAsync(12000); + mapView.setViewpointScaleAsync(18000); ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); //创建底图、并设置底图图层 @@ -125,16 +139,22 @@ arcGISMap.setBasemap(basemap); mapView.setMap(arcGISMap); -// Point point = new Point(lng, lat, mapView.getSpatialReference()); -// mapView.setViewpointCenterAsync(point, 1000);//标注到指定经纬度并放大地图显示 -// //添加图片Marker -// addPictureMarker(point); + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 1000);//标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); uploadImagePresenter = new UploadImagePresenterImpl(this); + cleanToiletPresenter = new CleanToiletPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("提交中,请稍后") .create(); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); } @Override @@ -146,8 +166,8 @@ Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); pictureMarker.loadAsync(); Graphic graphic = new Graphic(point, pictureMarker); @@ -158,52 +178,122 @@ graphicsOverlays.add(mGraphicsOverlay); } - @OnClick({R.id.removeToLocalView, R.id.startScanView, R.id.takePictureView}) + @OnClick({R.id.removeToLocalView, R.id.selectWorkLayout, R.id.startScanView, R.id.takePictureView, R.id.signInButton}) @Override public void onClick(View v) { - if (v.getId() == R.id.removeToLocalView) { - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - if (location != null) { - mapView.setViewpointCenterAsync(new Point(location.getLongitude(), location.getLatitude())); + switch (v.getId()) { + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + mapView.setViewpointCenterAsync(new Point(location.getLongitude(), location.getLatitude())); + loadingDialog.dismiss(); + } } - } - }); - } else if (v.getId() == R.id.startScanView) { - QrConfig qrConfig = new QrConfig.Builder().setTitleText("扫一扫") //设置Title文字 - .setShowLight(true) //显示手电筒按钮 - .setShowTitle(true) //显示Title - .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 - .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 - .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 - .setDesText(null) //扫描框下文字 - .setShowDes(true) //是否显示扫描框下面文字 - .setPlaySound(true) //是否扫描成功后bi~的声音 - .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) - .setTitleTextColor(Color.WHITE) //设置Title文字颜色 - .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 - .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 - .setShowVibrator(true) //是否震动提醒 - .create(); - QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { - @Override - public void onScanSuccess(ScanResult result) { - toiletIdView.setText(result.content); - } - }); - } else if (v.getId() == R.id.takePictureView) { - PictureSelector.create(this) - .openCamera(PictureMimeType.ofImage()) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) - .forResult(PictureConfig.REQUEST_CAMERA); + }, true); + break; + case R.id.selectWorkLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("请填写您此次工作的内容") + .addItem("日常保洁") + .addItem("自定义") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + showEditDialog(tag); + } + }).build().show(); + break; + case R.id.startScanView: + QrConfig qrConfig = new QrConfig.Builder().setTitleText("扫一扫") //设置Title文字 + .setShowLight(true) //显示手电筒按钮 + .setShowTitle(true) //显示Title + .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 + .setShowAlbum(false) //显示从相册选择按钮 + .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 + .setDesText(null) //扫描框下文字 + .setShowDes(true) //是否显示扫描框下面文字 + .setPlaySound(true) //是否扫描成功后bi~的声音 + .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) + .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleTextColor(Color.WHITE) //设置Title文字颜色 + .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 + .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 + .setShowVibrator(true) //是否震动提醒 + .create(); + QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { + @Override + public void onScanSuccess(ScanResult result) { + toiletIdView.setText(result.content); + } + }); + break; + case R.id.takePictureView: + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + break; + case R.id.signInButton: + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + String toiletId = toiletIdView.getText().toString(); + if (TextUtils.isEmpty(toiletId)) { + ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); + return; + } + + double longitude = location.getLongitude(); + double latitude = location.getLatitude(); + + String cleanTime = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), + String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + StringHelper.filterString(workContentView.getText().toString())); + } else { + ToastHelper.showToast("定位失败,无法签到", ToastHelper.WARING); + } + } + }, true); + break; + } + } + + private void showEditDialog(String tag) { + if (tag.equals("自定义")) { + QMUIDialog.EditTextDialogBuilder builder = new QMUIDialog.EditTextDialogBuilder(context); + builder.setTitle("自定义工作内容") + .setPlaceholder("请输入您此次的工作内容") + .setInputType(InputType.TYPE_CLASS_TEXT) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + String inputStr = builder.getEditText().getText().toString(); + if (!TextUtils.isEmpty(inputStr)) { + workContentView.setText(inputStr); + dialog.dismiss(); + } else { + ToastHelper.showToast("自定义工作内容不能为空", ToastHelper.WARING); + } + } + }); + builder.create().show(); + } else { + workContentView.setText(tag); } } @@ -245,14 +335,18 @@ this.imagePath = url; String realPath = StringHelper.appendCompleteURL(url); - Glide.with(context) - .load(realPath) - .apply(new RequestOptions().error(R.drawable.ic_load_error)) - .into(pictureView); + ArrayList urls = new ArrayList<>(); + urls.add(realPath); + + Glide.with(context).load(realPath) + .apply(new RequestOptions().error(R.drawable.ic_load_error)).into(pictureView); pictureView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - + Intent intent = new Intent(context, BigImageActivity.class); + intent.putExtra("index", 0); + intent.putStringArrayListExtra("images", urls); + startActivity(intent); } }); } @@ -269,10 +363,18 @@ } @Override + public void obtainCleanResult(ActionResultBean resultBean) { + Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); + } + + @Override protected void onDestroy() { super.onDestroy(); if (uploadImagePresenter != null) { uploadImagePresenter.disposeRetrofitRequest(); } + if (cleanToiletPresenter != null) { + cleanToiletPresenter.disposeRetrofitRequest(); + } } } diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d3d6972 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java new file mode 100644 index 0000000..eb7fac5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java @@ -0,0 +1,53 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +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 CleanToiletModelImpl implements ICleanToiletModel { + + private OnGetCleanResultListener listener; + + public CleanToiletModelImpl(OnGetCleanResultListener cleanResultListener) { + this.listener = cleanResultListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetCleanResultListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + Observable observable = RetrofitServiceManager.getCleanToiletResult(toiletId, userId, lng, lat, cleanTime, photo, workContent); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java new file mode 100644 index 0000000..88bdd50 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanToiletModel { + Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java new file mode 100644 index 0000000..c59b5ca --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanToiletModelImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; + +public class CleanToiletPresenterImpl extends BasePresenter implements ICleanToiletPresenter, CleanToiletModelImpl.OnGetCleanResultListener { + + private IPublicToiletView view; + private CleanToiletModelImpl actionModel; + + public CleanToiletPresenterImpl(IPublicToiletView toiletView) { + this.view = toiletView; + actionModel = new CleanToiletModelImpl(this); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.obtainCleanResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + addSubscription(actionModel.sendRetrofitRequest(toiletId, userId, lng, lat, cleanTime, photo, workContent)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java new file mode 100644 index 0000000..0b38424 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanToiletPresenter { + void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java new file mode 100644 index 0000000..0272202 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface IPublicToiletView { + void obtainCleanResult(ActionResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java index 52c10a5..a7ff4f7 100644 --- a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -42,7 +42,7 @@ MainActivity.sendMessage(message); } } - }); + }, false); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 4f06f45..552cb77 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -392,7 +392,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index f9cd111..0cd126c 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -149,7 +149,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index 1064b85..b421b01 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -7,9 +7,11 @@ import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.location.Location; +import android.text.InputType; +import android.text.TextUtils; +import android.util.Log; import android.view.View; import android.widget.ImageView; -import android.widget.TextClock; import android.widget.TextView; import androidx.annotation.Nullable; @@ -20,7 +22,9 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.CleanToiletPresenterImpl; import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; @@ -28,6 +32,7 @@ import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.geometry.Point; @@ -40,15 +45,20 @@ import com.esri.arcgisruntime.mapping.view.MapView; import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; +import java.util.ArrayList; import butterknife.BindView; import butterknife.OnClick; @@ -57,8 +67,10 @@ import cn.bertsir.zbar.QrManager; import cn.bertsir.zbar.view.ScanLineView; -public class PublicToiletActivity extends BaseActivity implements View.OnClickListener, IUploadFileView { +public class PublicToiletActivity extends BaseActivity implements View.OnClickListener, + IUploadFileView, IPublicToiletView { + private static final String TAG = "PublicToiletActivity"; private Context context = this; @BindView(R.id.topLayout) QMUITopBarLayout topLayout; @@ -66,6 +78,8 @@ MapView mapView; @BindView(R.id.locationStreetView) TextView locationStreetView; + @BindView(R.id.workContentView) + TextView workContentView; @BindView(R.id.toiletIdView) TextView toiletIdView; @BindView(R.id.startScanView) @@ -76,12 +90,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; - @BindView(R.id.timeClockView) - TextClock timeClockView; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; - private String imagePath;//服务器返回的拍照数据集 + private String imagePath = "";//服务器返回的拍照数据 + private QMUITipDialog loadingDialog; + private CleanToiletPresenterImpl cleanToiletPresenter; @Override public int initLayoutView() { @@ -102,8 +116,8 @@ @Override public void initData() { - double lng = getIntent().getDoubleExtra("lng", 0); - double lat = getIntent().getDoubleExtra("lat", 0); + double lng = getIntent().getDoubleExtra("lng", Constant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", Constant.DEFAULT_LAT); LocationHelper.obtainCurrentLocation(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -113,10 +127,10 @@ locationStreetView.setText("定位失败"); } } - }); + }, false); mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - mapView.setViewpointScaleAsync(12000); + mapView.setViewpointScaleAsync(18000); ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); //创建底图、并设置底图图层 @@ -125,16 +139,22 @@ arcGISMap.setBasemap(basemap); mapView.setMap(arcGISMap); -// Point point = new Point(lng, lat, mapView.getSpatialReference()); -// mapView.setViewpointCenterAsync(point, 1000);//标注到指定经纬度并放大地图显示 -// //添加图片Marker -// addPictureMarker(point); + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 1000);//标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); uploadImagePresenter = new UploadImagePresenterImpl(this); + cleanToiletPresenter = new CleanToiletPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("提交中,请稍后") .create(); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); } @Override @@ -146,8 +166,8 @@ Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); pictureMarker.loadAsync(); Graphic graphic = new Graphic(point, pictureMarker); @@ -158,52 +178,122 @@ graphicsOverlays.add(mGraphicsOverlay); } - @OnClick({R.id.removeToLocalView, R.id.startScanView, R.id.takePictureView}) + @OnClick({R.id.removeToLocalView, R.id.selectWorkLayout, R.id.startScanView, R.id.takePictureView, R.id.signInButton}) @Override public void onClick(View v) { - if (v.getId() == R.id.removeToLocalView) { - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - if (location != null) { - mapView.setViewpointCenterAsync(new Point(location.getLongitude(), location.getLatitude())); + switch (v.getId()) { + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + mapView.setViewpointCenterAsync(new Point(location.getLongitude(), location.getLatitude())); + loadingDialog.dismiss(); + } } - } - }); - } else if (v.getId() == R.id.startScanView) { - QrConfig qrConfig = new QrConfig.Builder().setTitleText("扫一扫") //设置Title文字 - .setShowLight(true) //显示手电筒按钮 - .setShowTitle(true) //显示Title - .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 - .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 - .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 - .setDesText(null) //扫描框下文字 - .setShowDes(true) //是否显示扫描框下面文字 - .setPlaySound(true) //是否扫描成功后bi~的声音 - .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) - .setTitleTextColor(Color.WHITE) //设置Title文字颜色 - .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 - .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 - .setShowVibrator(true) //是否震动提醒 - .create(); - QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { - @Override - public void onScanSuccess(ScanResult result) { - toiletIdView.setText(result.content); - } - }); - } else if (v.getId() == R.id.takePictureView) { - PictureSelector.create(this) - .openCamera(PictureMimeType.ofImage()) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) - .forResult(PictureConfig.REQUEST_CAMERA); + }, true); + break; + case R.id.selectWorkLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("请填写您此次工作的内容") + .addItem("日常保洁") + .addItem("自定义") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + showEditDialog(tag); + } + }).build().show(); + break; + case R.id.startScanView: + QrConfig qrConfig = new QrConfig.Builder().setTitleText("扫一扫") //设置Title文字 + .setShowLight(true) //显示手电筒按钮 + .setShowTitle(true) //显示Title + .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 + .setShowAlbum(false) //显示从相册选择按钮 + .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 + .setDesText(null) //扫描框下文字 + .setShowDes(true) //是否显示扫描框下面文字 + .setPlaySound(true) //是否扫描成功后bi~的声音 + .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) + .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleTextColor(Color.WHITE) //设置Title文字颜色 + .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 + .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 + .setShowVibrator(true) //是否震动提醒 + .create(); + QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { + @Override + public void onScanSuccess(ScanResult result) { + toiletIdView.setText(result.content); + } + }); + break; + case R.id.takePictureView: + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + break; + case R.id.signInButton: + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + String toiletId = toiletIdView.getText().toString(); + if (TextUtils.isEmpty(toiletId)) { + ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); + return; + } + + double longitude = location.getLongitude(); + double latitude = location.getLatitude(); + + String cleanTime = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), + String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + StringHelper.filterString(workContentView.getText().toString())); + } else { + ToastHelper.showToast("定位失败,无法签到", ToastHelper.WARING); + } + } + }, true); + break; + } + } + + private void showEditDialog(String tag) { + if (tag.equals("自定义")) { + QMUIDialog.EditTextDialogBuilder builder = new QMUIDialog.EditTextDialogBuilder(context); + builder.setTitle("自定义工作内容") + .setPlaceholder("请输入您此次的工作内容") + .setInputType(InputType.TYPE_CLASS_TEXT) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + String inputStr = builder.getEditText().getText().toString(); + if (!TextUtils.isEmpty(inputStr)) { + workContentView.setText(inputStr); + dialog.dismiss(); + } else { + ToastHelper.showToast("自定义工作内容不能为空", ToastHelper.WARING); + } + } + }); + builder.create().show(); + } else { + workContentView.setText(tag); } } @@ -245,14 +335,18 @@ this.imagePath = url; String realPath = StringHelper.appendCompleteURL(url); - Glide.with(context) - .load(realPath) - .apply(new RequestOptions().error(R.drawable.ic_load_error)) - .into(pictureView); + ArrayList urls = new ArrayList<>(); + urls.add(realPath); + + Glide.with(context).load(realPath) + .apply(new RequestOptions().error(R.drawable.ic_load_error)).into(pictureView); pictureView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - + Intent intent = new Intent(context, BigImageActivity.class); + intent.putExtra("index", 0); + intent.putStringArrayListExtra("images", urls); + startActivity(intent); } }); } @@ -269,10 +363,18 @@ } @Override + public void obtainCleanResult(ActionResultBean resultBean) { + Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); + } + + @Override protected void onDestroy() { super.onDestroy(); if (uploadImagePresenter != null) { uploadImagePresenter.disposeRetrofitRequest(); } + if (cleanToiletPresenter != null) { + cleanToiletPresenter.disposeRetrofitRequest(); + } } } 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 2a855ba..2ae9aa6 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 @@ -96,6 +96,7 @@ StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); StringHelper.saveUserDeptId(data.getDeptId()); + StringHelper.saveUserId(data.getId()); } } diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d3d6972 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java new file mode 100644 index 0000000..eb7fac5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java @@ -0,0 +1,53 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +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 CleanToiletModelImpl implements ICleanToiletModel { + + private OnGetCleanResultListener listener; + + public CleanToiletModelImpl(OnGetCleanResultListener cleanResultListener) { + this.listener = cleanResultListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetCleanResultListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + Observable observable = RetrofitServiceManager.getCleanToiletResult(toiletId, userId, lng, lat, cleanTime, photo, workContent); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java new file mode 100644 index 0000000..88bdd50 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanToiletModel { + Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java new file mode 100644 index 0000000..c59b5ca --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanToiletModelImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; + +public class CleanToiletPresenterImpl extends BasePresenter implements ICleanToiletPresenter, CleanToiletModelImpl.OnGetCleanResultListener { + + private IPublicToiletView view; + private CleanToiletModelImpl actionModel; + + public CleanToiletPresenterImpl(IPublicToiletView toiletView) { + this.view = toiletView; + actionModel = new CleanToiletModelImpl(this); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.obtainCleanResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + addSubscription(actionModel.sendRetrofitRequest(toiletId, userId, lng, lat, cleanTime, photo, workContent)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java new file mode 100644 index 0000000..0b38424 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanToiletPresenter { + void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java new file mode 100644 index 0000000..0272202 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface IPublicToiletView { + void obtainCleanResult(ActionResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java index 52c10a5..a7ff4f7 100644 --- a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -42,7 +42,7 @@ MainActivity.sendMessage(message); } } - }); + }, false); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 4f06f45..552cb77 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -392,7 +392,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index f9cd111..0cd126c 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -149,7 +149,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index 1064b85..b421b01 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -7,9 +7,11 @@ import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.location.Location; +import android.text.InputType; +import android.text.TextUtils; +import android.util.Log; import android.view.View; import android.widget.ImageView; -import android.widget.TextClock; import android.widget.TextView; import androidx.annotation.Nullable; @@ -20,7 +22,9 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.CleanToiletPresenterImpl; import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; @@ -28,6 +32,7 @@ import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.geometry.Point; @@ -40,15 +45,20 @@ import com.esri.arcgisruntime.mapping.view.MapView; import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; +import java.util.ArrayList; import butterknife.BindView; import butterknife.OnClick; @@ -57,8 +67,10 @@ import cn.bertsir.zbar.QrManager; import cn.bertsir.zbar.view.ScanLineView; -public class PublicToiletActivity extends BaseActivity implements View.OnClickListener, IUploadFileView { +public class PublicToiletActivity extends BaseActivity implements View.OnClickListener, + IUploadFileView, IPublicToiletView { + private static final String TAG = "PublicToiletActivity"; private Context context = this; @BindView(R.id.topLayout) QMUITopBarLayout topLayout; @@ -66,6 +78,8 @@ MapView mapView; @BindView(R.id.locationStreetView) TextView locationStreetView; + @BindView(R.id.workContentView) + TextView workContentView; @BindView(R.id.toiletIdView) TextView toiletIdView; @BindView(R.id.startScanView) @@ -76,12 +90,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; - @BindView(R.id.timeClockView) - TextClock timeClockView; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; - private String imagePath;//服务器返回的拍照数据集 + private String imagePath = "";//服务器返回的拍照数据 + private QMUITipDialog loadingDialog; + private CleanToiletPresenterImpl cleanToiletPresenter; @Override public int initLayoutView() { @@ -102,8 +116,8 @@ @Override public void initData() { - double lng = getIntent().getDoubleExtra("lng", 0); - double lat = getIntent().getDoubleExtra("lat", 0); + double lng = getIntent().getDoubleExtra("lng", Constant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", Constant.DEFAULT_LAT); LocationHelper.obtainCurrentLocation(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -113,10 +127,10 @@ locationStreetView.setText("定位失败"); } } - }); + }, false); mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - mapView.setViewpointScaleAsync(12000); + mapView.setViewpointScaleAsync(18000); ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); //创建底图、并设置底图图层 @@ -125,16 +139,22 @@ arcGISMap.setBasemap(basemap); mapView.setMap(arcGISMap); -// Point point = new Point(lng, lat, mapView.getSpatialReference()); -// mapView.setViewpointCenterAsync(point, 1000);//标注到指定经纬度并放大地图显示 -// //添加图片Marker -// addPictureMarker(point); + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 1000);//标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); uploadImagePresenter = new UploadImagePresenterImpl(this); + cleanToiletPresenter = new CleanToiletPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("提交中,请稍后") .create(); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); } @Override @@ -146,8 +166,8 @@ Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); pictureMarker.loadAsync(); Graphic graphic = new Graphic(point, pictureMarker); @@ -158,52 +178,122 @@ graphicsOverlays.add(mGraphicsOverlay); } - @OnClick({R.id.removeToLocalView, R.id.startScanView, R.id.takePictureView}) + @OnClick({R.id.removeToLocalView, R.id.selectWorkLayout, R.id.startScanView, R.id.takePictureView, R.id.signInButton}) @Override public void onClick(View v) { - if (v.getId() == R.id.removeToLocalView) { - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - if (location != null) { - mapView.setViewpointCenterAsync(new Point(location.getLongitude(), location.getLatitude())); + switch (v.getId()) { + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + mapView.setViewpointCenterAsync(new Point(location.getLongitude(), location.getLatitude())); + loadingDialog.dismiss(); + } } - } - }); - } else if (v.getId() == R.id.startScanView) { - QrConfig qrConfig = new QrConfig.Builder().setTitleText("扫一扫") //设置Title文字 - .setShowLight(true) //显示手电筒按钮 - .setShowTitle(true) //显示Title - .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 - .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 - .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 - .setDesText(null) //扫描框下文字 - .setShowDes(true) //是否显示扫描框下面文字 - .setPlaySound(true) //是否扫描成功后bi~的声音 - .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) - .setTitleTextColor(Color.WHITE) //设置Title文字颜色 - .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 - .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 - .setShowVibrator(true) //是否震动提醒 - .create(); - QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { - @Override - public void onScanSuccess(ScanResult result) { - toiletIdView.setText(result.content); - } - }); - } else if (v.getId() == R.id.takePictureView) { - PictureSelector.create(this) - .openCamera(PictureMimeType.ofImage()) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) - .forResult(PictureConfig.REQUEST_CAMERA); + }, true); + break; + case R.id.selectWorkLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("请填写您此次工作的内容") + .addItem("日常保洁") + .addItem("自定义") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + showEditDialog(tag); + } + }).build().show(); + break; + case R.id.startScanView: + QrConfig qrConfig = new QrConfig.Builder().setTitleText("扫一扫") //设置Title文字 + .setShowLight(true) //显示手电筒按钮 + .setShowTitle(true) //显示Title + .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 + .setShowAlbum(false) //显示从相册选择按钮 + .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 + .setDesText(null) //扫描框下文字 + .setShowDes(true) //是否显示扫描框下面文字 + .setPlaySound(true) //是否扫描成功后bi~的声音 + .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) + .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleTextColor(Color.WHITE) //设置Title文字颜色 + .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 + .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 + .setShowVibrator(true) //是否震动提醒 + .create(); + QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { + @Override + public void onScanSuccess(ScanResult result) { + toiletIdView.setText(result.content); + } + }); + break; + case R.id.takePictureView: + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + break; + case R.id.signInButton: + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + String toiletId = toiletIdView.getText().toString(); + if (TextUtils.isEmpty(toiletId)) { + ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); + return; + } + + double longitude = location.getLongitude(); + double latitude = location.getLatitude(); + + String cleanTime = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), + String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + StringHelper.filterString(workContentView.getText().toString())); + } else { + ToastHelper.showToast("定位失败,无法签到", ToastHelper.WARING); + } + } + }, true); + break; + } + } + + private void showEditDialog(String tag) { + if (tag.equals("自定义")) { + QMUIDialog.EditTextDialogBuilder builder = new QMUIDialog.EditTextDialogBuilder(context); + builder.setTitle("自定义工作内容") + .setPlaceholder("请输入您此次的工作内容") + .setInputType(InputType.TYPE_CLASS_TEXT) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + String inputStr = builder.getEditText().getText().toString(); + if (!TextUtils.isEmpty(inputStr)) { + workContentView.setText(inputStr); + dialog.dismiss(); + } else { + ToastHelper.showToast("自定义工作内容不能为空", ToastHelper.WARING); + } + } + }); + builder.create().show(); + } else { + workContentView.setText(tag); } } @@ -245,14 +335,18 @@ this.imagePath = url; String realPath = StringHelper.appendCompleteURL(url); - Glide.with(context) - .load(realPath) - .apply(new RequestOptions().error(R.drawable.ic_load_error)) - .into(pictureView); + ArrayList urls = new ArrayList<>(); + urls.add(realPath); + + Glide.with(context).load(realPath) + .apply(new RequestOptions().error(R.drawable.ic_load_error)).into(pictureView); pictureView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - + Intent intent = new Intent(context, BigImageActivity.class); + intent.putExtra("index", 0); + intent.putStringArrayListExtra("images", urls); + startActivity(intent); } }); } @@ -269,10 +363,18 @@ } @Override + public void obtainCleanResult(ActionResultBean resultBean) { + Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); + } + + @Override protected void onDestroy() { super.onDestroy(); if (uploadImagePresenter != null) { uploadImagePresenter.disposeRetrofitRequest(); } + if (cleanToiletPresenter != null) { + cleanToiletPresenter.disposeRetrofitRequest(); + } } } 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 2a855ba..2ae9aa6 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 @@ -96,6 +96,7 @@ StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); StringHelper.saveUserDeptId(data.getDeptId()); + StringHelper.saveUserId(data.getId()); } } 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 3ee2612..9f864db 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -14,6 +14,8 @@ Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CALL_PHONE, Manifest.permission.READ_PHONE_STATE}; + public static final String[] CASE_PAGE_TITLES = {"待办案卷", "已办案卷"}; + public static final String[] CHART_PAGE_TITLES = {"表格", "饼状图"}; public static final List ANALYSIS_ICONS = Arrays.asList( R.drawable.ic_wtly, R.drawable.ic_ajzt, R.drawable.ic_gfwt, @@ -30,8 +32,6 @@ Color.rgb(216, 248, 183), Color.rgb(129, 178, 20), Color.rgb(120, 104, 230)}; - public static final String[] CASE_PAGE_TITLES = {"待办案卷", "已办案卷"}; - public static final String[] CHART_PAGE_TITLES = {"表格", "饼状图"}; public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d3d6972 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java new file mode 100644 index 0000000..eb7fac5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java @@ -0,0 +1,53 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +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 CleanToiletModelImpl implements ICleanToiletModel { + + private OnGetCleanResultListener listener; + + public CleanToiletModelImpl(OnGetCleanResultListener cleanResultListener) { + this.listener = cleanResultListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetCleanResultListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + Observable observable = RetrofitServiceManager.getCleanToiletResult(toiletId, userId, lng, lat, cleanTime, photo, workContent); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java new file mode 100644 index 0000000..88bdd50 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanToiletModel { + Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java new file mode 100644 index 0000000..c59b5ca --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanToiletModelImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; + +public class CleanToiletPresenterImpl extends BasePresenter implements ICleanToiletPresenter, CleanToiletModelImpl.OnGetCleanResultListener { + + private IPublicToiletView view; + private CleanToiletModelImpl actionModel; + + public CleanToiletPresenterImpl(IPublicToiletView toiletView) { + this.view = toiletView; + actionModel = new CleanToiletModelImpl(this); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.obtainCleanResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + addSubscription(actionModel.sendRetrofitRequest(toiletId, userId, lng, lat, cleanTime, photo, workContent)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java new file mode 100644 index 0000000..0b38424 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanToiletPresenter { + void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java new file mode 100644 index 0000000..0272202 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface IPublicToiletView { + void obtainCleanResult(ActionResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java index 52c10a5..a7ff4f7 100644 --- a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -42,7 +42,7 @@ MainActivity.sendMessage(message); } } - }); + }, false); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 4f06f45..552cb77 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -392,7 +392,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index f9cd111..0cd126c 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -149,7 +149,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index 1064b85..b421b01 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -7,9 +7,11 @@ import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.location.Location; +import android.text.InputType; +import android.text.TextUtils; +import android.util.Log; import android.view.View; import android.widget.ImageView; -import android.widget.TextClock; import android.widget.TextView; import androidx.annotation.Nullable; @@ -20,7 +22,9 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.CleanToiletPresenterImpl; import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; @@ -28,6 +32,7 @@ import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.geometry.Point; @@ -40,15 +45,20 @@ import com.esri.arcgisruntime.mapping.view.MapView; import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; +import java.util.ArrayList; import butterknife.BindView; import butterknife.OnClick; @@ -57,8 +67,10 @@ import cn.bertsir.zbar.QrManager; import cn.bertsir.zbar.view.ScanLineView; -public class PublicToiletActivity extends BaseActivity implements View.OnClickListener, IUploadFileView { +public class PublicToiletActivity extends BaseActivity implements View.OnClickListener, + IUploadFileView, IPublicToiletView { + private static final String TAG = "PublicToiletActivity"; private Context context = this; @BindView(R.id.topLayout) QMUITopBarLayout topLayout; @@ -66,6 +78,8 @@ MapView mapView; @BindView(R.id.locationStreetView) TextView locationStreetView; + @BindView(R.id.workContentView) + TextView workContentView; @BindView(R.id.toiletIdView) TextView toiletIdView; @BindView(R.id.startScanView) @@ -76,12 +90,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; - @BindView(R.id.timeClockView) - TextClock timeClockView; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; - private String imagePath;//服务器返回的拍照数据集 + private String imagePath = "";//服务器返回的拍照数据 + private QMUITipDialog loadingDialog; + private CleanToiletPresenterImpl cleanToiletPresenter; @Override public int initLayoutView() { @@ -102,8 +116,8 @@ @Override public void initData() { - double lng = getIntent().getDoubleExtra("lng", 0); - double lat = getIntent().getDoubleExtra("lat", 0); + double lng = getIntent().getDoubleExtra("lng", Constant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", Constant.DEFAULT_LAT); LocationHelper.obtainCurrentLocation(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -113,10 +127,10 @@ locationStreetView.setText("定位失败"); } } - }); + }, false); mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - mapView.setViewpointScaleAsync(12000); + mapView.setViewpointScaleAsync(18000); ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); //创建底图、并设置底图图层 @@ -125,16 +139,22 @@ arcGISMap.setBasemap(basemap); mapView.setMap(arcGISMap); -// Point point = new Point(lng, lat, mapView.getSpatialReference()); -// mapView.setViewpointCenterAsync(point, 1000);//标注到指定经纬度并放大地图显示 -// //添加图片Marker -// addPictureMarker(point); + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 1000);//标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); uploadImagePresenter = new UploadImagePresenterImpl(this); + cleanToiletPresenter = new CleanToiletPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("提交中,请稍后") .create(); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); } @Override @@ -146,8 +166,8 @@ Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); pictureMarker.loadAsync(); Graphic graphic = new Graphic(point, pictureMarker); @@ -158,52 +178,122 @@ graphicsOverlays.add(mGraphicsOverlay); } - @OnClick({R.id.removeToLocalView, R.id.startScanView, R.id.takePictureView}) + @OnClick({R.id.removeToLocalView, R.id.selectWorkLayout, R.id.startScanView, R.id.takePictureView, R.id.signInButton}) @Override public void onClick(View v) { - if (v.getId() == R.id.removeToLocalView) { - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - if (location != null) { - mapView.setViewpointCenterAsync(new Point(location.getLongitude(), location.getLatitude())); + switch (v.getId()) { + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + mapView.setViewpointCenterAsync(new Point(location.getLongitude(), location.getLatitude())); + loadingDialog.dismiss(); + } } - } - }); - } else if (v.getId() == R.id.startScanView) { - QrConfig qrConfig = new QrConfig.Builder().setTitleText("扫一扫") //设置Title文字 - .setShowLight(true) //显示手电筒按钮 - .setShowTitle(true) //显示Title - .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 - .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 - .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 - .setDesText(null) //扫描框下文字 - .setShowDes(true) //是否显示扫描框下面文字 - .setPlaySound(true) //是否扫描成功后bi~的声音 - .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) - .setTitleTextColor(Color.WHITE) //设置Title文字颜色 - .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 - .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 - .setShowVibrator(true) //是否震动提醒 - .create(); - QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { - @Override - public void onScanSuccess(ScanResult result) { - toiletIdView.setText(result.content); - } - }); - } else if (v.getId() == R.id.takePictureView) { - PictureSelector.create(this) - .openCamera(PictureMimeType.ofImage()) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) - .forResult(PictureConfig.REQUEST_CAMERA); + }, true); + break; + case R.id.selectWorkLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("请填写您此次工作的内容") + .addItem("日常保洁") + .addItem("自定义") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + showEditDialog(tag); + } + }).build().show(); + break; + case R.id.startScanView: + QrConfig qrConfig = new QrConfig.Builder().setTitleText("扫一扫") //设置Title文字 + .setShowLight(true) //显示手电筒按钮 + .setShowTitle(true) //显示Title + .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 + .setShowAlbum(false) //显示从相册选择按钮 + .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 + .setDesText(null) //扫描框下文字 + .setShowDes(true) //是否显示扫描框下面文字 + .setPlaySound(true) //是否扫描成功后bi~的声音 + .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) + .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleTextColor(Color.WHITE) //设置Title文字颜色 + .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 + .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 + .setShowVibrator(true) //是否震动提醒 + .create(); + QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { + @Override + public void onScanSuccess(ScanResult result) { + toiletIdView.setText(result.content); + } + }); + break; + case R.id.takePictureView: + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + break; + case R.id.signInButton: + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + String toiletId = toiletIdView.getText().toString(); + if (TextUtils.isEmpty(toiletId)) { + ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); + return; + } + + double longitude = location.getLongitude(); + double latitude = location.getLatitude(); + + String cleanTime = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), + String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + StringHelper.filterString(workContentView.getText().toString())); + } else { + ToastHelper.showToast("定位失败,无法签到", ToastHelper.WARING); + } + } + }, true); + break; + } + } + + private void showEditDialog(String tag) { + if (tag.equals("自定义")) { + QMUIDialog.EditTextDialogBuilder builder = new QMUIDialog.EditTextDialogBuilder(context); + builder.setTitle("自定义工作内容") + .setPlaceholder("请输入您此次的工作内容") + .setInputType(InputType.TYPE_CLASS_TEXT) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + String inputStr = builder.getEditText().getText().toString(); + if (!TextUtils.isEmpty(inputStr)) { + workContentView.setText(inputStr); + dialog.dismiss(); + } else { + ToastHelper.showToast("自定义工作内容不能为空", ToastHelper.WARING); + } + } + }); + builder.create().show(); + } else { + workContentView.setText(tag); } } @@ -245,14 +335,18 @@ this.imagePath = url; String realPath = StringHelper.appendCompleteURL(url); - Glide.with(context) - .load(realPath) - .apply(new RequestOptions().error(R.drawable.ic_load_error)) - .into(pictureView); + ArrayList urls = new ArrayList<>(); + urls.add(realPath); + + Glide.with(context).load(realPath) + .apply(new RequestOptions().error(R.drawable.ic_load_error)).into(pictureView); pictureView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - + Intent intent = new Intent(context, BigImageActivity.class); + intent.putExtra("index", 0); + intent.putStringArrayListExtra("images", urls); + startActivity(intent); } }); } @@ -269,10 +363,18 @@ } @Override + public void obtainCleanResult(ActionResultBean resultBean) { + Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); + } + + @Override protected void onDestroy() { super.onDestroy(); if (uploadImagePresenter != null) { uploadImagePresenter.disposeRetrofitRequest(); } + if (cleanToiletPresenter != null) { + cleanToiletPresenter.disposeRetrofitRequest(); + } } } 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 2a855ba..2ae9aa6 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 @@ -96,6 +96,7 @@ StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); StringHelper.saveUserDeptId(data.getDeptId()); + StringHelper.saveUserId(data.getId()); } } 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 3ee2612..9f864db 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -14,6 +14,8 @@ Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CALL_PHONE, Manifest.permission.READ_PHONE_STATE}; + public static final String[] CASE_PAGE_TITLES = {"待办案卷", "已办案卷"}; + public static final String[] CHART_PAGE_TITLES = {"表格", "饼状图"}; public static final List ANALYSIS_ICONS = Arrays.asList( R.drawable.ic_wtly, R.drawable.ic_ajzt, R.drawable.ic_gfwt, @@ -30,8 +32,6 @@ Color.rgb(216, 248, 183), Color.rgb(129, 178, 20), Color.rgb(120, 104, 230)}; - public static final String[] CASE_PAGE_TITLES = {"待办案卷", "已办案卷"}; - public static final String[] CHART_PAGE_TITLES = {"表格", "饼状图"}; public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 2fe93d1..947535e 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -26,34 +26,39 @@ /** * 获取当前定位 */ - public static void obtainCurrentLocation(Context context, ILocationListener listener) { + public static void obtainCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } LocationManager mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); - //位置变化时更新位置 - mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30 * 1000, 10, new LocationListener() { - @Override - public void onLocationChanged(@NotNull Location location) { - listener.onLocationGet(location); - } + if (isOnce) { + Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); + listener.onLocationGet(location); + } else { + //位置变化时更新位置 + mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30 * 1000, 10, new LocationListener() { + @Override + public void onLocationChanged(@NotNull Location location) { + listener.onLocationGet(location); + } - @Override - public void onStatusChanged(String provider, int status, Bundle extras) { + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { - } + } - @Override - public void onProviderEnabled(@NotNull String provider) { + @Override + public void onProviderEnabled(@NotNull String provider) { - } + } - @Override - public void onProviderDisabled(@NotNull String provider) { + @Override + public void onProviderDisabled(@NotNull String provider) { - } - }); + } + }); + } } /** diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d3d6972 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java new file mode 100644 index 0000000..eb7fac5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java @@ -0,0 +1,53 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +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 CleanToiletModelImpl implements ICleanToiletModel { + + private OnGetCleanResultListener listener; + + public CleanToiletModelImpl(OnGetCleanResultListener cleanResultListener) { + this.listener = cleanResultListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetCleanResultListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + Observable observable = RetrofitServiceManager.getCleanToiletResult(toiletId, userId, lng, lat, cleanTime, photo, workContent); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java new file mode 100644 index 0000000..88bdd50 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanToiletModel { + Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java new file mode 100644 index 0000000..c59b5ca --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanToiletModelImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; + +public class CleanToiletPresenterImpl extends BasePresenter implements ICleanToiletPresenter, CleanToiletModelImpl.OnGetCleanResultListener { + + private IPublicToiletView view; + private CleanToiletModelImpl actionModel; + + public CleanToiletPresenterImpl(IPublicToiletView toiletView) { + this.view = toiletView; + actionModel = new CleanToiletModelImpl(this); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.obtainCleanResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + addSubscription(actionModel.sendRetrofitRequest(toiletId, userId, lng, lat, cleanTime, photo, workContent)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java new file mode 100644 index 0000000..0b38424 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanToiletPresenter { + void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java new file mode 100644 index 0000000..0272202 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface IPublicToiletView { + void obtainCleanResult(ActionResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java index 52c10a5..a7ff4f7 100644 --- a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -42,7 +42,7 @@ MainActivity.sendMessage(message); } } - }); + }, false); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 4f06f45..552cb77 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -392,7 +392,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index f9cd111..0cd126c 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -149,7 +149,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index 1064b85..b421b01 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -7,9 +7,11 @@ import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.location.Location; +import android.text.InputType; +import android.text.TextUtils; +import android.util.Log; import android.view.View; import android.widget.ImageView; -import android.widget.TextClock; import android.widget.TextView; import androidx.annotation.Nullable; @@ -20,7 +22,9 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.CleanToiletPresenterImpl; import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; @@ -28,6 +32,7 @@ import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.geometry.Point; @@ -40,15 +45,20 @@ import com.esri.arcgisruntime.mapping.view.MapView; import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; +import java.util.ArrayList; import butterknife.BindView; import butterknife.OnClick; @@ -57,8 +67,10 @@ import cn.bertsir.zbar.QrManager; import cn.bertsir.zbar.view.ScanLineView; -public class PublicToiletActivity extends BaseActivity implements View.OnClickListener, IUploadFileView { +public class PublicToiletActivity extends BaseActivity implements View.OnClickListener, + IUploadFileView, IPublicToiletView { + private static final String TAG = "PublicToiletActivity"; private Context context = this; @BindView(R.id.topLayout) QMUITopBarLayout topLayout; @@ -66,6 +78,8 @@ MapView mapView; @BindView(R.id.locationStreetView) TextView locationStreetView; + @BindView(R.id.workContentView) + TextView workContentView; @BindView(R.id.toiletIdView) TextView toiletIdView; @BindView(R.id.startScanView) @@ -76,12 +90,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; - @BindView(R.id.timeClockView) - TextClock timeClockView; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; - private String imagePath;//服务器返回的拍照数据集 + private String imagePath = "";//服务器返回的拍照数据 + private QMUITipDialog loadingDialog; + private CleanToiletPresenterImpl cleanToiletPresenter; @Override public int initLayoutView() { @@ -102,8 +116,8 @@ @Override public void initData() { - double lng = getIntent().getDoubleExtra("lng", 0); - double lat = getIntent().getDoubleExtra("lat", 0); + double lng = getIntent().getDoubleExtra("lng", Constant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", Constant.DEFAULT_LAT); LocationHelper.obtainCurrentLocation(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -113,10 +127,10 @@ locationStreetView.setText("定位失败"); } } - }); + }, false); mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - mapView.setViewpointScaleAsync(12000); + mapView.setViewpointScaleAsync(18000); ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); //创建底图、并设置底图图层 @@ -125,16 +139,22 @@ arcGISMap.setBasemap(basemap); mapView.setMap(arcGISMap); -// Point point = new Point(lng, lat, mapView.getSpatialReference()); -// mapView.setViewpointCenterAsync(point, 1000);//标注到指定经纬度并放大地图显示 -// //添加图片Marker -// addPictureMarker(point); + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 1000);//标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); uploadImagePresenter = new UploadImagePresenterImpl(this); + cleanToiletPresenter = new CleanToiletPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("提交中,请稍后") .create(); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); } @Override @@ -146,8 +166,8 @@ Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); pictureMarker.loadAsync(); Graphic graphic = new Graphic(point, pictureMarker); @@ -158,52 +178,122 @@ graphicsOverlays.add(mGraphicsOverlay); } - @OnClick({R.id.removeToLocalView, R.id.startScanView, R.id.takePictureView}) + @OnClick({R.id.removeToLocalView, R.id.selectWorkLayout, R.id.startScanView, R.id.takePictureView, R.id.signInButton}) @Override public void onClick(View v) { - if (v.getId() == R.id.removeToLocalView) { - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - if (location != null) { - mapView.setViewpointCenterAsync(new Point(location.getLongitude(), location.getLatitude())); + switch (v.getId()) { + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + mapView.setViewpointCenterAsync(new Point(location.getLongitude(), location.getLatitude())); + loadingDialog.dismiss(); + } } - } - }); - } else if (v.getId() == R.id.startScanView) { - QrConfig qrConfig = new QrConfig.Builder().setTitleText("扫一扫") //设置Title文字 - .setShowLight(true) //显示手电筒按钮 - .setShowTitle(true) //显示Title - .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 - .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 - .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 - .setDesText(null) //扫描框下文字 - .setShowDes(true) //是否显示扫描框下面文字 - .setPlaySound(true) //是否扫描成功后bi~的声音 - .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) - .setTitleTextColor(Color.WHITE) //设置Title文字颜色 - .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 - .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 - .setShowVibrator(true) //是否震动提醒 - .create(); - QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { - @Override - public void onScanSuccess(ScanResult result) { - toiletIdView.setText(result.content); - } - }); - } else if (v.getId() == R.id.takePictureView) { - PictureSelector.create(this) - .openCamera(PictureMimeType.ofImage()) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) - .forResult(PictureConfig.REQUEST_CAMERA); + }, true); + break; + case R.id.selectWorkLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("请填写您此次工作的内容") + .addItem("日常保洁") + .addItem("自定义") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + showEditDialog(tag); + } + }).build().show(); + break; + case R.id.startScanView: + QrConfig qrConfig = new QrConfig.Builder().setTitleText("扫一扫") //设置Title文字 + .setShowLight(true) //显示手电筒按钮 + .setShowTitle(true) //显示Title + .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 + .setShowAlbum(false) //显示从相册选择按钮 + .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 + .setDesText(null) //扫描框下文字 + .setShowDes(true) //是否显示扫描框下面文字 + .setPlaySound(true) //是否扫描成功后bi~的声音 + .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) + .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleTextColor(Color.WHITE) //设置Title文字颜色 + .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 + .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 + .setShowVibrator(true) //是否震动提醒 + .create(); + QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { + @Override + public void onScanSuccess(ScanResult result) { + toiletIdView.setText(result.content); + } + }); + break; + case R.id.takePictureView: + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + break; + case R.id.signInButton: + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + String toiletId = toiletIdView.getText().toString(); + if (TextUtils.isEmpty(toiletId)) { + ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); + return; + } + + double longitude = location.getLongitude(); + double latitude = location.getLatitude(); + + String cleanTime = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), + String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + StringHelper.filterString(workContentView.getText().toString())); + } else { + ToastHelper.showToast("定位失败,无法签到", ToastHelper.WARING); + } + } + }, true); + break; + } + } + + private void showEditDialog(String tag) { + if (tag.equals("自定义")) { + QMUIDialog.EditTextDialogBuilder builder = new QMUIDialog.EditTextDialogBuilder(context); + builder.setTitle("自定义工作内容") + .setPlaceholder("请输入您此次的工作内容") + .setInputType(InputType.TYPE_CLASS_TEXT) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + String inputStr = builder.getEditText().getText().toString(); + if (!TextUtils.isEmpty(inputStr)) { + workContentView.setText(inputStr); + dialog.dismiss(); + } else { + ToastHelper.showToast("自定义工作内容不能为空", ToastHelper.WARING); + } + } + }); + builder.create().show(); + } else { + workContentView.setText(tag); } } @@ -245,14 +335,18 @@ this.imagePath = url; String realPath = StringHelper.appendCompleteURL(url); - Glide.with(context) - .load(realPath) - .apply(new RequestOptions().error(R.drawable.ic_load_error)) - .into(pictureView); + ArrayList urls = new ArrayList<>(); + urls.add(realPath); + + Glide.with(context).load(realPath) + .apply(new RequestOptions().error(R.drawable.ic_load_error)).into(pictureView); pictureView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - + Intent intent = new Intent(context, BigImageActivity.class); + intent.putExtra("index", 0); + intent.putStringArrayListExtra("images", urls); + startActivity(intent); } }); } @@ -269,10 +363,18 @@ } @Override + public void obtainCleanResult(ActionResultBean resultBean) { + Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); + } + + @Override protected void onDestroy() { super.onDestroy(); if (uploadImagePresenter != null) { uploadImagePresenter.disposeRetrofitRequest(); } + if (cleanToiletPresenter != null) { + cleanToiletPresenter.disposeRetrofitRequest(); + } } } 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 2a855ba..2ae9aa6 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 @@ -96,6 +96,7 @@ StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); StringHelper.saveUserDeptId(data.getDeptId()); + StringHelper.saveUserId(data.getId()); } } 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 3ee2612..9f864db 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -14,6 +14,8 @@ Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CALL_PHONE, Manifest.permission.READ_PHONE_STATE}; + public static final String[] CASE_PAGE_TITLES = {"待办案卷", "已办案卷"}; + public static final String[] CHART_PAGE_TITLES = {"表格", "饼状图"}; public static final List ANALYSIS_ICONS = Arrays.asList( R.drawable.ic_wtly, R.drawable.ic_ajzt, R.drawable.ic_gfwt, @@ -30,8 +32,6 @@ Color.rgb(216, 248, 183), Color.rgb(129, 178, 20), Color.rgb(120, 104, 230)}; - public static final String[] CASE_PAGE_TITLES = {"待办案卷", "已办案卷"}; - public static final String[] CHART_PAGE_TITLES = {"表格", "饼状图"}; public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 2fe93d1..947535e 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -26,34 +26,39 @@ /** * 获取当前定位 */ - public static void obtainCurrentLocation(Context context, ILocationListener listener) { + public static void obtainCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } LocationManager mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); - //位置变化时更新位置 - mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30 * 1000, 10, new LocationListener() { - @Override - public void onLocationChanged(@NotNull Location location) { - listener.onLocationGet(location); - } + if (isOnce) { + Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); + listener.onLocationGet(location); + } else { + //位置变化时更新位置 + mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30 * 1000, 10, new LocationListener() { + @Override + public void onLocationChanged(@NotNull Location location) { + listener.onLocationGet(location); + } - @Override - public void onStatusChanged(String provider, int status, Bundle extras) { + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { - } + } - @Override - public void onProviderEnabled(@NotNull String provider) { + @Override + public void onProviderEnabled(@NotNull String provider) { - } + } - @Override - public void onProviderDisabled(@NotNull String provider) { + @Override + public void onProviderDisabled(@NotNull String provider) { - } - }); + } + }); + } } /** 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 1194333..254c847 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -21,6 +21,14 @@ return (String) SaveKeyValues.getValue("userAccount", ""); } + public static void saveUserId(String userId) { + SaveKeyValues.putValue("userId", userId); + } + + public static String getUserId() { + return (String) SaveKeyValues.getValue("userId", ""); + } + public static void saveUserName(String name) { SaveKeyValues.putValue("userName", name); } diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d3d6972 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java new file mode 100644 index 0000000..eb7fac5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java @@ -0,0 +1,53 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +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 CleanToiletModelImpl implements ICleanToiletModel { + + private OnGetCleanResultListener listener; + + public CleanToiletModelImpl(OnGetCleanResultListener cleanResultListener) { + this.listener = cleanResultListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetCleanResultListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + Observable observable = RetrofitServiceManager.getCleanToiletResult(toiletId, userId, lng, lat, cleanTime, photo, workContent); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java new file mode 100644 index 0000000..88bdd50 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanToiletModel { + Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java new file mode 100644 index 0000000..c59b5ca --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanToiletModelImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; + +public class CleanToiletPresenterImpl extends BasePresenter implements ICleanToiletPresenter, CleanToiletModelImpl.OnGetCleanResultListener { + + private IPublicToiletView view; + private CleanToiletModelImpl actionModel; + + public CleanToiletPresenterImpl(IPublicToiletView toiletView) { + this.view = toiletView; + actionModel = new CleanToiletModelImpl(this); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.obtainCleanResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + addSubscription(actionModel.sendRetrofitRequest(toiletId, userId, lng, lat, cleanTime, photo, workContent)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java new file mode 100644 index 0000000..0b38424 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanToiletPresenter { + void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java new file mode 100644 index 0000000..0272202 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface IPublicToiletView { + void obtainCleanResult(ActionResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java index 52c10a5..a7ff4f7 100644 --- a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -42,7 +42,7 @@ MainActivity.sendMessage(message); } } - }); + }, false); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 4f06f45..552cb77 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -392,7 +392,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index f9cd111..0cd126c 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -149,7 +149,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index 1064b85..b421b01 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -7,9 +7,11 @@ import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.location.Location; +import android.text.InputType; +import android.text.TextUtils; +import android.util.Log; import android.view.View; import android.widget.ImageView; -import android.widget.TextClock; import android.widget.TextView; import androidx.annotation.Nullable; @@ -20,7 +22,9 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.CleanToiletPresenterImpl; import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; @@ -28,6 +32,7 @@ import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.geometry.Point; @@ -40,15 +45,20 @@ import com.esri.arcgisruntime.mapping.view.MapView; import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; +import java.util.ArrayList; import butterknife.BindView; import butterknife.OnClick; @@ -57,8 +67,10 @@ import cn.bertsir.zbar.QrManager; import cn.bertsir.zbar.view.ScanLineView; -public class PublicToiletActivity extends BaseActivity implements View.OnClickListener, IUploadFileView { +public class PublicToiletActivity extends BaseActivity implements View.OnClickListener, + IUploadFileView, IPublicToiletView { + private static final String TAG = "PublicToiletActivity"; private Context context = this; @BindView(R.id.topLayout) QMUITopBarLayout topLayout; @@ -66,6 +78,8 @@ MapView mapView; @BindView(R.id.locationStreetView) TextView locationStreetView; + @BindView(R.id.workContentView) + TextView workContentView; @BindView(R.id.toiletIdView) TextView toiletIdView; @BindView(R.id.startScanView) @@ -76,12 +90,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; - @BindView(R.id.timeClockView) - TextClock timeClockView; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; - private String imagePath;//服务器返回的拍照数据集 + private String imagePath = "";//服务器返回的拍照数据 + private QMUITipDialog loadingDialog; + private CleanToiletPresenterImpl cleanToiletPresenter; @Override public int initLayoutView() { @@ -102,8 +116,8 @@ @Override public void initData() { - double lng = getIntent().getDoubleExtra("lng", 0); - double lat = getIntent().getDoubleExtra("lat", 0); + double lng = getIntent().getDoubleExtra("lng", Constant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", Constant.DEFAULT_LAT); LocationHelper.obtainCurrentLocation(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -113,10 +127,10 @@ locationStreetView.setText("定位失败"); } } - }); + }, false); mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - mapView.setViewpointScaleAsync(12000); + mapView.setViewpointScaleAsync(18000); ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); //创建底图、并设置底图图层 @@ -125,16 +139,22 @@ arcGISMap.setBasemap(basemap); mapView.setMap(arcGISMap); -// Point point = new Point(lng, lat, mapView.getSpatialReference()); -// mapView.setViewpointCenterAsync(point, 1000);//标注到指定经纬度并放大地图显示 -// //添加图片Marker -// addPictureMarker(point); + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 1000);//标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); uploadImagePresenter = new UploadImagePresenterImpl(this); + cleanToiletPresenter = new CleanToiletPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("提交中,请稍后") .create(); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); } @Override @@ -146,8 +166,8 @@ Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); pictureMarker.loadAsync(); Graphic graphic = new Graphic(point, pictureMarker); @@ -158,52 +178,122 @@ graphicsOverlays.add(mGraphicsOverlay); } - @OnClick({R.id.removeToLocalView, R.id.startScanView, R.id.takePictureView}) + @OnClick({R.id.removeToLocalView, R.id.selectWorkLayout, R.id.startScanView, R.id.takePictureView, R.id.signInButton}) @Override public void onClick(View v) { - if (v.getId() == R.id.removeToLocalView) { - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - if (location != null) { - mapView.setViewpointCenterAsync(new Point(location.getLongitude(), location.getLatitude())); + switch (v.getId()) { + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + mapView.setViewpointCenterAsync(new Point(location.getLongitude(), location.getLatitude())); + loadingDialog.dismiss(); + } } - } - }); - } else if (v.getId() == R.id.startScanView) { - QrConfig qrConfig = new QrConfig.Builder().setTitleText("扫一扫") //设置Title文字 - .setShowLight(true) //显示手电筒按钮 - .setShowTitle(true) //显示Title - .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 - .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 - .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 - .setDesText(null) //扫描框下文字 - .setShowDes(true) //是否显示扫描框下面文字 - .setPlaySound(true) //是否扫描成功后bi~的声音 - .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) - .setTitleTextColor(Color.WHITE) //设置Title文字颜色 - .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 - .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 - .setShowVibrator(true) //是否震动提醒 - .create(); - QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { - @Override - public void onScanSuccess(ScanResult result) { - toiletIdView.setText(result.content); - } - }); - } else if (v.getId() == R.id.takePictureView) { - PictureSelector.create(this) - .openCamera(PictureMimeType.ofImage()) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) - .forResult(PictureConfig.REQUEST_CAMERA); + }, true); + break; + case R.id.selectWorkLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("请填写您此次工作的内容") + .addItem("日常保洁") + .addItem("自定义") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + showEditDialog(tag); + } + }).build().show(); + break; + case R.id.startScanView: + QrConfig qrConfig = new QrConfig.Builder().setTitleText("扫一扫") //设置Title文字 + .setShowLight(true) //显示手电筒按钮 + .setShowTitle(true) //显示Title + .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 + .setShowAlbum(false) //显示从相册选择按钮 + .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 + .setDesText(null) //扫描框下文字 + .setShowDes(true) //是否显示扫描框下面文字 + .setPlaySound(true) //是否扫描成功后bi~的声音 + .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) + .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleTextColor(Color.WHITE) //设置Title文字颜色 + .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 + .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 + .setShowVibrator(true) //是否震动提醒 + .create(); + QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { + @Override + public void onScanSuccess(ScanResult result) { + toiletIdView.setText(result.content); + } + }); + break; + case R.id.takePictureView: + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + break; + case R.id.signInButton: + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + String toiletId = toiletIdView.getText().toString(); + if (TextUtils.isEmpty(toiletId)) { + ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); + return; + } + + double longitude = location.getLongitude(); + double latitude = location.getLatitude(); + + String cleanTime = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), + String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + StringHelper.filterString(workContentView.getText().toString())); + } else { + ToastHelper.showToast("定位失败,无法签到", ToastHelper.WARING); + } + } + }, true); + break; + } + } + + private void showEditDialog(String tag) { + if (tag.equals("自定义")) { + QMUIDialog.EditTextDialogBuilder builder = new QMUIDialog.EditTextDialogBuilder(context); + builder.setTitle("自定义工作内容") + .setPlaceholder("请输入您此次的工作内容") + .setInputType(InputType.TYPE_CLASS_TEXT) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + String inputStr = builder.getEditText().getText().toString(); + if (!TextUtils.isEmpty(inputStr)) { + workContentView.setText(inputStr); + dialog.dismiss(); + } else { + ToastHelper.showToast("自定义工作内容不能为空", ToastHelper.WARING); + } + } + }); + builder.create().show(); + } else { + workContentView.setText(tag); } } @@ -245,14 +335,18 @@ this.imagePath = url; String realPath = StringHelper.appendCompleteURL(url); - Glide.with(context) - .load(realPath) - .apply(new RequestOptions().error(R.drawable.ic_load_error)) - .into(pictureView); + ArrayList urls = new ArrayList<>(); + urls.add(realPath); + + Glide.with(context).load(realPath) + .apply(new RequestOptions().error(R.drawable.ic_load_error)).into(pictureView); pictureView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - + Intent intent = new Intent(context, BigImageActivity.class); + intent.putExtra("index", 0); + intent.putStringArrayListExtra("images", urls); + startActivity(intent); } }); } @@ -269,10 +363,18 @@ } @Override + public void obtainCleanResult(ActionResultBean resultBean) { + Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); + } + + @Override protected void onDestroy() { super.onDestroy(); if (uploadImagePresenter != null) { uploadImagePresenter.disposeRetrofitRequest(); } + if (cleanToiletPresenter != null) { + cleanToiletPresenter.disposeRetrofitRequest(); + } } } 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 2a855ba..2ae9aa6 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 @@ -96,6 +96,7 @@ StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); StringHelper.saveUserDeptId(data.getDeptId()); + StringHelper.saveUserId(data.getId()); } } 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 3ee2612..9f864db 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -14,6 +14,8 @@ Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CALL_PHONE, Manifest.permission.READ_PHONE_STATE}; + public static final String[] CASE_PAGE_TITLES = {"待办案卷", "已办案卷"}; + public static final String[] CHART_PAGE_TITLES = {"表格", "饼状图"}; public static final List ANALYSIS_ICONS = Arrays.asList( R.drawable.ic_wtly, R.drawable.ic_ajzt, R.drawable.ic_gfwt, @@ -30,8 +32,6 @@ Color.rgb(216, 248, 183), Color.rgb(129, 178, 20), Color.rgb(120, 104, 230)}; - public static final String[] CASE_PAGE_TITLES = {"待办案卷", "已办案卷"}; - public static final String[] CHART_PAGE_TITLES = {"表格", "饼状图"}; public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 2fe93d1..947535e 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -26,34 +26,39 @@ /** * 获取当前定位 */ - public static void obtainCurrentLocation(Context context, ILocationListener listener) { + public static void obtainCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } LocationManager mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); - //位置变化时更新位置 - mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30 * 1000, 10, new LocationListener() { - @Override - public void onLocationChanged(@NotNull Location location) { - listener.onLocationGet(location); - } + if (isOnce) { + Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); + listener.onLocationGet(location); + } else { + //位置变化时更新位置 + mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30 * 1000, 10, new LocationListener() { + @Override + public void onLocationChanged(@NotNull Location location) { + listener.onLocationGet(location); + } - @Override - public void onStatusChanged(String provider, int status, Bundle extras) { + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { - } + } - @Override - public void onProviderEnabled(@NotNull String provider) { + @Override + public void onProviderEnabled(@NotNull String provider) { - } + } - @Override - public void onProviderDisabled(@NotNull String provider) { + @Override + public void onProviderDisabled(@NotNull String provider) { - } - }); + } + }); + } } /** 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 1194333..254c847 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -21,6 +21,14 @@ return (String) SaveKeyValues.getValue("userAccount", ""); } + public static void saveUserId(String userId) { + SaveKeyValues.putValue("userId", userId); + } + + public static String getUserId() { + return (String) SaveKeyValues.getValue("userId", ""); + } + public static void saveUserName(String name) { SaveKeyValues.putValue("userName", name); } 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 ad97454..bbf2de9 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 @@ -440,4 +440,20 @@ @POST("/userPush/register") Observable registerPush(@Header("token") String token, @Field("clientId") String clientId); + + /** + * 公厕打扫签到 + *

+ * http://111.198.10.15:11409/toiletClean/add + */ + @FormUrlEncoded + @POST("/toiletClean/add") + Observable cleanToilet(@Header("token") String token, + @Field("toiletId") String toiletId, + @Field("userId") String userId, + @Field("lng") String lng, + @Field("lat") String lat, + @Field("cleanTime") String cleanTime, + @Field("photo") String photo, + @Field("workContent") String workContent); } diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d3d6972 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java new file mode 100644 index 0000000..eb7fac5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java @@ -0,0 +1,53 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +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 CleanToiletModelImpl implements ICleanToiletModel { + + private OnGetCleanResultListener listener; + + public CleanToiletModelImpl(OnGetCleanResultListener cleanResultListener) { + this.listener = cleanResultListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetCleanResultListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + Observable observable = RetrofitServiceManager.getCleanToiletResult(toiletId, userId, lng, lat, cleanTime, photo, workContent); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java new file mode 100644 index 0000000..88bdd50 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanToiletModel { + Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java new file mode 100644 index 0000000..c59b5ca --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanToiletModelImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; + +public class CleanToiletPresenterImpl extends BasePresenter implements ICleanToiletPresenter, CleanToiletModelImpl.OnGetCleanResultListener { + + private IPublicToiletView view; + private CleanToiletModelImpl actionModel; + + public CleanToiletPresenterImpl(IPublicToiletView toiletView) { + this.view = toiletView; + actionModel = new CleanToiletModelImpl(this); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.obtainCleanResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + addSubscription(actionModel.sendRetrofitRequest(toiletId, userId, lng, lat, cleanTime, photo, workContent)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java new file mode 100644 index 0000000..0b38424 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanToiletPresenter { + void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java new file mode 100644 index 0000000..0272202 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface IPublicToiletView { + void obtainCleanResult(ActionResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java index 52c10a5..a7ff4f7 100644 --- a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -42,7 +42,7 @@ MainActivity.sendMessage(message); } } - }); + }, false); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 4f06f45..552cb77 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -392,7 +392,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index f9cd111..0cd126c 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -149,7 +149,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index 1064b85..b421b01 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -7,9 +7,11 @@ import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.location.Location; +import android.text.InputType; +import android.text.TextUtils; +import android.util.Log; import android.view.View; import android.widget.ImageView; -import android.widget.TextClock; import android.widget.TextView; import androidx.annotation.Nullable; @@ -20,7 +22,9 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.CleanToiletPresenterImpl; import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; @@ -28,6 +32,7 @@ import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.geometry.Point; @@ -40,15 +45,20 @@ import com.esri.arcgisruntime.mapping.view.MapView; import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; +import java.util.ArrayList; import butterknife.BindView; import butterknife.OnClick; @@ -57,8 +67,10 @@ import cn.bertsir.zbar.QrManager; import cn.bertsir.zbar.view.ScanLineView; -public class PublicToiletActivity extends BaseActivity implements View.OnClickListener, IUploadFileView { +public class PublicToiletActivity extends BaseActivity implements View.OnClickListener, + IUploadFileView, IPublicToiletView { + private static final String TAG = "PublicToiletActivity"; private Context context = this; @BindView(R.id.topLayout) QMUITopBarLayout topLayout; @@ -66,6 +78,8 @@ MapView mapView; @BindView(R.id.locationStreetView) TextView locationStreetView; + @BindView(R.id.workContentView) + TextView workContentView; @BindView(R.id.toiletIdView) TextView toiletIdView; @BindView(R.id.startScanView) @@ -76,12 +90,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; - @BindView(R.id.timeClockView) - TextClock timeClockView; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; - private String imagePath;//服务器返回的拍照数据集 + private String imagePath = "";//服务器返回的拍照数据 + private QMUITipDialog loadingDialog; + private CleanToiletPresenterImpl cleanToiletPresenter; @Override public int initLayoutView() { @@ -102,8 +116,8 @@ @Override public void initData() { - double lng = getIntent().getDoubleExtra("lng", 0); - double lat = getIntent().getDoubleExtra("lat", 0); + double lng = getIntent().getDoubleExtra("lng", Constant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", Constant.DEFAULT_LAT); LocationHelper.obtainCurrentLocation(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -113,10 +127,10 @@ locationStreetView.setText("定位失败"); } } - }); + }, false); mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - mapView.setViewpointScaleAsync(12000); + mapView.setViewpointScaleAsync(18000); ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); //创建底图、并设置底图图层 @@ -125,16 +139,22 @@ arcGISMap.setBasemap(basemap); mapView.setMap(arcGISMap); -// Point point = new Point(lng, lat, mapView.getSpatialReference()); -// mapView.setViewpointCenterAsync(point, 1000);//标注到指定经纬度并放大地图显示 -// //添加图片Marker -// addPictureMarker(point); + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 1000);//标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); uploadImagePresenter = new UploadImagePresenterImpl(this); + cleanToiletPresenter = new CleanToiletPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("提交中,请稍后") .create(); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); } @Override @@ -146,8 +166,8 @@ Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); pictureMarker.loadAsync(); Graphic graphic = new Graphic(point, pictureMarker); @@ -158,52 +178,122 @@ graphicsOverlays.add(mGraphicsOverlay); } - @OnClick({R.id.removeToLocalView, R.id.startScanView, R.id.takePictureView}) + @OnClick({R.id.removeToLocalView, R.id.selectWorkLayout, R.id.startScanView, R.id.takePictureView, R.id.signInButton}) @Override public void onClick(View v) { - if (v.getId() == R.id.removeToLocalView) { - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - if (location != null) { - mapView.setViewpointCenterAsync(new Point(location.getLongitude(), location.getLatitude())); + switch (v.getId()) { + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + mapView.setViewpointCenterAsync(new Point(location.getLongitude(), location.getLatitude())); + loadingDialog.dismiss(); + } } - } - }); - } else if (v.getId() == R.id.startScanView) { - QrConfig qrConfig = new QrConfig.Builder().setTitleText("扫一扫") //设置Title文字 - .setShowLight(true) //显示手电筒按钮 - .setShowTitle(true) //显示Title - .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 - .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 - .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 - .setDesText(null) //扫描框下文字 - .setShowDes(true) //是否显示扫描框下面文字 - .setPlaySound(true) //是否扫描成功后bi~的声音 - .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) - .setTitleTextColor(Color.WHITE) //设置Title文字颜色 - .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 - .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 - .setShowVibrator(true) //是否震动提醒 - .create(); - QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { - @Override - public void onScanSuccess(ScanResult result) { - toiletIdView.setText(result.content); - } - }); - } else if (v.getId() == R.id.takePictureView) { - PictureSelector.create(this) - .openCamera(PictureMimeType.ofImage()) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) - .forResult(PictureConfig.REQUEST_CAMERA); + }, true); + break; + case R.id.selectWorkLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("请填写您此次工作的内容") + .addItem("日常保洁") + .addItem("自定义") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + showEditDialog(tag); + } + }).build().show(); + break; + case R.id.startScanView: + QrConfig qrConfig = new QrConfig.Builder().setTitleText("扫一扫") //设置Title文字 + .setShowLight(true) //显示手电筒按钮 + .setShowTitle(true) //显示Title + .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 + .setShowAlbum(false) //显示从相册选择按钮 + .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 + .setDesText(null) //扫描框下文字 + .setShowDes(true) //是否显示扫描框下面文字 + .setPlaySound(true) //是否扫描成功后bi~的声音 + .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) + .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleTextColor(Color.WHITE) //设置Title文字颜色 + .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 + .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 + .setShowVibrator(true) //是否震动提醒 + .create(); + QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { + @Override + public void onScanSuccess(ScanResult result) { + toiletIdView.setText(result.content); + } + }); + break; + case R.id.takePictureView: + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + break; + case R.id.signInButton: + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + String toiletId = toiletIdView.getText().toString(); + if (TextUtils.isEmpty(toiletId)) { + ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); + return; + } + + double longitude = location.getLongitude(); + double latitude = location.getLatitude(); + + String cleanTime = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), + String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + StringHelper.filterString(workContentView.getText().toString())); + } else { + ToastHelper.showToast("定位失败,无法签到", ToastHelper.WARING); + } + } + }, true); + break; + } + } + + private void showEditDialog(String tag) { + if (tag.equals("自定义")) { + QMUIDialog.EditTextDialogBuilder builder = new QMUIDialog.EditTextDialogBuilder(context); + builder.setTitle("自定义工作内容") + .setPlaceholder("请输入您此次的工作内容") + .setInputType(InputType.TYPE_CLASS_TEXT) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + String inputStr = builder.getEditText().getText().toString(); + if (!TextUtils.isEmpty(inputStr)) { + workContentView.setText(inputStr); + dialog.dismiss(); + } else { + ToastHelper.showToast("自定义工作内容不能为空", ToastHelper.WARING); + } + } + }); + builder.create().show(); + } else { + workContentView.setText(tag); } } @@ -245,14 +335,18 @@ this.imagePath = url; String realPath = StringHelper.appendCompleteURL(url); - Glide.with(context) - .load(realPath) - .apply(new RequestOptions().error(R.drawable.ic_load_error)) - .into(pictureView); + ArrayList urls = new ArrayList<>(); + urls.add(realPath); + + Glide.with(context).load(realPath) + .apply(new RequestOptions().error(R.drawable.ic_load_error)).into(pictureView); pictureView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - + Intent intent = new Intent(context, BigImageActivity.class); + intent.putExtra("index", 0); + intent.putStringArrayListExtra("images", urls); + startActivity(intent); } }); } @@ -269,10 +363,18 @@ } @Override + public void obtainCleanResult(ActionResultBean resultBean) { + Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); + } + + @Override protected void onDestroy() { super.onDestroy(); if (uploadImagePresenter != null) { uploadImagePresenter.disposeRetrofitRequest(); } + if (cleanToiletPresenter != null) { + cleanToiletPresenter.disposeRetrofitRequest(); + } } } 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 2a855ba..2ae9aa6 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 @@ -96,6 +96,7 @@ StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); StringHelper.saveUserDeptId(data.getDeptId()); + StringHelper.saveUserId(data.getId()); } } 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 3ee2612..9f864db 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -14,6 +14,8 @@ Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CALL_PHONE, Manifest.permission.READ_PHONE_STATE}; + public static final String[] CASE_PAGE_TITLES = {"待办案卷", "已办案卷"}; + public static final String[] CHART_PAGE_TITLES = {"表格", "饼状图"}; public static final List ANALYSIS_ICONS = Arrays.asList( R.drawable.ic_wtly, R.drawable.ic_ajzt, R.drawable.ic_gfwt, @@ -30,8 +32,6 @@ Color.rgb(216, 248, 183), Color.rgb(129, 178, 20), Color.rgb(120, 104, 230)}; - public static final String[] CASE_PAGE_TITLES = {"待办案卷", "已办案卷"}; - public static final String[] CHART_PAGE_TITLES = {"表格", "饼状图"}; public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 2fe93d1..947535e 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -26,34 +26,39 @@ /** * 获取当前定位 */ - public static void obtainCurrentLocation(Context context, ILocationListener listener) { + public static void obtainCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } LocationManager mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); - //位置变化时更新位置 - mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30 * 1000, 10, new LocationListener() { - @Override - public void onLocationChanged(@NotNull Location location) { - listener.onLocationGet(location); - } + if (isOnce) { + Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); + listener.onLocationGet(location); + } else { + //位置变化时更新位置 + mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30 * 1000, 10, new LocationListener() { + @Override + public void onLocationChanged(@NotNull Location location) { + listener.onLocationGet(location); + } - @Override - public void onStatusChanged(String provider, int status, Bundle extras) { + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { - } + } - @Override - public void onProviderEnabled(@NotNull String provider) { + @Override + public void onProviderEnabled(@NotNull String provider) { - } + } - @Override - public void onProviderDisabled(@NotNull String provider) { + @Override + public void onProviderDisabled(@NotNull String provider) { - } - }); + } + }); + } } /** 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 1194333..254c847 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -21,6 +21,14 @@ return (String) SaveKeyValues.getValue("userAccount", ""); } + public static void saveUserId(String userId) { + SaveKeyValues.putValue("userId", userId); + } + + public static String getUserId() { + return (String) SaveKeyValues.getValue("userId", ""); + } + public static void saveUserName(String name) { SaveKeyValues.putValue("userName", name); } 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 ad97454..bbf2de9 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 @@ -440,4 +440,20 @@ @POST("/userPush/register") Observable registerPush(@Header("token") String token, @Field("clientId") String clientId); + + /** + * 公厕打扫签到 + *

+ * http://111.198.10.15:11409/toiletClean/add + */ + @FormUrlEncoded + @POST("/toiletClean/add") + Observable cleanToilet(@Header("token") String token, + @Field("toiletId") String toiletId, + @Field("userId") String userId, + @Field("lng") String lng, + @Field("lat") String lat, + @Field("cleanTime") String cleanTime, + @Field("photo") String photo, + @Field("workContent") String workContent); } 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 fb128b7..4f187c9 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 @@ -501,4 +501,17 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.registerPush(AuthenticationHelper.getToken(), clientId); } + + /** + * 公厕打扫签到 + */ + public static Observable getCleanToiletResult(String toiletId, String userId, + String lng, String lat, + String cleanTime, String photo, + String workContent) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.cleanToilet(AuthenticationHelper.getToken(), toiletId, userId, lng, lat, cleanTime, + photo, workContent); + } } diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d3d6972 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java new file mode 100644 index 0000000..eb7fac5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanToiletModelImpl.java @@ -0,0 +1,53 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.ActionResultBean; +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 CleanToiletModelImpl implements ICleanToiletModel { + + private OnGetCleanResultListener listener; + + public CleanToiletModelImpl(OnGetCleanResultListener cleanResultListener) { + this.listener = cleanResultListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetCleanResultListener { + void onSuccess(ActionResultBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + Observable observable = RetrofitServiceManager.getCleanToiletResult(toiletId, userId, lng, lat, cleanTime, photo, workContent); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (e.getCause() != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(ActionResultBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java new file mode 100644 index 0000000..88bdd50 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanToiletModel.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanToiletModel { + Subscription sendRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java new file mode 100644 index 0000000..c59b5ca --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanToiletPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanToiletModelImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; + +public class CleanToiletPresenterImpl extends BasePresenter implements ICleanToiletPresenter, CleanToiletModelImpl.OnGetCleanResultListener { + + private IPublicToiletView view; + private CleanToiletModelImpl actionModel; + + public CleanToiletPresenterImpl(IPublicToiletView toiletView) { + this.view = toiletView; + actionModel = new CleanToiletModelImpl(this); + } + + @Override + public void onSuccess(ActionResultBean resultBean) { + view.obtainCleanResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } + + @Override + public void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, String cleanTime, String photo, String workContent) { + addSubscription(actionModel.sendRetrofitRequest(toiletId, userId, lng, lat, cleanTime, photo, workContent)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java new file mode 100644 index 0000000..0b38424 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanToiletPresenter.java @@ -0,0 +1,8 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanToiletPresenter { + void onReadyRetrofitRequest(String toiletId, String userId, String lng, String lat, + String cleanTime, String photo, String workContent); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java new file mode 100644 index 0000000..0272202 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IPublicToiletView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.ActionResultBean; + +public interface IPublicToiletView { + void obtainCleanResult(ActionResultBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java index 52c10a5..a7ff4f7 100644 --- a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -42,7 +42,7 @@ MainActivity.sendMessage(message); } } - }); + }, false); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 4f06f45..552cb77 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -392,7 +392,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index f9cd111..0cd126c 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -149,7 +149,7 @@ loadingDialog.dismiss(); } } - }); + }, true); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index 1064b85..b421b01 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -7,9 +7,11 @@ import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.location.Location; +import android.text.InputType; +import android.text.TextUtils; +import android.util.Log; import android.view.View; import android.widget.ImageView; -import android.widget.TextClock; import android.widget.TextView; import androidx.annotation.Nullable; @@ -20,7 +22,9 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.ActionResultBean; +import com.casic.dcms.mvp.presenter.CleanToiletPresenterImpl; import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IPublicToiletView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; @@ -28,6 +32,7 @@ import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.geometry.Point; @@ -40,15 +45,20 @@ import com.esri.arcgisruntime.mapping.view.MapView; import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; +import java.util.ArrayList; import butterknife.BindView; import butterknife.OnClick; @@ -57,8 +67,10 @@ import cn.bertsir.zbar.QrManager; import cn.bertsir.zbar.view.ScanLineView; -public class PublicToiletActivity extends BaseActivity implements View.OnClickListener, IUploadFileView { +public class PublicToiletActivity extends BaseActivity implements View.OnClickListener, + IUploadFileView, IPublicToiletView { + private static final String TAG = "PublicToiletActivity"; private Context context = this; @BindView(R.id.topLayout) QMUITopBarLayout topLayout; @@ -66,6 +78,8 @@ MapView mapView; @BindView(R.id.locationStreetView) TextView locationStreetView; + @BindView(R.id.workContentView) + TextView workContentView; @BindView(R.id.toiletIdView) TextView toiletIdView; @BindView(R.id.startScanView) @@ -76,12 +90,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; - @BindView(R.id.timeClockView) - TextClock timeClockView; private UploadImagePresenterImpl uploadImagePresenter; private QMUITipDialog submitDialog; - private String imagePath;//服务器返回的拍照数据集 + private String imagePath = "";//服务器返回的拍照数据 + private QMUITipDialog loadingDialog; + private CleanToiletPresenterImpl cleanToiletPresenter; @Override public int initLayoutView() { @@ -102,8 +116,8 @@ @Override public void initData() { - double lng = getIntent().getDoubleExtra("lng", 0); - double lat = getIntent().getDoubleExtra("lat", 0); + double lng = getIntent().getDoubleExtra("lng", Constant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", Constant.DEFAULT_LAT); LocationHelper.obtainCurrentLocation(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -113,10 +127,10 @@ locationStreetView.setText("定位失败"); } } - }); + }, false); mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - mapView.setViewpointScaleAsync(12000); + mapView.setViewpointScaleAsync(18000); ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); //创建底图、并设置底图图层 @@ -125,16 +139,22 @@ arcGISMap.setBasemap(basemap); mapView.setMap(arcGISMap); -// Point point = new Point(lng, lat, mapView.getSpatialReference()); -// mapView.setViewpointCenterAsync(point, 1000);//标注到指定经纬度并放大地图显示 -// //添加图片Marker -// addPictureMarker(point); + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 1000);//标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); uploadImagePresenter = new UploadImagePresenterImpl(this); + cleanToiletPresenter = new CleanToiletPresenterImpl(this); submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("提交中,请稍后") .create(); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); } @Override @@ -146,8 +166,8 @@ Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); pictureMarker.loadAsync(); Graphic graphic = new Graphic(point, pictureMarker); @@ -158,52 +178,122 @@ graphicsOverlays.add(mGraphicsOverlay); } - @OnClick({R.id.removeToLocalView, R.id.startScanView, R.id.takePictureView}) + @OnClick({R.id.removeToLocalView, R.id.selectWorkLayout, R.id.startScanView, R.id.takePictureView, R.id.signInButton}) @Override public void onClick(View v) { - if (v.getId() == R.id.removeToLocalView) { - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - if (location != null) { - mapView.setViewpointCenterAsync(new Point(location.getLongitude(), location.getLatitude())); + switch (v.getId()) { + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + mapView.setViewpointCenterAsync(new Point(location.getLongitude(), location.getLatitude())); + loadingDialog.dismiss(); + } } - } - }); - } else if (v.getId() == R.id.startScanView) { - QrConfig qrConfig = new QrConfig.Builder().setTitleText("扫一扫") //设置Title文字 - .setShowLight(true) //显示手电筒按钮 - .setShowTitle(true) //显示Title - .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 - .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 - .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 - .setDesText(null) //扫描框下文字 - .setShowDes(true) //是否显示扫描框下面文字 - .setPlaySound(true) //是否扫描成功后bi~的声音 - .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) - .setTitleTextColor(Color.WHITE) //设置Title文字颜色 - .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 - .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 - .setShowVibrator(true) //是否震动提醒 - .create(); - QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { - @Override - public void onScanSuccess(ScanResult result) { - toiletIdView.setText(result.content); - } - }); - } else if (v.getId() == R.id.takePictureView) { - PictureSelector.create(this) - .openCamera(PictureMimeType.ofImage()) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) - .forResult(PictureConfig.REQUEST_CAMERA); + }, true); + break; + case R.id.selectWorkLayout: + new QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("请填写您此次工作的内容") + .addItem("日常保洁") + .addItem("自定义") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + showEditDialog(tag); + } + }).build().show(); + break; + case R.id.startScanView: + QrConfig qrConfig = new QrConfig.Builder().setTitleText("扫一扫") //设置Title文字 + .setShowLight(true) //显示手电筒按钮 + .setShowTitle(true) //显示Title + .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 + .setShowAlbum(false) //显示从相册选择按钮 + .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 + .setDesText(null) //扫描框下文字 + .setShowDes(true) //是否显示扫描框下面文字 + .setPlaySound(true) //是否扫描成功后bi~的声音 + .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) + .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleTextColor(Color.WHITE) //设置Title文字颜色 + .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 + .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 + .setShowVibrator(true) //是否震动提醒 + .create(); + QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { + @Override + public void onScanSuccess(ScanResult result) { + toiletIdView.setText(result.content); + } + }); + break; + case R.id.takePictureView: + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + break; + case R.id.signInButton: + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + String toiletId = toiletIdView.getText().toString(); + if (TextUtils.isEmpty(toiletId)) { + ToastHelper.showToast("公厕标识不能为空", ToastHelper.WARING); + return; + } + + double longitude = location.getLongitude(); + double latitude = location.getLatitude(); + + String cleanTime = TimeOrDateUtil.timestampToDate(System.currentTimeMillis()); + cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), + String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, + StringHelper.filterString(workContentView.getText().toString())); + } else { + ToastHelper.showToast("定位失败,无法签到", ToastHelper.WARING); + } + } + }, true); + break; + } + } + + private void showEditDialog(String tag) { + if (tag.equals("自定义")) { + QMUIDialog.EditTextDialogBuilder builder = new QMUIDialog.EditTextDialogBuilder(context); + builder.setTitle("自定义工作内容") + .setPlaceholder("请输入您此次的工作内容") + .setInputType(InputType.TYPE_CLASS_TEXT) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + String inputStr = builder.getEditText().getText().toString(); + if (!TextUtils.isEmpty(inputStr)) { + workContentView.setText(inputStr); + dialog.dismiss(); + } else { + ToastHelper.showToast("自定义工作内容不能为空", ToastHelper.WARING); + } + } + }); + builder.create().show(); + } else { + workContentView.setText(tag); } } @@ -245,14 +335,18 @@ this.imagePath = url; String realPath = StringHelper.appendCompleteURL(url); - Glide.with(context) - .load(realPath) - .apply(new RequestOptions().error(R.drawable.ic_load_error)) - .into(pictureView); + ArrayList urls = new ArrayList<>(); + urls.add(realPath); + + Glide.with(context).load(realPath) + .apply(new RequestOptions().error(R.drawable.ic_load_error)).into(pictureView); pictureView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - + Intent intent = new Intent(context, BigImageActivity.class); + intent.putExtra("index", 0); + intent.putStringArrayListExtra("images", urls); + startActivity(intent); } }); } @@ -269,10 +363,18 @@ } @Override + public void obtainCleanResult(ActionResultBean resultBean) { + Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); + } + + @Override protected void onDestroy() { super.onDestroy(); if (uploadImagePresenter != null) { uploadImagePresenter.disposeRetrofitRequest(); } + if (cleanToiletPresenter != null) { + cleanToiletPresenter.disposeRetrofitRequest(); + } } } 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 2a855ba..2ae9aa6 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 @@ -96,6 +96,7 @@ StringHelper.saveUserPhone(data.getPhone()); StringHelper.saveUserDept(data.getDeptName()); StringHelper.saveUserDeptId(data.getDeptId()); + StringHelper.saveUserId(data.getId()); } } 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 3ee2612..9f864db 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -14,6 +14,8 @@ Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CALL_PHONE, Manifest.permission.READ_PHONE_STATE}; + public static final String[] CASE_PAGE_TITLES = {"待办案卷", "已办案卷"}; + public static final String[] CHART_PAGE_TITLES = {"表格", "饼状图"}; public static final List ANALYSIS_ICONS = Arrays.asList( R.drawable.ic_wtly, R.drawable.ic_ajzt, R.drawable.ic_gfwt, @@ -30,8 +32,6 @@ Color.rgb(216, 248, 183), Color.rgb(129, 178, 20), Color.rgb(120, 104, 230)}; - public static final String[] CASE_PAGE_TITLES = {"待办案卷", "已办案卷"}; - public static final String[] CHART_PAGE_TITLES = {"表格", "饼状图"}; public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index 2fe93d1..947535e 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -26,34 +26,39 @@ /** * 获取当前定位 */ - public static void obtainCurrentLocation(Context context, ILocationListener listener) { + public static void obtainCurrentLocation(Context context, ILocationListener listener, boolean isOnce) { if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } LocationManager mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); - //位置变化时更新位置 - mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30 * 1000, 10, new LocationListener() { - @Override - public void onLocationChanged(@NotNull Location location) { - listener.onLocationGet(location); - } + if (isOnce) { + Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); + listener.onLocationGet(location); + } else { + //位置变化时更新位置 + mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30 * 1000, 10, new LocationListener() { + @Override + public void onLocationChanged(@NotNull Location location) { + listener.onLocationGet(location); + } - @Override - public void onStatusChanged(String provider, int status, Bundle extras) { + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { - } + } - @Override - public void onProviderEnabled(@NotNull String provider) { + @Override + public void onProviderEnabled(@NotNull String provider) { - } + } - @Override - public void onProviderDisabled(@NotNull String provider) { + @Override + public void onProviderDisabled(@NotNull String provider) { - } - }); + } + }); + } } /** 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 1194333..254c847 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -21,6 +21,14 @@ return (String) SaveKeyValues.getValue("userAccount", ""); } + public static void saveUserId(String userId) { + SaveKeyValues.putValue("userId", userId); + } + + public static String getUserId() { + return (String) SaveKeyValues.getValue("userId", ""); + } + public static void saveUserName(String name) { SaveKeyValues.putValue("userName", name); } 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 ad97454..bbf2de9 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 @@ -440,4 +440,20 @@ @POST("/userPush/register") Observable registerPush(@Header("token") String token, @Field("clientId") String clientId); + + /** + * 公厕打扫签到 + *

+ * http://111.198.10.15:11409/toiletClean/add + */ + @FormUrlEncoded + @POST("/toiletClean/add") + Observable cleanToilet(@Header("token") String token, + @Field("toiletId") String toiletId, + @Field("userId") String userId, + @Field("lng") String lng, + @Field("lat") String lat, + @Field("cleanTime") String cleanTime, + @Field("photo") String photo, + @Field("workContent") String workContent); } 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 fb128b7..4f187c9 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 @@ -501,4 +501,17 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.registerPush(AuthenticationHelper.getToken(), clientId); } + + /** + * 公厕打扫签到 + */ + public static Observable getCleanToiletResult(String toiletId, String userId, + String lng, String lat, + String cleanTime, String photo, + String workContent) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.cleanToilet(AuthenticationHelper.getToken(), toiletId, userId, lng, lat, cleanTime, + photo, workContent); + } } diff --git a/app/src/main/res/layout/activity_toilet.xml b/app/src/main/res/layout/activity_toilet.xml index 7386088..1319356 100644 --- a/app/src/main/res/layout/activity_toilet.xml +++ b/app/src/main/res/layout/activity_toilet.xml @@ -57,54 +57,75 @@ android:layout_weight="2" android:paddingHorizontal="@dimen/padding_10dp"> - + android:orientation="vertical"> - + - - + android:layout_centerVertical="true" + android:layout_gravity="center_vertical" + android:layout_marginEnd="@dimen/margin_10dp" + android:layout_toStartOf="@id/i" + android:layout_toEndOf="@id/t" + android:textSize="@dimen/textFontSize" /> - + + + + - + - + + android:layout_width="120dp" + android:layout_height="120dp" + android:layout_marginEnd="@dimen/margin_10dp" + android:layout_toEndOf="@id/ttt" /> - - + + + + android:layout_below="@id/l">