diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java new file mode 100644 index 0000000..b7778b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -0,0 +1,166 @@ +package com.casic.dcms.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; + +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.utils.callback.ICompressListener; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.io.File; +import java.io.FileOutputStream; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; + +public class ImageHelper { + /** + * 绘制文字到右下角并压缩图片 + */ + public static void drawTextToRightBottom(Context context, final Bitmap bitmap, String name, String date, + String time, IWaterMarkAddListener markAddListener) { + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + //初始化画笔 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(Color.RED); + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + paint.setTextSize(QMUIDisplayHelper.sp2px(context, 50)); + Rect nameBounds = new Rect(); + paint.getTextBounds(name, 0, name.length(), nameBounds); + Rect dateBounds = new Rect(); + paint.getTextBounds(date, 0, date.length(), dateBounds); + Rect timeBounds = new Rect(); + paint.getTextBounds(time, 0, time.length(), timeBounds); + + //添加水印 + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + if (bitmapConfig == null) { + bitmapConfig = Bitmap.Config.RGB_565; + } + Bitmap copyBitmap = bitmap.copy(bitmapConfig, true); + + Canvas canvas = new Canvas(copyBitmap); + final int bitmapWidth = copyBitmap.getWidth(); + final int bitmapHeight = copyBitmap.getHeight(); + final int padding = QMUIDisplayHelper.dp2px(context, 20);//两行水印间的间距 + final int paddingRight = QMUIDisplayHelper.dp2px(context, 20); + final int paddingBottom = QMUIDisplayHelper.dp2px(context, 20); + //有几行就写几行 + canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, + bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), paint); + canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, + bitmapHeight - (timeBounds.height() + padding + paddingBottom), paint); + canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, + bitmapHeight - paddingBottom, paint); + + //将带有水印的图片保存 + File file = FileUtils.getWaterImageFile(); + try { + FileOutputStream fos = new FileOutputStream(file); + copyBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + subscriber.onNext(file); + } + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(File file) { + //压缩图片 + Luban.with(context).load(file.getPath()).ignoreBy(100) + .setTargetDir(FileUtils.getImageCompressPath()) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + markAddListener.onSuccess(file); + } else { + markAddListener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + markAddListener.onError(e); + } + }).launch(); + } + }); + } + + /** + * 压缩图片 + */ + public static void compressImage(String imagePath, String targetDir, ICompressListener listener) { + Luban.with(BaseApplication.getInstance()) + .load(imagePath) + .ignoreBy(100) + .setTargetDir(targetDir) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + listener.onSuccess(file); + } else { + listener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + listener.onError(e); + } + }).launch(); + } +} diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java new file mode 100644 index 0000000..b7778b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -0,0 +1,166 @@ +package com.casic.dcms.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; + +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.utils.callback.ICompressListener; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.io.File; +import java.io.FileOutputStream; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; + +public class ImageHelper { + /** + * 绘制文字到右下角并压缩图片 + */ + public static void drawTextToRightBottom(Context context, final Bitmap bitmap, String name, String date, + String time, IWaterMarkAddListener markAddListener) { + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + //初始化画笔 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(Color.RED); + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + paint.setTextSize(QMUIDisplayHelper.sp2px(context, 50)); + Rect nameBounds = new Rect(); + paint.getTextBounds(name, 0, name.length(), nameBounds); + Rect dateBounds = new Rect(); + paint.getTextBounds(date, 0, date.length(), dateBounds); + Rect timeBounds = new Rect(); + paint.getTextBounds(time, 0, time.length(), timeBounds); + + //添加水印 + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + if (bitmapConfig == null) { + bitmapConfig = Bitmap.Config.RGB_565; + } + Bitmap copyBitmap = bitmap.copy(bitmapConfig, true); + + Canvas canvas = new Canvas(copyBitmap); + final int bitmapWidth = copyBitmap.getWidth(); + final int bitmapHeight = copyBitmap.getHeight(); + final int padding = QMUIDisplayHelper.dp2px(context, 20);//两行水印间的间距 + final int paddingRight = QMUIDisplayHelper.dp2px(context, 20); + final int paddingBottom = QMUIDisplayHelper.dp2px(context, 20); + //有几行就写几行 + canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, + bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), paint); + canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, + bitmapHeight - (timeBounds.height() + padding + paddingBottom), paint); + canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, + bitmapHeight - paddingBottom, paint); + + //将带有水印的图片保存 + File file = FileUtils.getWaterImageFile(); + try { + FileOutputStream fos = new FileOutputStream(file); + copyBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + subscriber.onNext(file); + } + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(File file) { + //压缩图片 + Luban.with(context).load(file.getPath()).ignoreBy(100) + .setTargetDir(FileUtils.getImageCompressPath()) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + markAddListener.onSuccess(file); + } else { + markAddListener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + markAddListener.onError(e); + } + }).launch(); + } + }); + } + + /** + * 压缩图片 + */ + public static void compressImage(String imagePath, String targetDir, ICompressListener listener) { + Luban.with(BaseApplication.getInstance()) + .load(imagePath) + .ignoreBy(100) + .setTargetDir(targetDir) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + listener.onSuccess(file); + } else { + listener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + listener.onError(e); + } + }).launch(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 55a56a3..8872825 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -5,92 +5,22 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.Build; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.Log; import androidx.core.app.ActivityCompat; import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; -import com.casic.dcms.utils.callback.IDownloadListener; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import org.jetbrains.annotations.NotNull; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; - public class OtherUtils { private static final String TAG = "OtherUtils"; - /** - * 绘制文字到右下角 - */ - public static String drawTextToRightBottom(Context context, Bitmap bitmap, String name, String date, String time) { - //初始化画笔 - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(Color.RED); - paint.setDither(true); // 获取跟清晰的图像采样 - paint.setFilterBitmap(true);// 过滤一些 - paint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - Rect nameBounds = new Rect(); - paint.getTextBounds(name, 0, name.length(), nameBounds); - Rect dateBounds = new Rect(); - paint.getTextBounds(date, 0, date.length(), dateBounds); - Rect timeBounds = new Rect(); - paint.getTextBounds(time, 0, time.length(), timeBounds); - - //添加水印 - android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); - if (bitmapConfig == null) { - bitmapConfig = Bitmap.Config.RGB_565; - } - bitmap = bitmap.copy(bitmapConfig, true); - - Canvas canvas = new Canvas(bitmap); - final int bitmapWidth = bitmap.getWidth(); - final int bitmapHeight = bitmap.getHeight(); - final int paddingRight = QMUIDisplayHelper.dp2px(context, 10); - //有几行就写几行 - canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 55), paint); - canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 30), paint); - canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 10), paint); - - //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); - try { - FileOutputStream fos = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return file.getAbsolutePath(); - } - //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { Intent intent = new Intent(context, BigImageActivity.class); @@ -137,60 +67,4 @@ } return ""; } - - public static void downloadFile(String url, IDownloadListener listener) { - OkHttpClient okHttpClient = new OkHttpClient(); - Request request = new Request.Builder().get().url(url).build(); - okHttpClient.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - e.printStackTrace(); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - InputStream is = null; - byte[] buf = new byte[2048]; - int len; - FileOutputStream fos = null; - // 储存下载文件的目录 - String savePath = FileUtils.getDownloadFilePath(); - try { - ResponseBody body = response.body(); - if (body != null) { - is = body.byteStream(); - long total = body.contentLength(); - listener.onDownloadStart(total); - File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); - fos = new FileOutputStream(file); - long sum = 0; - while ((len = is.read(buf)) != -1) { - fos.write(buf, 0, len); - sum += len; - listener.onProgressChanged(sum); - } - fos.flush(); - listener.onDownloadEnd(file); - } else { - Log.d(TAG, "onResponse: body is null"); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (is != null) - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (fos != null) - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - } } diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java new file mode 100644 index 0000000..b7778b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -0,0 +1,166 @@ +package com.casic.dcms.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; + +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.utils.callback.ICompressListener; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.io.File; +import java.io.FileOutputStream; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; + +public class ImageHelper { + /** + * 绘制文字到右下角并压缩图片 + */ + public static void drawTextToRightBottom(Context context, final Bitmap bitmap, String name, String date, + String time, IWaterMarkAddListener markAddListener) { + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + //初始化画笔 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(Color.RED); + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + paint.setTextSize(QMUIDisplayHelper.sp2px(context, 50)); + Rect nameBounds = new Rect(); + paint.getTextBounds(name, 0, name.length(), nameBounds); + Rect dateBounds = new Rect(); + paint.getTextBounds(date, 0, date.length(), dateBounds); + Rect timeBounds = new Rect(); + paint.getTextBounds(time, 0, time.length(), timeBounds); + + //添加水印 + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + if (bitmapConfig == null) { + bitmapConfig = Bitmap.Config.RGB_565; + } + Bitmap copyBitmap = bitmap.copy(bitmapConfig, true); + + Canvas canvas = new Canvas(copyBitmap); + final int bitmapWidth = copyBitmap.getWidth(); + final int bitmapHeight = copyBitmap.getHeight(); + final int padding = QMUIDisplayHelper.dp2px(context, 20);//两行水印间的间距 + final int paddingRight = QMUIDisplayHelper.dp2px(context, 20); + final int paddingBottom = QMUIDisplayHelper.dp2px(context, 20); + //有几行就写几行 + canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, + bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), paint); + canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, + bitmapHeight - (timeBounds.height() + padding + paddingBottom), paint); + canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, + bitmapHeight - paddingBottom, paint); + + //将带有水印的图片保存 + File file = FileUtils.getWaterImageFile(); + try { + FileOutputStream fos = new FileOutputStream(file); + copyBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + subscriber.onNext(file); + } + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(File file) { + //压缩图片 + Luban.with(context).load(file.getPath()).ignoreBy(100) + .setTargetDir(FileUtils.getImageCompressPath()) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + markAddListener.onSuccess(file); + } else { + markAddListener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + markAddListener.onError(e); + } + }).launch(); + } + }); + } + + /** + * 压缩图片 + */ + public static void compressImage(String imagePath, String targetDir, ICompressListener listener) { + Luban.with(BaseApplication.getInstance()) + .load(imagePath) + .ignoreBy(100) + .setTargetDir(targetDir) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + listener.onSuccess(file); + } else { + listener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + listener.onError(e); + } + }).launch(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 55a56a3..8872825 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -5,92 +5,22 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.Build; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.Log; import androidx.core.app.ActivityCompat; import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; -import com.casic.dcms.utils.callback.IDownloadListener; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import org.jetbrains.annotations.NotNull; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; - public class OtherUtils { private static final String TAG = "OtherUtils"; - /** - * 绘制文字到右下角 - */ - public static String drawTextToRightBottom(Context context, Bitmap bitmap, String name, String date, String time) { - //初始化画笔 - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(Color.RED); - paint.setDither(true); // 获取跟清晰的图像采样 - paint.setFilterBitmap(true);// 过滤一些 - paint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - Rect nameBounds = new Rect(); - paint.getTextBounds(name, 0, name.length(), nameBounds); - Rect dateBounds = new Rect(); - paint.getTextBounds(date, 0, date.length(), dateBounds); - Rect timeBounds = new Rect(); - paint.getTextBounds(time, 0, time.length(), timeBounds); - - //添加水印 - android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); - if (bitmapConfig == null) { - bitmapConfig = Bitmap.Config.RGB_565; - } - bitmap = bitmap.copy(bitmapConfig, true); - - Canvas canvas = new Canvas(bitmap); - final int bitmapWidth = bitmap.getWidth(); - final int bitmapHeight = bitmap.getHeight(); - final int paddingRight = QMUIDisplayHelper.dp2px(context, 10); - //有几行就写几行 - canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 55), paint); - canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 30), paint); - canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 10), paint); - - //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); - try { - FileOutputStream fos = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return file.getAbsolutePath(); - } - //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { Intent intent = new Intent(context, BigImageActivity.class); @@ -137,60 +67,4 @@ } return ""; } - - public static void downloadFile(String url, IDownloadListener listener) { - OkHttpClient okHttpClient = new OkHttpClient(); - Request request = new Request.Builder().get().url(url).build(); - okHttpClient.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - e.printStackTrace(); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - InputStream is = null; - byte[] buf = new byte[2048]; - int len; - FileOutputStream fos = null; - // 储存下载文件的目录 - String savePath = FileUtils.getDownloadFilePath(); - try { - ResponseBody body = response.body(); - if (body != null) { - is = body.byteStream(); - long total = body.contentLength(); - listener.onDownloadStart(total); - File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); - fos = new FileOutputStream(file); - long sum = 0; - while ((len = is.read(buf)) != -1) { - fos.write(buf, 0, len); - sum += len; - listener.onProgressChanged(sum); - } - fos.flush(); - listener.onDownloadEnd(file); - } else { - Log.d(TAG, "onResponse: body is null"); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (is != null) - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (fos != null) - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 72ccfdb..1b390a7 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -12,27 +12,37 @@ **/ @SuppressLint("SimpleDateFormat") public class TimeOrDateUtil { - /** - * 时间戳转时间 - */ - public static String timestampToTime(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); - } + private static final String TAG = "TimeOrDateUtil"; + private static final SimpleDateFormat allDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); + private static final SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); /** - * 时间戳转时间 + * 时间戳转完整日期时间 */ - public static String timestampToTime(long mills) { - SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); - return millsFormat.format(mills); + public static String timestampToCompleteDate(long millSeconds) { + return allDateFormat.format(new Date(millSeconds)); } /** * 时间戳转日期 */ - public static String timestampToDate(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); + public static String timestampToDate(long millSeconds) { + return dateFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转时间 + */ + public static String timestampToTime(long millSeconds) { + return timeFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转分秒 + */ + public static String millsToTime(long millSeconds) { + return millsFormat.format(new Date(millSeconds)); } } diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java new file mode 100644 index 0000000..b7778b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -0,0 +1,166 @@ +package com.casic.dcms.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; + +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.utils.callback.ICompressListener; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.io.File; +import java.io.FileOutputStream; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; + +public class ImageHelper { + /** + * 绘制文字到右下角并压缩图片 + */ + public static void drawTextToRightBottom(Context context, final Bitmap bitmap, String name, String date, + String time, IWaterMarkAddListener markAddListener) { + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + //初始化画笔 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(Color.RED); + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + paint.setTextSize(QMUIDisplayHelper.sp2px(context, 50)); + Rect nameBounds = new Rect(); + paint.getTextBounds(name, 0, name.length(), nameBounds); + Rect dateBounds = new Rect(); + paint.getTextBounds(date, 0, date.length(), dateBounds); + Rect timeBounds = new Rect(); + paint.getTextBounds(time, 0, time.length(), timeBounds); + + //添加水印 + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + if (bitmapConfig == null) { + bitmapConfig = Bitmap.Config.RGB_565; + } + Bitmap copyBitmap = bitmap.copy(bitmapConfig, true); + + Canvas canvas = new Canvas(copyBitmap); + final int bitmapWidth = copyBitmap.getWidth(); + final int bitmapHeight = copyBitmap.getHeight(); + final int padding = QMUIDisplayHelper.dp2px(context, 20);//两行水印间的间距 + final int paddingRight = QMUIDisplayHelper.dp2px(context, 20); + final int paddingBottom = QMUIDisplayHelper.dp2px(context, 20); + //有几行就写几行 + canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, + bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), paint); + canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, + bitmapHeight - (timeBounds.height() + padding + paddingBottom), paint); + canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, + bitmapHeight - paddingBottom, paint); + + //将带有水印的图片保存 + File file = FileUtils.getWaterImageFile(); + try { + FileOutputStream fos = new FileOutputStream(file); + copyBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + subscriber.onNext(file); + } + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(File file) { + //压缩图片 + Luban.with(context).load(file.getPath()).ignoreBy(100) + .setTargetDir(FileUtils.getImageCompressPath()) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + markAddListener.onSuccess(file); + } else { + markAddListener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + markAddListener.onError(e); + } + }).launch(); + } + }); + } + + /** + * 压缩图片 + */ + public static void compressImage(String imagePath, String targetDir, ICompressListener listener) { + Luban.with(BaseApplication.getInstance()) + .load(imagePath) + .ignoreBy(100) + .setTargetDir(targetDir) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + listener.onSuccess(file); + } else { + listener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + listener.onError(e); + } + }).launch(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 55a56a3..8872825 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -5,92 +5,22 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.Build; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.Log; import androidx.core.app.ActivityCompat; import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; -import com.casic.dcms.utils.callback.IDownloadListener; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import org.jetbrains.annotations.NotNull; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; - public class OtherUtils { private static final String TAG = "OtherUtils"; - /** - * 绘制文字到右下角 - */ - public static String drawTextToRightBottom(Context context, Bitmap bitmap, String name, String date, String time) { - //初始化画笔 - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(Color.RED); - paint.setDither(true); // 获取跟清晰的图像采样 - paint.setFilterBitmap(true);// 过滤一些 - paint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - Rect nameBounds = new Rect(); - paint.getTextBounds(name, 0, name.length(), nameBounds); - Rect dateBounds = new Rect(); - paint.getTextBounds(date, 0, date.length(), dateBounds); - Rect timeBounds = new Rect(); - paint.getTextBounds(time, 0, time.length(), timeBounds); - - //添加水印 - android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); - if (bitmapConfig == null) { - bitmapConfig = Bitmap.Config.RGB_565; - } - bitmap = bitmap.copy(bitmapConfig, true); - - Canvas canvas = new Canvas(bitmap); - final int bitmapWidth = bitmap.getWidth(); - final int bitmapHeight = bitmap.getHeight(); - final int paddingRight = QMUIDisplayHelper.dp2px(context, 10); - //有几行就写几行 - canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 55), paint); - canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 30), paint); - canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 10), paint); - - //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); - try { - FileOutputStream fos = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return file.getAbsolutePath(); - } - //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { Intent intent = new Intent(context, BigImageActivity.class); @@ -137,60 +67,4 @@ } return ""; } - - public static void downloadFile(String url, IDownloadListener listener) { - OkHttpClient okHttpClient = new OkHttpClient(); - Request request = new Request.Builder().get().url(url).build(); - okHttpClient.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - e.printStackTrace(); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - InputStream is = null; - byte[] buf = new byte[2048]; - int len; - FileOutputStream fos = null; - // 储存下载文件的目录 - String savePath = FileUtils.getDownloadFilePath(); - try { - ResponseBody body = response.body(); - if (body != null) { - is = body.byteStream(); - long total = body.contentLength(); - listener.onDownloadStart(total); - File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); - fos = new FileOutputStream(file); - long sum = 0; - while ((len = is.read(buf)) != -1) { - fos.write(buf, 0, len); - sum += len; - listener.onProgressChanged(sum); - } - fos.flush(); - listener.onDownloadEnd(file); - } else { - Log.d(TAG, "onResponse: body is null"); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (is != null) - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (fos != null) - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 72ccfdb..1b390a7 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -12,27 +12,37 @@ **/ @SuppressLint("SimpleDateFormat") public class TimeOrDateUtil { - /** - * 时间戳转时间 - */ - public static String timestampToTime(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); - } + private static final String TAG = "TimeOrDateUtil"; + private static final SimpleDateFormat allDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); + private static final SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); /** - * 时间戳转时间 + * 时间戳转完整日期时间 */ - public static String timestampToTime(long mills) { - SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); - return millsFormat.format(mills); + public static String timestampToCompleteDate(long millSeconds) { + return allDateFormat.format(new Date(millSeconds)); } /** * 时间戳转日期 */ - public static String timestampToDate(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); + public static String timestampToDate(long millSeconds) { + return dateFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转时间 + */ + public static String timestampToTime(long millSeconds) { + return timeFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转分秒 + */ + public static String millsToTime(long millSeconds) { + return millsFormat.format(new Date(millSeconds)); } } diff --git a/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java new file mode 100644 index 0000000..2f22e31 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java @@ -0,0 +1,15 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface ICompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + void onSuccess(File file); + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + void onError(Throwable e); +} diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java new file mode 100644 index 0000000..b7778b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -0,0 +1,166 @@ +package com.casic.dcms.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; + +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.utils.callback.ICompressListener; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.io.File; +import java.io.FileOutputStream; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; + +public class ImageHelper { + /** + * 绘制文字到右下角并压缩图片 + */ + public static void drawTextToRightBottom(Context context, final Bitmap bitmap, String name, String date, + String time, IWaterMarkAddListener markAddListener) { + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + //初始化画笔 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(Color.RED); + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + paint.setTextSize(QMUIDisplayHelper.sp2px(context, 50)); + Rect nameBounds = new Rect(); + paint.getTextBounds(name, 0, name.length(), nameBounds); + Rect dateBounds = new Rect(); + paint.getTextBounds(date, 0, date.length(), dateBounds); + Rect timeBounds = new Rect(); + paint.getTextBounds(time, 0, time.length(), timeBounds); + + //添加水印 + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + if (bitmapConfig == null) { + bitmapConfig = Bitmap.Config.RGB_565; + } + Bitmap copyBitmap = bitmap.copy(bitmapConfig, true); + + Canvas canvas = new Canvas(copyBitmap); + final int bitmapWidth = copyBitmap.getWidth(); + final int bitmapHeight = copyBitmap.getHeight(); + final int padding = QMUIDisplayHelper.dp2px(context, 20);//两行水印间的间距 + final int paddingRight = QMUIDisplayHelper.dp2px(context, 20); + final int paddingBottom = QMUIDisplayHelper.dp2px(context, 20); + //有几行就写几行 + canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, + bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), paint); + canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, + bitmapHeight - (timeBounds.height() + padding + paddingBottom), paint); + canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, + bitmapHeight - paddingBottom, paint); + + //将带有水印的图片保存 + File file = FileUtils.getWaterImageFile(); + try { + FileOutputStream fos = new FileOutputStream(file); + copyBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + subscriber.onNext(file); + } + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(File file) { + //压缩图片 + Luban.with(context).load(file.getPath()).ignoreBy(100) + .setTargetDir(FileUtils.getImageCompressPath()) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + markAddListener.onSuccess(file); + } else { + markAddListener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + markAddListener.onError(e); + } + }).launch(); + } + }); + } + + /** + * 压缩图片 + */ + public static void compressImage(String imagePath, String targetDir, ICompressListener listener) { + Luban.with(BaseApplication.getInstance()) + .load(imagePath) + .ignoreBy(100) + .setTargetDir(targetDir) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + listener.onSuccess(file); + } else { + listener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + listener.onError(e); + } + }).launch(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 55a56a3..8872825 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -5,92 +5,22 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.Build; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.Log; import androidx.core.app.ActivityCompat; import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; -import com.casic.dcms.utils.callback.IDownloadListener; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import org.jetbrains.annotations.NotNull; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; - public class OtherUtils { private static final String TAG = "OtherUtils"; - /** - * 绘制文字到右下角 - */ - public static String drawTextToRightBottom(Context context, Bitmap bitmap, String name, String date, String time) { - //初始化画笔 - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(Color.RED); - paint.setDither(true); // 获取跟清晰的图像采样 - paint.setFilterBitmap(true);// 过滤一些 - paint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - Rect nameBounds = new Rect(); - paint.getTextBounds(name, 0, name.length(), nameBounds); - Rect dateBounds = new Rect(); - paint.getTextBounds(date, 0, date.length(), dateBounds); - Rect timeBounds = new Rect(); - paint.getTextBounds(time, 0, time.length(), timeBounds); - - //添加水印 - android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); - if (bitmapConfig == null) { - bitmapConfig = Bitmap.Config.RGB_565; - } - bitmap = bitmap.copy(bitmapConfig, true); - - Canvas canvas = new Canvas(bitmap); - final int bitmapWidth = bitmap.getWidth(); - final int bitmapHeight = bitmap.getHeight(); - final int paddingRight = QMUIDisplayHelper.dp2px(context, 10); - //有几行就写几行 - canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 55), paint); - canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 30), paint); - canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 10), paint); - - //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); - try { - FileOutputStream fos = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return file.getAbsolutePath(); - } - //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { Intent intent = new Intent(context, BigImageActivity.class); @@ -137,60 +67,4 @@ } return ""; } - - public static void downloadFile(String url, IDownloadListener listener) { - OkHttpClient okHttpClient = new OkHttpClient(); - Request request = new Request.Builder().get().url(url).build(); - okHttpClient.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - e.printStackTrace(); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - InputStream is = null; - byte[] buf = new byte[2048]; - int len; - FileOutputStream fos = null; - // 储存下载文件的目录 - String savePath = FileUtils.getDownloadFilePath(); - try { - ResponseBody body = response.body(); - if (body != null) { - is = body.byteStream(); - long total = body.contentLength(); - listener.onDownloadStart(total); - File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); - fos = new FileOutputStream(file); - long sum = 0; - while ((len = is.read(buf)) != -1) { - fos.write(buf, 0, len); - sum += len; - listener.onProgressChanged(sum); - } - fos.flush(); - listener.onDownloadEnd(file); - } else { - Log.d(TAG, "onResponse: body is null"); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (is != null) - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (fos != null) - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 72ccfdb..1b390a7 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -12,27 +12,37 @@ **/ @SuppressLint("SimpleDateFormat") public class TimeOrDateUtil { - /** - * 时间戳转时间 - */ - public static String timestampToTime(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); - } + private static final String TAG = "TimeOrDateUtil"; + private static final SimpleDateFormat allDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); + private static final SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); /** - * 时间戳转时间 + * 时间戳转完整日期时间 */ - public static String timestampToTime(long mills) { - SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); - return millsFormat.format(mills); + public static String timestampToCompleteDate(long millSeconds) { + return allDateFormat.format(new Date(millSeconds)); } /** * 时间戳转日期 */ - public static String timestampToDate(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); + public static String timestampToDate(long millSeconds) { + return dateFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转时间 + */ + public static String timestampToTime(long millSeconds) { + return timeFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转分秒 + */ + public static String millsToTime(long millSeconds) { + return millsFormat.format(new Date(millSeconds)); } } diff --git a/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java new file mode 100644 index 0000000..2f22e31 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java @@ -0,0 +1,15 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface ICompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + void onSuccess(File file); + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + void onError(Throwable e); +} diff --git a/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java new file mode 100644 index 0000000..979a7f1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java @@ -0,0 +1,9 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface IWaterMarkAddListener { + void onSuccess(File file); + + void onError(Throwable e); +} diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java new file mode 100644 index 0000000..b7778b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -0,0 +1,166 @@ +package com.casic.dcms.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; + +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.utils.callback.ICompressListener; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.io.File; +import java.io.FileOutputStream; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; + +public class ImageHelper { + /** + * 绘制文字到右下角并压缩图片 + */ + public static void drawTextToRightBottom(Context context, final Bitmap bitmap, String name, String date, + String time, IWaterMarkAddListener markAddListener) { + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + //初始化画笔 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(Color.RED); + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + paint.setTextSize(QMUIDisplayHelper.sp2px(context, 50)); + Rect nameBounds = new Rect(); + paint.getTextBounds(name, 0, name.length(), nameBounds); + Rect dateBounds = new Rect(); + paint.getTextBounds(date, 0, date.length(), dateBounds); + Rect timeBounds = new Rect(); + paint.getTextBounds(time, 0, time.length(), timeBounds); + + //添加水印 + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + if (bitmapConfig == null) { + bitmapConfig = Bitmap.Config.RGB_565; + } + Bitmap copyBitmap = bitmap.copy(bitmapConfig, true); + + Canvas canvas = new Canvas(copyBitmap); + final int bitmapWidth = copyBitmap.getWidth(); + final int bitmapHeight = copyBitmap.getHeight(); + final int padding = QMUIDisplayHelper.dp2px(context, 20);//两行水印间的间距 + final int paddingRight = QMUIDisplayHelper.dp2px(context, 20); + final int paddingBottom = QMUIDisplayHelper.dp2px(context, 20); + //有几行就写几行 + canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, + bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), paint); + canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, + bitmapHeight - (timeBounds.height() + padding + paddingBottom), paint); + canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, + bitmapHeight - paddingBottom, paint); + + //将带有水印的图片保存 + File file = FileUtils.getWaterImageFile(); + try { + FileOutputStream fos = new FileOutputStream(file); + copyBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + subscriber.onNext(file); + } + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(File file) { + //压缩图片 + Luban.with(context).load(file.getPath()).ignoreBy(100) + .setTargetDir(FileUtils.getImageCompressPath()) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + markAddListener.onSuccess(file); + } else { + markAddListener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + markAddListener.onError(e); + } + }).launch(); + } + }); + } + + /** + * 压缩图片 + */ + public static void compressImage(String imagePath, String targetDir, ICompressListener listener) { + Luban.with(BaseApplication.getInstance()) + .load(imagePath) + .ignoreBy(100) + .setTargetDir(targetDir) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + listener.onSuccess(file); + } else { + listener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + listener.onError(e); + } + }).launch(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 55a56a3..8872825 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -5,92 +5,22 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.Build; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.Log; import androidx.core.app.ActivityCompat; import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; -import com.casic.dcms.utils.callback.IDownloadListener; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import org.jetbrains.annotations.NotNull; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; - public class OtherUtils { private static final String TAG = "OtherUtils"; - /** - * 绘制文字到右下角 - */ - public static String drawTextToRightBottom(Context context, Bitmap bitmap, String name, String date, String time) { - //初始化画笔 - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(Color.RED); - paint.setDither(true); // 获取跟清晰的图像采样 - paint.setFilterBitmap(true);// 过滤一些 - paint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - Rect nameBounds = new Rect(); - paint.getTextBounds(name, 0, name.length(), nameBounds); - Rect dateBounds = new Rect(); - paint.getTextBounds(date, 0, date.length(), dateBounds); - Rect timeBounds = new Rect(); - paint.getTextBounds(time, 0, time.length(), timeBounds); - - //添加水印 - android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); - if (bitmapConfig == null) { - bitmapConfig = Bitmap.Config.RGB_565; - } - bitmap = bitmap.copy(bitmapConfig, true); - - Canvas canvas = new Canvas(bitmap); - final int bitmapWidth = bitmap.getWidth(); - final int bitmapHeight = bitmap.getHeight(); - final int paddingRight = QMUIDisplayHelper.dp2px(context, 10); - //有几行就写几行 - canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 55), paint); - canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 30), paint); - canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 10), paint); - - //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); - try { - FileOutputStream fos = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return file.getAbsolutePath(); - } - //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { Intent intent = new Intent(context, BigImageActivity.class); @@ -137,60 +67,4 @@ } return ""; } - - public static void downloadFile(String url, IDownloadListener listener) { - OkHttpClient okHttpClient = new OkHttpClient(); - Request request = new Request.Builder().get().url(url).build(); - okHttpClient.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - e.printStackTrace(); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - InputStream is = null; - byte[] buf = new byte[2048]; - int len; - FileOutputStream fos = null; - // 储存下载文件的目录 - String savePath = FileUtils.getDownloadFilePath(); - try { - ResponseBody body = response.body(); - if (body != null) { - is = body.byteStream(); - long total = body.contentLength(); - listener.onDownloadStart(total); - File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); - fos = new FileOutputStream(file); - long sum = 0; - while ((len = is.read(buf)) != -1) { - fos.write(buf, 0, len); - sum += len; - listener.onProgressChanged(sum); - } - fos.flush(); - listener.onDownloadEnd(file); - } else { - Log.d(TAG, "onResponse: body is null"); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (is != null) - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (fos != null) - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 72ccfdb..1b390a7 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -12,27 +12,37 @@ **/ @SuppressLint("SimpleDateFormat") public class TimeOrDateUtil { - /** - * 时间戳转时间 - */ - public static String timestampToTime(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); - } + private static final String TAG = "TimeOrDateUtil"; + private static final SimpleDateFormat allDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); + private static final SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); /** - * 时间戳转时间 + * 时间戳转完整日期时间 */ - public static String timestampToTime(long mills) { - SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); - return millsFormat.format(mills); + public static String timestampToCompleteDate(long millSeconds) { + return allDateFormat.format(new Date(millSeconds)); } /** * 时间戳转日期 */ - public static String timestampToDate(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); + public static String timestampToDate(long millSeconds) { + return dateFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转时间 + */ + public static String timestampToTime(long millSeconds) { + return timeFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转分秒 + */ + public static String millsToTime(long millSeconds) { + return millsFormat.format(new Date(millSeconds)); } } diff --git a/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java new file mode 100644 index 0000000..2f22e31 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java @@ -0,0 +1,15 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface ICompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + void onSuccess(File file); + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + void onError(Throwable e); +} diff --git a/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java new file mode 100644 index 0000000..979a7f1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java @@ -0,0 +1,9 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface IWaterMarkAddListener { + void onSuccess(File file); + + void onError(Throwable e); +} 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 04d396f..6e7aae1 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 @@ -14,6 +14,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -444,10 +445,10 @@ /** * 公厕打扫签到 *

- * http://111.198.10.15:11409/toiletClean/add + * http://111.198.10.15:11409/sanitation/toiletClean/add */ @FormUrlEncoded - @POST("/toiletClean/add") + @POST("/sanitation/toiletClean/add") Observable cleanToilet(@Header("token") String token, @Field("toiletId") String toiletId, @Field("userId") String userId, @@ -456,4 +457,16 @@ @Field("cleanTime") String cleanTime, @Field("photo") String photo, @Field("workContent") String workContent); + + /** + * 公厕打扫记录 + *

+ * http://111.198.10.15:11409/sanitation/toiletClean/listPage + */ + @GET("/sanitation/toiletClean/listPage") + Observable obtainToiletCleanRecord(@Header("token") String token, + @Query("userId") String userId, + @Query("keywords") String keywords, + @Query("beginDate") String beginDate, + @Query("endDate") String endDate); } diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java new file mode 100644 index 0000000..b7778b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -0,0 +1,166 @@ +package com.casic.dcms.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; + +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.utils.callback.ICompressListener; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.io.File; +import java.io.FileOutputStream; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; + +public class ImageHelper { + /** + * 绘制文字到右下角并压缩图片 + */ + public static void drawTextToRightBottom(Context context, final Bitmap bitmap, String name, String date, + String time, IWaterMarkAddListener markAddListener) { + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + //初始化画笔 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(Color.RED); + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + paint.setTextSize(QMUIDisplayHelper.sp2px(context, 50)); + Rect nameBounds = new Rect(); + paint.getTextBounds(name, 0, name.length(), nameBounds); + Rect dateBounds = new Rect(); + paint.getTextBounds(date, 0, date.length(), dateBounds); + Rect timeBounds = new Rect(); + paint.getTextBounds(time, 0, time.length(), timeBounds); + + //添加水印 + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + if (bitmapConfig == null) { + bitmapConfig = Bitmap.Config.RGB_565; + } + Bitmap copyBitmap = bitmap.copy(bitmapConfig, true); + + Canvas canvas = new Canvas(copyBitmap); + final int bitmapWidth = copyBitmap.getWidth(); + final int bitmapHeight = copyBitmap.getHeight(); + final int padding = QMUIDisplayHelper.dp2px(context, 20);//两行水印间的间距 + final int paddingRight = QMUIDisplayHelper.dp2px(context, 20); + final int paddingBottom = QMUIDisplayHelper.dp2px(context, 20); + //有几行就写几行 + canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, + bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), paint); + canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, + bitmapHeight - (timeBounds.height() + padding + paddingBottom), paint); + canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, + bitmapHeight - paddingBottom, paint); + + //将带有水印的图片保存 + File file = FileUtils.getWaterImageFile(); + try { + FileOutputStream fos = new FileOutputStream(file); + copyBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + subscriber.onNext(file); + } + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(File file) { + //压缩图片 + Luban.with(context).load(file.getPath()).ignoreBy(100) + .setTargetDir(FileUtils.getImageCompressPath()) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + markAddListener.onSuccess(file); + } else { + markAddListener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + markAddListener.onError(e); + } + }).launch(); + } + }); + } + + /** + * 压缩图片 + */ + public static void compressImage(String imagePath, String targetDir, ICompressListener listener) { + Luban.with(BaseApplication.getInstance()) + .load(imagePath) + .ignoreBy(100) + .setTargetDir(targetDir) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + listener.onSuccess(file); + } else { + listener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + listener.onError(e); + } + }).launch(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 55a56a3..8872825 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -5,92 +5,22 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.Build; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.Log; import androidx.core.app.ActivityCompat; import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; -import com.casic.dcms.utils.callback.IDownloadListener; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import org.jetbrains.annotations.NotNull; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; - public class OtherUtils { private static final String TAG = "OtherUtils"; - /** - * 绘制文字到右下角 - */ - public static String drawTextToRightBottom(Context context, Bitmap bitmap, String name, String date, String time) { - //初始化画笔 - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(Color.RED); - paint.setDither(true); // 获取跟清晰的图像采样 - paint.setFilterBitmap(true);// 过滤一些 - paint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - Rect nameBounds = new Rect(); - paint.getTextBounds(name, 0, name.length(), nameBounds); - Rect dateBounds = new Rect(); - paint.getTextBounds(date, 0, date.length(), dateBounds); - Rect timeBounds = new Rect(); - paint.getTextBounds(time, 0, time.length(), timeBounds); - - //添加水印 - android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); - if (bitmapConfig == null) { - bitmapConfig = Bitmap.Config.RGB_565; - } - bitmap = bitmap.copy(bitmapConfig, true); - - Canvas canvas = new Canvas(bitmap); - final int bitmapWidth = bitmap.getWidth(); - final int bitmapHeight = bitmap.getHeight(); - final int paddingRight = QMUIDisplayHelper.dp2px(context, 10); - //有几行就写几行 - canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 55), paint); - canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 30), paint); - canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 10), paint); - - //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); - try { - FileOutputStream fos = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return file.getAbsolutePath(); - } - //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { Intent intent = new Intent(context, BigImageActivity.class); @@ -137,60 +67,4 @@ } return ""; } - - public static void downloadFile(String url, IDownloadListener listener) { - OkHttpClient okHttpClient = new OkHttpClient(); - Request request = new Request.Builder().get().url(url).build(); - okHttpClient.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - e.printStackTrace(); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - InputStream is = null; - byte[] buf = new byte[2048]; - int len; - FileOutputStream fos = null; - // 储存下载文件的目录 - String savePath = FileUtils.getDownloadFilePath(); - try { - ResponseBody body = response.body(); - if (body != null) { - is = body.byteStream(); - long total = body.contentLength(); - listener.onDownloadStart(total); - File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); - fos = new FileOutputStream(file); - long sum = 0; - while ((len = is.read(buf)) != -1) { - fos.write(buf, 0, len); - sum += len; - listener.onProgressChanged(sum); - } - fos.flush(); - listener.onDownloadEnd(file); - } else { - Log.d(TAG, "onResponse: body is null"); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (is != null) - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (fos != null) - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 72ccfdb..1b390a7 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -12,27 +12,37 @@ **/ @SuppressLint("SimpleDateFormat") public class TimeOrDateUtil { - /** - * 时间戳转时间 - */ - public static String timestampToTime(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); - } + private static final String TAG = "TimeOrDateUtil"; + private static final SimpleDateFormat allDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); + private static final SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); /** - * 时间戳转时间 + * 时间戳转完整日期时间 */ - public static String timestampToTime(long mills) { - SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); - return millsFormat.format(mills); + public static String timestampToCompleteDate(long millSeconds) { + return allDateFormat.format(new Date(millSeconds)); } /** * 时间戳转日期 */ - public static String timestampToDate(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); + public static String timestampToDate(long millSeconds) { + return dateFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转时间 + */ + public static String timestampToTime(long millSeconds) { + return timeFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转分秒 + */ + public static String millsToTime(long millSeconds) { + return millsFormat.format(new Date(millSeconds)); } } diff --git a/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java new file mode 100644 index 0000000..2f22e31 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java @@ -0,0 +1,15 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface ICompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + void onSuccess(File file); + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + void onError(Throwable e); +} diff --git a/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java new file mode 100644 index 0000000..979a7f1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java @@ -0,0 +1,9 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface IWaterMarkAddListener { + void onSuccess(File file); + + void onError(Throwable e); +} 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 04d396f..6e7aae1 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 @@ -14,6 +14,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -444,10 +445,10 @@ /** * 公厕打扫签到 *

- * http://111.198.10.15:11409/toiletClean/add + * http://111.198.10.15:11409/sanitation/toiletClean/add */ @FormUrlEncoded - @POST("/toiletClean/add") + @POST("/sanitation/toiletClean/add") Observable cleanToilet(@Header("token") String token, @Field("toiletId") String toiletId, @Field("userId") String userId, @@ -456,4 +457,16 @@ @Field("cleanTime") String cleanTime, @Field("photo") String photo, @Field("workContent") String workContent); + + /** + * 公厕打扫记录 + *

+ * http://111.198.10.15:11409/sanitation/toiletClean/listPage + */ + @GET("/sanitation/toiletClean/listPage") + Observable obtainToiletCleanRecord(@Header("token") String token, + @Query("userId") String userId, + @Query("keywords") String keywords, + @Query("beginDate") String beginDate, + @Query("endDate") String endDate); } 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 d2e73ee..aeec792 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 @@ -1,10 +1,7 @@ package com.casic.dcms.utils.retrofit; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.util.Log; -import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.bean.CaseCheckBean; import com.casic.dcms.bean.CaseCheckedBean; @@ -19,6 +16,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -35,10 +33,7 @@ import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.HttpConfig; -import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import org.jetbrains.annotations.NotNull; @@ -296,16 +291,9 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ public static Observable getImageUploadResult(File image) { - //改为上传带水印的图片 - Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath()); - String path = OtherUtils.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, - StringHelper.getUserAccount(), - TimeOrDateUtil.timestampToDate("yyy-MM-dd"), - TimeOrDateUtil.timestampToTime("HH:mm:ss")); - Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), new File(path)); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), image); MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", image.getName(), requestBody); return service.uploadImage(AuthenticationHelper.getToken(), imagePart); } @@ -515,4 +503,14 @@ return service.cleanToilet(AuthenticationHelper.getToken(), toiletId, userId, lng, lat, cleanTime, photo, workContent); } + + /** + * 公厕打扫记录 + */ + public static Observable getCleanRecordResult(String userId, String keywords, + String beginDate, String endDate) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + } } diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java new file mode 100644 index 0000000..b7778b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -0,0 +1,166 @@ +package com.casic.dcms.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; + +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.utils.callback.ICompressListener; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.io.File; +import java.io.FileOutputStream; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; + +public class ImageHelper { + /** + * 绘制文字到右下角并压缩图片 + */ + public static void drawTextToRightBottom(Context context, final Bitmap bitmap, String name, String date, + String time, IWaterMarkAddListener markAddListener) { + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + //初始化画笔 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(Color.RED); + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + paint.setTextSize(QMUIDisplayHelper.sp2px(context, 50)); + Rect nameBounds = new Rect(); + paint.getTextBounds(name, 0, name.length(), nameBounds); + Rect dateBounds = new Rect(); + paint.getTextBounds(date, 0, date.length(), dateBounds); + Rect timeBounds = new Rect(); + paint.getTextBounds(time, 0, time.length(), timeBounds); + + //添加水印 + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + if (bitmapConfig == null) { + bitmapConfig = Bitmap.Config.RGB_565; + } + Bitmap copyBitmap = bitmap.copy(bitmapConfig, true); + + Canvas canvas = new Canvas(copyBitmap); + final int bitmapWidth = copyBitmap.getWidth(); + final int bitmapHeight = copyBitmap.getHeight(); + final int padding = QMUIDisplayHelper.dp2px(context, 20);//两行水印间的间距 + final int paddingRight = QMUIDisplayHelper.dp2px(context, 20); + final int paddingBottom = QMUIDisplayHelper.dp2px(context, 20); + //有几行就写几行 + canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, + bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), paint); + canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, + bitmapHeight - (timeBounds.height() + padding + paddingBottom), paint); + canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, + bitmapHeight - paddingBottom, paint); + + //将带有水印的图片保存 + File file = FileUtils.getWaterImageFile(); + try { + FileOutputStream fos = new FileOutputStream(file); + copyBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + subscriber.onNext(file); + } + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(File file) { + //压缩图片 + Luban.with(context).load(file.getPath()).ignoreBy(100) + .setTargetDir(FileUtils.getImageCompressPath()) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + markAddListener.onSuccess(file); + } else { + markAddListener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + markAddListener.onError(e); + } + }).launch(); + } + }); + } + + /** + * 压缩图片 + */ + public static void compressImage(String imagePath, String targetDir, ICompressListener listener) { + Luban.with(BaseApplication.getInstance()) + .load(imagePath) + .ignoreBy(100) + .setTargetDir(targetDir) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + listener.onSuccess(file); + } else { + listener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + listener.onError(e); + } + }).launch(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 55a56a3..8872825 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -5,92 +5,22 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.Build; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.Log; import androidx.core.app.ActivityCompat; import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; -import com.casic.dcms.utils.callback.IDownloadListener; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import org.jetbrains.annotations.NotNull; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; - public class OtherUtils { private static final String TAG = "OtherUtils"; - /** - * 绘制文字到右下角 - */ - public static String drawTextToRightBottom(Context context, Bitmap bitmap, String name, String date, String time) { - //初始化画笔 - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(Color.RED); - paint.setDither(true); // 获取跟清晰的图像采样 - paint.setFilterBitmap(true);// 过滤一些 - paint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - Rect nameBounds = new Rect(); - paint.getTextBounds(name, 0, name.length(), nameBounds); - Rect dateBounds = new Rect(); - paint.getTextBounds(date, 0, date.length(), dateBounds); - Rect timeBounds = new Rect(); - paint.getTextBounds(time, 0, time.length(), timeBounds); - - //添加水印 - android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); - if (bitmapConfig == null) { - bitmapConfig = Bitmap.Config.RGB_565; - } - bitmap = bitmap.copy(bitmapConfig, true); - - Canvas canvas = new Canvas(bitmap); - final int bitmapWidth = bitmap.getWidth(); - final int bitmapHeight = bitmap.getHeight(); - final int paddingRight = QMUIDisplayHelper.dp2px(context, 10); - //有几行就写几行 - canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 55), paint); - canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 30), paint); - canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 10), paint); - - //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); - try { - FileOutputStream fos = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return file.getAbsolutePath(); - } - //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { Intent intent = new Intent(context, BigImageActivity.class); @@ -137,60 +67,4 @@ } return ""; } - - public static void downloadFile(String url, IDownloadListener listener) { - OkHttpClient okHttpClient = new OkHttpClient(); - Request request = new Request.Builder().get().url(url).build(); - okHttpClient.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - e.printStackTrace(); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - InputStream is = null; - byte[] buf = new byte[2048]; - int len; - FileOutputStream fos = null; - // 储存下载文件的目录 - String savePath = FileUtils.getDownloadFilePath(); - try { - ResponseBody body = response.body(); - if (body != null) { - is = body.byteStream(); - long total = body.contentLength(); - listener.onDownloadStart(total); - File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); - fos = new FileOutputStream(file); - long sum = 0; - while ((len = is.read(buf)) != -1) { - fos.write(buf, 0, len); - sum += len; - listener.onProgressChanged(sum); - } - fos.flush(); - listener.onDownloadEnd(file); - } else { - Log.d(TAG, "onResponse: body is null"); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (is != null) - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (fos != null) - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 72ccfdb..1b390a7 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -12,27 +12,37 @@ **/ @SuppressLint("SimpleDateFormat") public class TimeOrDateUtil { - /** - * 时间戳转时间 - */ - public static String timestampToTime(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); - } + private static final String TAG = "TimeOrDateUtil"; + private static final SimpleDateFormat allDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); + private static final SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); /** - * 时间戳转时间 + * 时间戳转完整日期时间 */ - public static String timestampToTime(long mills) { - SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); - return millsFormat.format(mills); + public static String timestampToCompleteDate(long millSeconds) { + return allDateFormat.format(new Date(millSeconds)); } /** * 时间戳转日期 */ - public static String timestampToDate(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); + public static String timestampToDate(long millSeconds) { + return dateFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转时间 + */ + public static String timestampToTime(long millSeconds) { + return timeFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转分秒 + */ + public static String millsToTime(long millSeconds) { + return millsFormat.format(new Date(millSeconds)); } } diff --git a/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java new file mode 100644 index 0000000..2f22e31 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java @@ -0,0 +1,15 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface ICompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + void onSuccess(File file); + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + void onError(Throwable e); +} diff --git a/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java new file mode 100644 index 0000000..979a7f1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java @@ -0,0 +1,9 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface IWaterMarkAddListener { + void onSuccess(File file); + + void onError(Throwable e); +} 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 04d396f..6e7aae1 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 @@ -14,6 +14,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -444,10 +445,10 @@ /** * 公厕打扫签到 *

- * http://111.198.10.15:11409/toiletClean/add + * http://111.198.10.15:11409/sanitation/toiletClean/add */ @FormUrlEncoded - @POST("/toiletClean/add") + @POST("/sanitation/toiletClean/add") Observable cleanToilet(@Header("token") String token, @Field("toiletId") String toiletId, @Field("userId") String userId, @@ -456,4 +457,16 @@ @Field("cleanTime") String cleanTime, @Field("photo") String photo, @Field("workContent") String workContent); + + /** + * 公厕打扫记录 + *

+ * http://111.198.10.15:11409/sanitation/toiletClean/listPage + */ + @GET("/sanitation/toiletClean/listPage") + Observable obtainToiletCleanRecord(@Header("token") String token, + @Query("userId") String userId, + @Query("keywords") String keywords, + @Query("beginDate") String beginDate, + @Query("endDate") String endDate); } 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 d2e73ee..aeec792 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 @@ -1,10 +1,7 @@ package com.casic.dcms.utils.retrofit; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.util.Log; -import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.bean.CaseCheckBean; import com.casic.dcms.bean.CaseCheckedBean; @@ -19,6 +16,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -35,10 +33,7 @@ import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.HttpConfig; -import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import org.jetbrains.annotations.NotNull; @@ -296,16 +291,9 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ public static Observable getImageUploadResult(File image) { - //改为上传带水印的图片 - Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath()); - String path = OtherUtils.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, - StringHelper.getUserAccount(), - TimeOrDateUtil.timestampToDate("yyy-MM-dd"), - TimeOrDateUtil.timestampToTime("HH:mm:ss")); - Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), new File(path)); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), image); MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", image.getName(), requestBody); return service.uploadImage(AuthenticationHelper.getToken(), imagePart); } @@ -515,4 +503,14 @@ return service.cleanToilet(AuthenticationHelper.getToken(), toiletId, userId, lng, lat, cleanTime, photo, workContent); } + + /** + * 公厕打扫记录 + */ + public static Observable getCleanRecordResult(String userId, String keywords, + String beginDate, String endDate) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java new file mode 100644 index 0000000..1e43b87 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -0,0 +1,91 @@ +package com.casic.dcms.widgets; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.TimeOrDateUtil; + +import java.util.Timer; +import java.util.TimerTask; + +public class SignInDialog extends Dialog implements View.OnClickListener { + + private static final String TAG = "SignInDialog"; + private String address; + private OnDialogClickListener listener; + + private SignInDialog(Builder builder) { + super(builder.mContext); + this.address = builder.address; + this.listener = builder.listener; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_sign_in); + initView(); + } + + private void initView() { + TextView clockView = findViewById(R.id.clockView); + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.millsToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); + TextView signInPlaceView = findViewById(R.id.signInPlaceView); + if (!TextUtils.isEmpty(address)) { + signInPlaceView.setText(address); + } + TextView signInView = findViewById(R.id.signInView); + signInView.setOnClickListener(this); + } + + @Override + public void onClick(View view) { + int i = view.getId(); + if (i == R.id.signInView) { + if (listener != null) { + listener.onViewClick(); + } + } + this.dismiss(); + } + + public static class Builder { + private Context mContext; + private String address; + private OnDialogClickListener listener; + + public Builder setContext(Context context) { + this.mContext = context; + return this; + } + + public Builder setAddress(String address) { + this.address = address; + return this; + } + + public Builder setOnDialogClickListener(OnDialogClickListener listener) { + this.listener = listener; + return this; + } + + public SignInDialog build() { + return new SignInDialog(this); + } + } + + public interface OnDialogClickListener { + void onViewClick(); + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java new file mode 100644 index 0000000..b7778b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -0,0 +1,166 @@ +package com.casic.dcms.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; + +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.utils.callback.ICompressListener; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.io.File; +import java.io.FileOutputStream; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; + +public class ImageHelper { + /** + * 绘制文字到右下角并压缩图片 + */ + public static void drawTextToRightBottom(Context context, final Bitmap bitmap, String name, String date, + String time, IWaterMarkAddListener markAddListener) { + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + //初始化画笔 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(Color.RED); + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + paint.setTextSize(QMUIDisplayHelper.sp2px(context, 50)); + Rect nameBounds = new Rect(); + paint.getTextBounds(name, 0, name.length(), nameBounds); + Rect dateBounds = new Rect(); + paint.getTextBounds(date, 0, date.length(), dateBounds); + Rect timeBounds = new Rect(); + paint.getTextBounds(time, 0, time.length(), timeBounds); + + //添加水印 + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + if (bitmapConfig == null) { + bitmapConfig = Bitmap.Config.RGB_565; + } + Bitmap copyBitmap = bitmap.copy(bitmapConfig, true); + + Canvas canvas = new Canvas(copyBitmap); + final int bitmapWidth = copyBitmap.getWidth(); + final int bitmapHeight = copyBitmap.getHeight(); + final int padding = QMUIDisplayHelper.dp2px(context, 20);//两行水印间的间距 + final int paddingRight = QMUIDisplayHelper.dp2px(context, 20); + final int paddingBottom = QMUIDisplayHelper.dp2px(context, 20); + //有几行就写几行 + canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, + bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), paint); + canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, + bitmapHeight - (timeBounds.height() + padding + paddingBottom), paint); + canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, + bitmapHeight - paddingBottom, paint); + + //将带有水印的图片保存 + File file = FileUtils.getWaterImageFile(); + try { + FileOutputStream fos = new FileOutputStream(file); + copyBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + subscriber.onNext(file); + } + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(File file) { + //压缩图片 + Luban.with(context).load(file.getPath()).ignoreBy(100) + .setTargetDir(FileUtils.getImageCompressPath()) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + markAddListener.onSuccess(file); + } else { + markAddListener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + markAddListener.onError(e); + } + }).launch(); + } + }); + } + + /** + * 压缩图片 + */ + public static void compressImage(String imagePath, String targetDir, ICompressListener listener) { + Luban.with(BaseApplication.getInstance()) + .load(imagePath) + .ignoreBy(100) + .setTargetDir(targetDir) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + listener.onSuccess(file); + } else { + listener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + listener.onError(e); + } + }).launch(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 55a56a3..8872825 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -5,92 +5,22 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.Build; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.Log; import androidx.core.app.ActivityCompat; import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; -import com.casic.dcms.utils.callback.IDownloadListener; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import org.jetbrains.annotations.NotNull; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; - public class OtherUtils { private static final String TAG = "OtherUtils"; - /** - * 绘制文字到右下角 - */ - public static String drawTextToRightBottom(Context context, Bitmap bitmap, String name, String date, String time) { - //初始化画笔 - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(Color.RED); - paint.setDither(true); // 获取跟清晰的图像采样 - paint.setFilterBitmap(true);// 过滤一些 - paint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - Rect nameBounds = new Rect(); - paint.getTextBounds(name, 0, name.length(), nameBounds); - Rect dateBounds = new Rect(); - paint.getTextBounds(date, 0, date.length(), dateBounds); - Rect timeBounds = new Rect(); - paint.getTextBounds(time, 0, time.length(), timeBounds); - - //添加水印 - android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); - if (bitmapConfig == null) { - bitmapConfig = Bitmap.Config.RGB_565; - } - bitmap = bitmap.copy(bitmapConfig, true); - - Canvas canvas = new Canvas(bitmap); - final int bitmapWidth = bitmap.getWidth(); - final int bitmapHeight = bitmap.getHeight(); - final int paddingRight = QMUIDisplayHelper.dp2px(context, 10); - //有几行就写几行 - canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 55), paint); - canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 30), paint); - canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 10), paint); - - //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); - try { - FileOutputStream fos = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return file.getAbsolutePath(); - } - //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { Intent intent = new Intent(context, BigImageActivity.class); @@ -137,60 +67,4 @@ } return ""; } - - public static void downloadFile(String url, IDownloadListener listener) { - OkHttpClient okHttpClient = new OkHttpClient(); - Request request = new Request.Builder().get().url(url).build(); - okHttpClient.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - e.printStackTrace(); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - InputStream is = null; - byte[] buf = new byte[2048]; - int len; - FileOutputStream fos = null; - // 储存下载文件的目录 - String savePath = FileUtils.getDownloadFilePath(); - try { - ResponseBody body = response.body(); - if (body != null) { - is = body.byteStream(); - long total = body.contentLength(); - listener.onDownloadStart(total); - File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); - fos = new FileOutputStream(file); - long sum = 0; - while ((len = is.read(buf)) != -1) { - fos.write(buf, 0, len); - sum += len; - listener.onProgressChanged(sum); - } - fos.flush(); - listener.onDownloadEnd(file); - } else { - Log.d(TAG, "onResponse: body is null"); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (is != null) - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (fos != null) - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 72ccfdb..1b390a7 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -12,27 +12,37 @@ **/ @SuppressLint("SimpleDateFormat") public class TimeOrDateUtil { - /** - * 时间戳转时间 - */ - public static String timestampToTime(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); - } + private static final String TAG = "TimeOrDateUtil"; + private static final SimpleDateFormat allDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); + private static final SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); /** - * 时间戳转时间 + * 时间戳转完整日期时间 */ - public static String timestampToTime(long mills) { - SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); - return millsFormat.format(mills); + public static String timestampToCompleteDate(long millSeconds) { + return allDateFormat.format(new Date(millSeconds)); } /** * 时间戳转日期 */ - public static String timestampToDate(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); + public static String timestampToDate(long millSeconds) { + return dateFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转时间 + */ + public static String timestampToTime(long millSeconds) { + return timeFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转分秒 + */ + public static String millsToTime(long millSeconds) { + return millsFormat.format(new Date(millSeconds)); } } diff --git a/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java new file mode 100644 index 0000000..2f22e31 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java @@ -0,0 +1,15 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface ICompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + void onSuccess(File file); + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + void onError(Throwable e); +} diff --git a/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java new file mode 100644 index 0000000..979a7f1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java @@ -0,0 +1,9 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface IWaterMarkAddListener { + void onSuccess(File file); + + void onError(Throwable e); +} 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 04d396f..6e7aae1 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 @@ -14,6 +14,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -444,10 +445,10 @@ /** * 公厕打扫签到 *

- * http://111.198.10.15:11409/toiletClean/add + * http://111.198.10.15:11409/sanitation/toiletClean/add */ @FormUrlEncoded - @POST("/toiletClean/add") + @POST("/sanitation/toiletClean/add") Observable cleanToilet(@Header("token") String token, @Field("toiletId") String toiletId, @Field("userId") String userId, @@ -456,4 +457,16 @@ @Field("cleanTime") String cleanTime, @Field("photo") String photo, @Field("workContent") String workContent); + + /** + * 公厕打扫记录 + *

+ * http://111.198.10.15:11409/sanitation/toiletClean/listPage + */ + @GET("/sanitation/toiletClean/listPage") + Observable obtainToiletCleanRecord(@Header("token") String token, + @Query("userId") String userId, + @Query("keywords") String keywords, + @Query("beginDate") String beginDate, + @Query("endDate") String endDate); } 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 d2e73ee..aeec792 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 @@ -1,10 +1,7 @@ package com.casic.dcms.utils.retrofit; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.util.Log; -import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.bean.CaseCheckBean; import com.casic.dcms.bean.CaseCheckedBean; @@ -19,6 +16,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -35,10 +33,7 @@ import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.HttpConfig; -import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import org.jetbrains.annotations.NotNull; @@ -296,16 +291,9 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ public static Observable getImageUploadResult(File image) { - //改为上传带水印的图片 - Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath()); - String path = OtherUtils.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, - StringHelper.getUserAccount(), - TimeOrDateUtil.timestampToDate("yyy-MM-dd"), - TimeOrDateUtil.timestampToTime("HH:mm:ss")); - Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), new File(path)); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), image); MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", image.getName(), requestBody); return service.uploadImage(AuthenticationHelper.getToken(), imagePart); } @@ -515,4 +503,14 @@ return service.cleanToilet(AuthenticationHelper.getToken(), toiletId, userId, lng, lat, cleanTime, photo, workContent); } + + /** + * 公厕打扫记录 + */ + public static Observable getCleanRecordResult(String userId, String keywords, + String beginDate, String endDate) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java new file mode 100644 index 0000000..1e43b87 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -0,0 +1,91 @@ +package com.casic.dcms.widgets; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.TimeOrDateUtil; + +import java.util.Timer; +import java.util.TimerTask; + +public class SignInDialog extends Dialog implements View.OnClickListener { + + private static final String TAG = "SignInDialog"; + private String address; + private OnDialogClickListener listener; + + private SignInDialog(Builder builder) { + super(builder.mContext); + this.address = builder.address; + this.listener = builder.listener; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_sign_in); + initView(); + } + + private void initView() { + TextView clockView = findViewById(R.id.clockView); + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.millsToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); + TextView signInPlaceView = findViewById(R.id.signInPlaceView); + if (!TextUtils.isEmpty(address)) { + signInPlaceView.setText(address); + } + TextView signInView = findViewById(R.id.signInView); + signInView.setOnClickListener(this); + } + + @Override + public void onClick(View view) { + int i = view.getId(); + if (i == R.id.signInView) { + if (listener != null) { + listener.onViewClick(); + } + } + this.dismiss(); + } + + public static class Builder { + private Context mContext; + private String address; + private OnDialogClickListener listener; + + public Builder setContext(Context context) { + this.mContext = context; + return this; + } + + public Builder setAddress(String address) { + this.address = address; + return this; + } + + public Builder setOnDialogClickListener(OnDialogClickListener listener) { + this.listener = listener; + return this; + } + + public SignInDialog build() { + return new SignInDialog(this); + } + } + + public interface OnDialogClickListener { + void onViewClick(); + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_more.xml b/app/src/main/res/drawable/ic_more.xml index aa71aad..da5378e 100644 --- a/app/src/main/res/drawable/ic_more.xml +++ b/app/src/main/res/drawable/ic_more.xml @@ -1,9 +1,9 @@ diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java new file mode 100644 index 0000000..b7778b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -0,0 +1,166 @@ +package com.casic.dcms.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; + +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.utils.callback.ICompressListener; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.io.File; +import java.io.FileOutputStream; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; + +public class ImageHelper { + /** + * 绘制文字到右下角并压缩图片 + */ + public static void drawTextToRightBottom(Context context, final Bitmap bitmap, String name, String date, + String time, IWaterMarkAddListener markAddListener) { + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + //初始化画笔 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(Color.RED); + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + paint.setTextSize(QMUIDisplayHelper.sp2px(context, 50)); + Rect nameBounds = new Rect(); + paint.getTextBounds(name, 0, name.length(), nameBounds); + Rect dateBounds = new Rect(); + paint.getTextBounds(date, 0, date.length(), dateBounds); + Rect timeBounds = new Rect(); + paint.getTextBounds(time, 0, time.length(), timeBounds); + + //添加水印 + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + if (bitmapConfig == null) { + bitmapConfig = Bitmap.Config.RGB_565; + } + Bitmap copyBitmap = bitmap.copy(bitmapConfig, true); + + Canvas canvas = new Canvas(copyBitmap); + final int bitmapWidth = copyBitmap.getWidth(); + final int bitmapHeight = copyBitmap.getHeight(); + final int padding = QMUIDisplayHelper.dp2px(context, 20);//两行水印间的间距 + final int paddingRight = QMUIDisplayHelper.dp2px(context, 20); + final int paddingBottom = QMUIDisplayHelper.dp2px(context, 20); + //有几行就写几行 + canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, + bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), paint); + canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, + bitmapHeight - (timeBounds.height() + padding + paddingBottom), paint); + canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, + bitmapHeight - paddingBottom, paint); + + //将带有水印的图片保存 + File file = FileUtils.getWaterImageFile(); + try { + FileOutputStream fos = new FileOutputStream(file); + copyBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + subscriber.onNext(file); + } + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(File file) { + //压缩图片 + Luban.with(context).load(file.getPath()).ignoreBy(100) + .setTargetDir(FileUtils.getImageCompressPath()) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + markAddListener.onSuccess(file); + } else { + markAddListener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + markAddListener.onError(e); + } + }).launch(); + } + }); + } + + /** + * 压缩图片 + */ + public static void compressImage(String imagePath, String targetDir, ICompressListener listener) { + Luban.with(BaseApplication.getInstance()) + .load(imagePath) + .ignoreBy(100) + .setTargetDir(targetDir) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + listener.onSuccess(file); + } else { + listener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + listener.onError(e); + } + }).launch(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 55a56a3..8872825 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -5,92 +5,22 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.Build; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.Log; import androidx.core.app.ActivityCompat; import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; -import com.casic.dcms.utils.callback.IDownloadListener; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import org.jetbrains.annotations.NotNull; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; - public class OtherUtils { private static final String TAG = "OtherUtils"; - /** - * 绘制文字到右下角 - */ - public static String drawTextToRightBottom(Context context, Bitmap bitmap, String name, String date, String time) { - //初始化画笔 - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(Color.RED); - paint.setDither(true); // 获取跟清晰的图像采样 - paint.setFilterBitmap(true);// 过滤一些 - paint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - Rect nameBounds = new Rect(); - paint.getTextBounds(name, 0, name.length(), nameBounds); - Rect dateBounds = new Rect(); - paint.getTextBounds(date, 0, date.length(), dateBounds); - Rect timeBounds = new Rect(); - paint.getTextBounds(time, 0, time.length(), timeBounds); - - //添加水印 - android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); - if (bitmapConfig == null) { - bitmapConfig = Bitmap.Config.RGB_565; - } - bitmap = bitmap.copy(bitmapConfig, true); - - Canvas canvas = new Canvas(bitmap); - final int bitmapWidth = bitmap.getWidth(); - final int bitmapHeight = bitmap.getHeight(); - final int paddingRight = QMUIDisplayHelper.dp2px(context, 10); - //有几行就写几行 - canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 55), paint); - canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 30), paint); - canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 10), paint); - - //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); - try { - FileOutputStream fos = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return file.getAbsolutePath(); - } - //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { Intent intent = new Intent(context, BigImageActivity.class); @@ -137,60 +67,4 @@ } return ""; } - - public static void downloadFile(String url, IDownloadListener listener) { - OkHttpClient okHttpClient = new OkHttpClient(); - Request request = new Request.Builder().get().url(url).build(); - okHttpClient.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - e.printStackTrace(); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - InputStream is = null; - byte[] buf = new byte[2048]; - int len; - FileOutputStream fos = null; - // 储存下载文件的目录 - String savePath = FileUtils.getDownloadFilePath(); - try { - ResponseBody body = response.body(); - if (body != null) { - is = body.byteStream(); - long total = body.contentLength(); - listener.onDownloadStart(total); - File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); - fos = new FileOutputStream(file); - long sum = 0; - while ((len = is.read(buf)) != -1) { - fos.write(buf, 0, len); - sum += len; - listener.onProgressChanged(sum); - } - fos.flush(); - listener.onDownloadEnd(file); - } else { - Log.d(TAG, "onResponse: body is null"); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (is != null) - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (fos != null) - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 72ccfdb..1b390a7 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -12,27 +12,37 @@ **/ @SuppressLint("SimpleDateFormat") public class TimeOrDateUtil { - /** - * 时间戳转时间 - */ - public static String timestampToTime(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); - } + private static final String TAG = "TimeOrDateUtil"; + private static final SimpleDateFormat allDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); + private static final SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); /** - * 时间戳转时间 + * 时间戳转完整日期时间 */ - public static String timestampToTime(long mills) { - SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); - return millsFormat.format(mills); + public static String timestampToCompleteDate(long millSeconds) { + return allDateFormat.format(new Date(millSeconds)); } /** * 时间戳转日期 */ - public static String timestampToDate(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); + public static String timestampToDate(long millSeconds) { + return dateFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转时间 + */ + public static String timestampToTime(long millSeconds) { + return timeFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转分秒 + */ + public static String millsToTime(long millSeconds) { + return millsFormat.format(new Date(millSeconds)); } } diff --git a/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java new file mode 100644 index 0000000..2f22e31 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java @@ -0,0 +1,15 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface ICompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + void onSuccess(File file); + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + void onError(Throwable e); +} diff --git a/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java new file mode 100644 index 0000000..979a7f1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java @@ -0,0 +1,9 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface IWaterMarkAddListener { + void onSuccess(File file); + + void onError(Throwable e); +} 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 04d396f..6e7aae1 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 @@ -14,6 +14,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -444,10 +445,10 @@ /** * 公厕打扫签到 *

- * http://111.198.10.15:11409/toiletClean/add + * http://111.198.10.15:11409/sanitation/toiletClean/add */ @FormUrlEncoded - @POST("/toiletClean/add") + @POST("/sanitation/toiletClean/add") Observable cleanToilet(@Header("token") String token, @Field("toiletId") String toiletId, @Field("userId") String userId, @@ -456,4 +457,16 @@ @Field("cleanTime") String cleanTime, @Field("photo") String photo, @Field("workContent") String workContent); + + /** + * 公厕打扫记录 + *

+ * http://111.198.10.15:11409/sanitation/toiletClean/listPage + */ + @GET("/sanitation/toiletClean/listPage") + Observable obtainToiletCleanRecord(@Header("token") String token, + @Query("userId") String userId, + @Query("keywords") String keywords, + @Query("beginDate") String beginDate, + @Query("endDate") String endDate); } 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 d2e73ee..aeec792 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 @@ -1,10 +1,7 @@ package com.casic.dcms.utils.retrofit; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.util.Log; -import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.bean.CaseCheckBean; import com.casic.dcms.bean.CaseCheckedBean; @@ -19,6 +16,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -35,10 +33,7 @@ import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.HttpConfig; -import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import org.jetbrains.annotations.NotNull; @@ -296,16 +291,9 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ public static Observable getImageUploadResult(File image) { - //改为上传带水印的图片 - Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath()); - String path = OtherUtils.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, - StringHelper.getUserAccount(), - TimeOrDateUtil.timestampToDate("yyy-MM-dd"), - TimeOrDateUtil.timestampToTime("HH:mm:ss")); - Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), new File(path)); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), image); MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", image.getName(), requestBody); return service.uploadImage(AuthenticationHelper.getToken(), imagePart); } @@ -515,4 +503,14 @@ return service.cleanToilet(AuthenticationHelper.getToken(), toiletId, userId, lng, lat, cleanTime, photo, workContent); } + + /** + * 公厕打扫记录 + */ + public static Observable getCleanRecordResult(String userId, String keywords, + String beginDate, String endDate) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java new file mode 100644 index 0000000..1e43b87 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -0,0 +1,91 @@ +package com.casic.dcms.widgets; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.TimeOrDateUtil; + +import java.util.Timer; +import java.util.TimerTask; + +public class SignInDialog extends Dialog implements View.OnClickListener { + + private static final String TAG = "SignInDialog"; + private String address; + private OnDialogClickListener listener; + + private SignInDialog(Builder builder) { + super(builder.mContext); + this.address = builder.address; + this.listener = builder.listener; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_sign_in); + initView(); + } + + private void initView() { + TextView clockView = findViewById(R.id.clockView); + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.millsToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); + TextView signInPlaceView = findViewById(R.id.signInPlaceView); + if (!TextUtils.isEmpty(address)) { + signInPlaceView.setText(address); + } + TextView signInView = findViewById(R.id.signInView); + signInView.setOnClickListener(this); + } + + @Override + public void onClick(View view) { + int i = view.getId(); + if (i == R.id.signInView) { + if (listener != null) { + listener.onViewClick(); + } + } + this.dismiss(); + } + + public static class Builder { + private Context mContext; + private String address; + private OnDialogClickListener listener; + + public Builder setContext(Context context) { + this.mContext = context; + return this; + } + + public Builder setAddress(String address) { + this.address = address; + return this; + } + + public Builder setOnDialogClickListener(OnDialogClickListener listener) { + this.listener = listener; + return this; + } + + public SignInDialog build() { + return new SignInDialog(this); + } + } + + public interface OnDialogClickListener { + void onViewClick(); + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_more.xml b/app/src/main/res/drawable/ic_more.xml index aa71aad..da5378e 100644 --- a/app/src/main/res/drawable/ic_more.xml +++ b/app/src/main/res/drawable/ic_more.xml @@ -1,9 +1,9 @@ diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml new file mode 100644 index 0000000..ddf926b --- /dev/null +++ b/app/src/main/res/drawable/ic_search.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java new file mode 100644 index 0000000..b7778b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -0,0 +1,166 @@ +package com.casic.dcms.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; + +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.utils.callback.ICompressListener; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.io.File; +import java.io.FileOutputStream; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; + +public class ImageHelper { + /** + * 绘制文字到右下角并压缩图片 + */ + public static void drawTextToRightBottom(Context context, final Bitmap bitmap, String name, String date, + String time, IWaterMarkAddListener markAddListener) { + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + //初始化画笔 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(Color.RED); + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + paint.setTextSize(QMUIDisplayHelper.sp2px(context, 50)); + Rect nameBounds = new Rect(); + paint.getTextBounds(name, 0, name.length(), nameBounds); + Rect dateBounds = new Rect(); + paint.getTextBounds(date, 0, date.length(), dateBounds); + Rect timeBounds = new Rect(); + paint.getTextBounds(time, 0, time.length(), timeBounds); + + //添加水印 + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + if (bitmapConfig == null) { + bitmapConfig = Bitmap.Config.RGB_565; + } + Bitmap copyBitmap = bitmap.copy(bitmapConfig, true); + + Canvas canvas = new Canvas(copyBitmap); + final int bitmapWidth = copyBitmap.getWidth(); + final int bitmapHeight = copyBitmap.getHeight(); + final int padding = QMUIDisplayHelper.dp2px(context, 20);//两行水印间的间距 + final int paddingRight = QMUIDisplayHelper.dp2px(context, 20); + final int paddingBottom = QMUIDisplayHelper.dp2px(context, 20); + //有几行就写几行 + canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, + bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), paint); + canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, + bitmapHeight - (timeBounds.height() + padding + paddingBottom), paint); + canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, + bitmapHeight - paddingBottom, paint); + + //将带有水印的图片保存 + File file = FileUtils.getWaterImageFile(); + try { + FileOutputStream fos = new FileOutputStream(file); + copyBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + subscriber.onNext(file); + } + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(File file) { + //压缩图片 + Luban.with(context).load(file.getPath()).ignoreBy(100) + .setTargetDir(FileUtils.getImageCompressPath()) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + markAddListener.onSuccess(file); + } else { + markAddListener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + markAddListener.onError(e); + } + }).launch(); + } + }); + } + + /** + * 压缩图片 + */ + public static void compressImage(String imagePath, String targetDir, ICompressListener listener) { + Luban.with(BaseApplication.getInstance()) + .load(imagePath) + .ignoreBy(100) + .setTargetDir(targetDir) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + listener.onSuccess(file); + } else { + listener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + listener.onError(e); + } + }).launch(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 55a56a3..8872825 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -5,92 +5,22 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.Build; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.Log; import androidx.core.app.ActivityCompat; import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; -import com.casic.dcms.utils.callback.IDownloadListener; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import org.jetbrains.annotations.NotNull; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; - public class OtherUtils { private static final String TAG = "OtherUtils"; - /** - * 绘制文字到右下角 - */ - public static String drawTextToRightBottom(Context context, Bitmap bitmap, String name, String date, String time) { - //初始化画笔 - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(Color.RED); - paint.setDither(true); // 获取跟清晰的图像采样 - paint.setFilterBitmap(true);// 过滤一些 - paint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - Rect nameBounds = new Rect(); - paint.getTextBounds(name, 0, name.length(), nameBounds); - Rect dateBounds = new Rect(); - paint.getTextBounds(date, 0, date.length(), dateBounds); - Rect timeBounds = new Rect(); - paint.getTextBounds(time, 0, time.length(), timeBounds); - - //添加水印 - android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); - if (bitmapConfig == null) { - bitmapConfig = Bitmap.Config.RGB_565; - } - bitmap = bitmap.copy(bitmapConfig, true); - - Canvas canvas = new Canvas(bitmap); - final int bitmapWidth = bitmap.getWidth(); - final int bitmapHeight = bitmap.getHeight(); - final int paddingRight = QMUIDisplayHelper.dp2px(context, 10); - //有几行就写几行 - canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 55), paint); - canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 30), paint); - canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 10), paint); - - //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); - try { - FileOutputStream fos = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return file.getAbsolutePath(); - } - //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { Intent intent = new Intent(context, BigImageActivity.class); @@ -137,60 +67,4 @@ } return ""; } - - public static void downloadFile(String url, IDownloadListener listener) { - OkHttpClient okHttpClient = new OkHttpClient(); - Request request = new Request.Builder().get().url(url).build(); - okHttpClient.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - e.printStackTrace(); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - InputStream is = null; - byte[] buf = new byte[2048]; - int len; - FileOutputStream fos = null; - // 储存下载文件的目录 - String savePath = FileUtils.getDownloadFilePath(); - try { - ResponseBody body = response.body(); - if (body != null) { - is = body.byteStream(); - long total = body.contentLength(); - listener.onDownloadStart(total); - File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); - fos = new FileOutputStream(file); - long sum = 0; - while ((len = is.read(buf)) != -1) { - fos.write(buf, 0, len); - sum += len; - listener.onProgressChanged(sum); - } - fos.flush(); - listener.onDownloadEnd(file); - } else { - Log.d(TAG, "onResponse: body is null"); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (is != null) - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (fos != null) - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 72ccfdb..1b390a7 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -12,27 +12,37 @@ **/ @SuppressLint("SimpleDateFormat") public class TimeOrDateUtil { - /** - * 时间戳转时间 - */ - public static String timestampToTime(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); - } + private static final String TAG = "TimeOrDateUtil"; + private static final SimpleDateFormat allDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); + private static final SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); /** - * 时间戳转时间 + * 时间戳转完整日期时间 */ - public static String timestampToTime(long mills) { - SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); - return millsFormat.format(mills); + public static String timestampToCompleteDate(long millSeconds) { + return allDateFormat.format(new Date(millSeconds)); } /** * 时间戳转日期 */ - public static String timestampToDate(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); + public static String timestampToDate(long millSeconds) { + return dateFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转时间 + */ + public static String timestampToTime(long millSeconds) { + return timeFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转分秒 + */ + public static String millsToTime(long millSeconds) { + return millsFormat.format(new Date(millSeconds)); } } diff --git a/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java new file mode 100644 index 0000000..2f22e31 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java @@ -0,0 +1,15 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface ICompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + void onSuccess(File file); + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + void onError(Throwable e); +} diff --git a/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java new file mode 100644 index 0000000..979a7f1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java @@ -0,0 +1,9 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface IWaterMarkAddListener { + void onSuccess(File file); + + void onError(Throwable e); +} 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 04d396f..6e7aae1 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 @@ -14,6 +14,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -444,10 +445,10 @@ /** * 公厕打扫签到 *

- * http://111.198.10.15:11409/toiletClean/add + * http://111.198.10.15:11409/sanitation/toiletClean/add */ @FormUrlEncoded - @POST("/toiletClean/add") + @POST("/sanitation/toiletClean/add") Observable cleanToilet(@Header("token") String token, @Field("toiletId") String toiletId, @Field("userId") String userId, @@ -456,4 +457,16 @@ @Field("cleanTime") String cleanTime, @Field("photo") String photo, @Field("workContent") String workContent); + + /** + * 公厕打扫记录 + *

+ * http://111.198.10.15:11409/sanitation/toiletClean/listPage + */ + @GET("/sanitation/toiletClean/listPage") + Observable obtainToiletCleanRecord(@Header("token") String token, + @Query("userId") String userId, + @Query("keywords") String keywords, + @Query("beginDate") String beginDate, + @Query("endDate") String endDate); } 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 d2e73ee..aeec792 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 @@ -1,10 +1,7 @@ package com.casic.dcms.utils.retrofit; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.util.Log; -import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.bean.CaseCheckBean; import com.casic.dcms.bean.CaseCheckedBean; @@ -19,6 +16,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -35,10 +33,7 @@ import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.HttpConfig; -import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import org.jetbrains.annotations.NotNull; @@ -296,16 +291,9 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ public static Observable getImageUploadResult(File image) { - //改为上传带水印的图片 - Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath()); - String path = OtherUtils.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, - StringHelper.getUserAccount(), - TimeOrDateUtil.timestampToDate("yyy-MM-dd"), - TimeOrDateUtil.timestampToTime("HH:mm:ss")); - Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), new File(path)); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), image); MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", image.getName(), requestBody); return service.uploadImage(AuthenticationHelper.getToken(), imagePart); } @@ -515,4 +503,14 @@ return service.cleanToilet(AuthenticationHelper.getToken(), toiletId, userId, lng, lat, cleanTime, photo, workContent); } + + /** + * 公厕打扫记录 + */ + public static Observable getCleanRecordResult(String userId, String keywords, + String beginDate, String endDate) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java new file mode 100644 index 0000000..1e43b87 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -0,0 +1,91 @@ +package com.casic.dcms.widgets; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.TimeOrDateUtil; + +import java.util.Timer; +import java.util.TimerTask; + +public class SignInDialog extends Dialog implements View.OnClickListener { + + private static final String TAG = "SignInDialog"; + private String address; + private OnDialogClickListener listener; + + private SignInDialog(Builder builder) { + super(builder.mContext); + this.address = builder.address; + this.listener = builder.listener; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_sign_in); + initView(); + } + + private void initView() { + TextView clockView = findViewById(R.id.clockView); + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.millsToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); + TextView signInPlaceView = findViewById(R.id.signInPlaceView); + if (!TextUtils.isEmpty(address)) { + signInPlaceView.setText(address); + } + TextView signInView = findViewById(R.id.signInView); + signInView.setOnClickListener(this); + } + + @Override + public void onClick(View view) { + int i = view.getId(); + if (i == R.id.signInView) { + if (listener != null) { + listener.onViewClick(); + } + } + this.dismiss(); + } + + public static class Builder { + private Context mContext; + private String address; + private OnDialogClickListener listener; + + public Builder setContext(Context context) { + this.mContext = context; + return this; + } + + public Builder setAddress(String address) { + this.address = address; + return this; + } + + public Builder setOnDialogClickListener(OnDialogClickListener listener) { + this.listener = listener; + return this; + } + + public SignInDialog build() { + return new SignInDialog(this); + } + } + + public interface OnDialogClickListener { + void onViewClick(); + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_more.xml b/app/src/main/res/drawable/ic_more.xml index aa71aad..da5378e 100644 --- a/app/src/main/res/drawable/ic_more.xml +++ b/app/src/main/res/drawable/ic_more.xml @@ -1,9 +1,9 @@ diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml new file mode 100644 index 0000000..ddf926b --- /dev/null +++ b/app/src/main/res/drawable/ic_search.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_sign.xml b/app/src/main/res/drawable/ic_sign.xml new file mode 100644 index 0000000..f914440 --- /dev/null +++ b/app/src/main/res/drawable/ic_sign.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java new file mode 100644 index 0000000..b7778b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -0,0 +1,166 @@ +package com.casic.dcms.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; + +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.utils.callback.ICompressListener; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.io.File; +import java.io.FileOutputStream; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; + +public class ImageHelper { + /** + * 绘制文字到右下角并压缩图片 + */ + public static void drawTextToRightBottom(Context context, final Bitmap bitmap, String name, String date, + String time, IWaterMarkAddListener markAddListener) { + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + //初始化画笔 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(Color.RED); + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + paint.setTextSize(QMUIDisplayHelper.sp2px(context, 50)); + Rect nameBounds = new Rect(); + paint.getTextBounds(name, 0, name.length(), nameBounds); + Rect dateBounds = new Rect(); + paint.getTextBounds(date, 0, date.length(), dateBounds); + Rect timeBounds = new Rect(); + paint.getTextBounds(time, 0, time.length(), timeBounds); + + //添加水印 + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + if (bitmapConfig == null) { + bitmapConfig = Bitmap.Config.RGB_565; + } + Bitmap copyBitmap = bitmap.copy(bitmapConfig, true); + + Canvas canvas = new Canvas(copyBitmap); + final int bitmapWidth = copyBitmap.getWidth(); + final int bitmapHeight = copyBitmap.getHeight(); + final int padding = QMUIDisplayHelper.dp2px(context, 20);//两行水印间的间距 + final int paddingRight = QMUIDisplayHelper.dp2px(context, 20); + final int paddingBottom = QMUIDisplayHelper.dp2px(context, 20); + //有几行就写几行 + canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, + bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), paint); + canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, + bitmapHeight - (timeBounds.height() + padding + paddingBottom), paint); + canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, + bitmapHeight - paddingBottom, paint); + + //将带有水印的图片保存 + File file = FileUtils.getWaterImageFile(); + try { + FileOutputStream fos = new FileOutputStream(file); + copyBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + subscriber.onNext(file); + } + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(File file) { + //压缩图片 + Luban.with(context).load(file.getPath()).ignoreBy(100) + .setTargetDir(FileUtils.getImageCompressPath()) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + markAddListener.onSuccess(file); + } else { + markAddListener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + markAddListener.onError(e); + } + }).launch(); + } + }); + } + + /** + * 压缩图片 + */ + public static void compressImage(String imagePath, String targetDir, ICompressListener listener) { + Luban.with(BaseApplication.getInstance()) + .load(imagePath) + .ignoreBy(100) + .setTargetDir(targetDir) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + listener.onSuccess(file); + } else { + listener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + listener.onError(e); + } + }).launch(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 55a56a3..8872825 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -5,92 +5,22 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.Build; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.Log; import androidx.core.app.ActivityCompat; import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; -import com.casic.dcms.utils.callback.IDownloadListener; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import org.jetbrains.annotations.NotNull; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; - public class OtherUtils { private static final String TAG = "OtherUtils"; - /** - * 绘制文字到右下角 - */ - public static String drawTextToRightBottom(Context context, Bitmap bitmap, String name, String date, String time) { - //初始化画笔 - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(Color.RED); - paint.setDither(true); // 获取跟清晰的图像采样 - paint.setFilterBitmap(true);// 过滤一些 - paint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - Rect nameBounds = new Rect(); - paint.getTextBounds(name, 0, name.length(), nameBounds); - Rect dateBounds = new Rect(); - paint.getTextBounds(date, 0, date.length(), dateBounds); - Rect timeBounds = new Rect(); - paint.getTextBounds(time, 0, time.length(), timeBounds); - - //添加水印 - android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); - if (bitmapConfig == null) { - bitmapConfig = Bitmap.Config.RGB_565; - } - bitmap = bitmap.copy(bitmapConfig, true); - - Canvas canvas = new Canvas(bitmap); - final int bitmapWidth = bitmap.getWidth(); - final int bitmapHeight = bitmap.getHeight(); - final int paddingRight = QMUIDisplayHelper.dp2px(context, 10); - //有几行就写几行 - canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 55), paint); - canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 30), paint); - canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 10), paint); - - //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); - try { - FileOutputStream fos = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return file.getAbsolutePath(); - } - //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { Intent intent = new Intent(context, BigImageActivity.class); @@ -137,60 +67,4 @@ } return ""; } - - public static void downloadFile(String url, IDownloadListener listener) { - OkHttpClient okHttpClient = new OkHttpClient(); - Request request = new Request.Builder().get().url(url).build(); - okHttpClient.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - e.printStackTrace(); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - InputStream is = null; - byte[] buf = new byte[2048]; - int len; - FileOutputStream fos = null; - // 储存下载文件的目录 - String savePath = FileUtils.getDownloadFilePath(); - try { - ResponseBody body = response.body(); - if (body != null) { - is = body.byteStream(); - long total = body.contentLength(); - listener.onDownloadStart(total); - File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); - fos = new FileOutputStream(file); - long sum = 0; - while ((len = is.read(buf)) != -1) { - fos.write(buf, 0, len); - sum += len; - listener.onProgressChanged(sum); - } - fos.flush(); - listener.onDownloadEnd(file); - } else { - Log.d(TAG, "onResponse: body is null"); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (is != null) - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (fos != null) - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 72ccfdb..1b390a7 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -12,27 +12,37 @@ **/ @SuppressLint("SimpleDateFormat") public class TimeOrDateUtil { - /** - * 时间戳转时间 - */ - public static String timestampToTime(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); - } + private static final String TAG = "TimeOrDateUtil"; + private static final SimpleDateFormat allDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); + private static final SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); /** - * 时间戳转时间 + * 时间戳转完整日期时间 */ - public static String timestampToTime(long mills) { - SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); - return millsFormat.format(mills); + public static String timestampToCompleteDate(long millSeconds) { + return allDateFormat.format(new Date(millSeconds)); } /** * 时间戳转日期 */ - public static String timestampToDate(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); + public static String timestampToDate(long millSeconds) { + return dateFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转时间 + */ + public static String timestampToTime(long millSeconds) { + return timeFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转分秒 + */ + public static String millsToTime(long millSeconds) { + return millsFormat.format(new Date(millSeconds)); } } diff --git a/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java new file mode 100644 index 0000000..2f22e31 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java @@ -0,0 +1,15 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface ICompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + void onSuccess(File file); + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + void onError(Throwable e); +} diff --git a/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java new file mode 100644 index 0000000..979a7f1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java @@ -0,0 +1,9 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface IWaterMarkAddListener { + void onSuccess(File file); + + void onError(Throwable e); +} 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 04d396f..6e7aae1 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 @@ -14,6 +14,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -444,10 +445,10 @@ /** * 公厕打扫签到 *

- * http://111.198.10.15:11409/toiletClean/add + * http://111.198.10.15:11409/sanitation/toiletClean/add */ @FormUrlEncoded - @POST("/toiletClean/add") + @POST("/sanitation/toiletClean/add") Observable cleanToilet(@Header("token") String token, @Field("toiletId") String toiletId, @Field("userId") String userId, @@ -456,4 +457,16 @@ @Field("cleanTime") String cleanTime, @Field("photo") String photo, @Field("workContent") String workContent); + + /** + * 公厕打扫记录 + *

+ * http://111.198.10.15:11409/sanitation/toiletClean/listPage + */ + @GET("/sanitation/toiletClean/listPage") + Observable obtainToiletCleanRecord(@Header("token") String token, + @Query("userId") String userId, + @Query("keywords") String keywords, + @Query("beginDate") String beginDate, + @Query("endDate") String endDate); } 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 d2e73ee..aeec792 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 @@ -1,10 +1,7 @@ package com.casic.dcms.utils.retrofit; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.util.Log; -import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.bean.CaseCheckBean; import com.casic.dcms.bean.CaseCheckedBean; @@ -19,6 +16,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -35,10 +33,7 @@ import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.HttpConfig; -import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import org.jetbrains.annotations.NotNull; @@ -296,16 +291,9 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ public static Observable getImageUploadResult(File image) { - //改为上传带水印的图片 - Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath()); - String path = OtherUtils.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, - StringHelper.getUserAccount(), - TimeOrDateUtil.timestampToDate("yyy-MM-dd"), - TimeOrDateUtil.timestampToTime("HH:mm:ss")); - Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), new File(path)); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), image); MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", image.getName(), requestBody); return service.uploadImage(AuthenticationHelper.getToken(), imagePart); } @@ -515,4 +503,14 @@ return service.cleanToilet(AuthenticationHelper.getToken(), toiletId, userId, lng, lat, cleanTime, photo, workContent); } + + /** + * 公厕打扫记录 + */ + public static Observable getCleanRecordResult(String userId, String keywords, + String beginDate, String endDate) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java new file mode 100644 index 0000000..1e43b87 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -0,0 +1,91 @@ +package com.casic.dcms.widgets; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.TimeOrDateUtil; + +import java.util.Timer; +import java.util.TimerTask; + +public class SignInDialog extends Dialog implements View.OnClickListener { + + private static final String TAG = "SignInDialog"; + private String address; + private OnDialogClickListener listener; + + private SignInDialog(Builder builder) { + super(builder.mContext); + this.address = builder.address; + this.listener = builder.listener; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_sign_in); + initView(); + } + + private void initView() { + TextView clockView = findViewById(R.id.clockView); + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.millsToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); + TextView signInPlaceView = findViewById(R.id.signInPlaceView); + if (!TextUtils.isEmpty(address)) { + signInPlaceView.setText(address); + } + TextView signInView = findViewById(R.id.signInView); + signInView.setOnClickListener(this); + } + + @Override + public void onClick(View view) { + int i = view.getId(); + if (i == R.id.signInView) { + if (listener != null) { + listener.onViewClick(); + } + } + this.dismiss(); + } + + public static class Builder { + private Context mContext; + private String address; + private OnDialogClickListener listener; + + public Builder setContext(Context context) { + this.mContext = context; + return this; + } + + public Builder setAddress(String address) { + this.address = address; + return this; + } + + public Builder setOnDialogClickListener(OnDialogClickListener listener) { + this.listener = listener; + return this; + } + + public SignInDialog build() { + return new SignInDialog(this); + } + } + + public interface OnDialogClickListener { + void onViewClick(); + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_more.xml b/app/src/main/res/drawable/ic_more.xml index aa71aad..da5378e 100644 --- a/app/src/main/res/drawable/ic_more.xml +++ b/app/src/main/res/drawable/ic_more.xml @@ -1,9 +1,9 @@ diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml new file mode 100644 index 0000000..ddf926b --- /dev/null +++ b/app/src/main/res/drawable/ic_search.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_sign.xml b/app/src/main/res/drawable/ic_sign.xml new file mode 100644 index 0000000..f914440 --- /dev/null +++ b/app/src/main/res/drawable/ic_sign.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml new file mode 100644 index 0000000..eb35023 --- /dev/null +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java new file mode 100644 index 0000000..b7778b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -0,0 +1,166 @@ +package com.casic.dcms.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; + +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.utils.callback.ICompressListener; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.io.File; +import java.io.FileOutputStream; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; + +public class ImageHelper { + /** + * 绘制文字到右下角并压缩图片 + */ + public static void drawTextToRightBottom(Context context, final Bitmap bitmap, String name, String date, + String time, IWaterMarkAddListener markAddListener) { + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + //初始化画笔 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(Color.RED); + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + paint.setTextSize(QMUIDisplayHelper.sp2px(context, 50)); + Rect nameBounds = new Rect(); + paint.getTextBounds(name, 0, name.length(), nameBounds); + Rect dateBounds = new Rect(); + paint.getTextBounds(date, 0, date.length(), dateBounds); + Rect timeBounds = new Rect(); + paint.getTextBounds(time, 0, time.length(), timeBounds); + + //添加水印 + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + if (bitmapConfig == null) { + bitmapConfig = Bitmap.Config.RGB_565; + } + Bitmap copyBitmap = bitmap.copy(bitmapConfig, true); + + Canvas canvas = new Canvas(copyBitmap); + final int bitmapWidth = copyBitmap.getWidth(); + final int bitmapHeight = copyBitmap.getHeight(); + final int padding = QMUIDisplayHelper.dp2px(context, 20);//两行水印间的间距 + final int paddingRight = QMUIDisplayHelper.dp2px(context, 20); + final int paddingBottom = QMUIDisplayHelper.dp2px(context, 20); + //有几行就写几行 + canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, + bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), paint); + canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, + bitmapHeight - (timeBounds.height() + padding + paddingBottom), paint); + canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, + bitmapHeight - paddingBottom, paint); + + //将带有水印的图片保存 + File file = FileUtils.getWaterImageFile(); + try { + FileOutputStream fos = new FileOutputStream(file); + copyBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + subscriber.onNext(file); + } + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(File file) { + //压缩图片 + Luban.with(context).load(file.getPath()).ignoreBy(100) + .setTargetDir(FileUtils.getImageCompressPath()) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + markAddListener.onSuccess(file); + } else { + markAddListener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + markAddListener.onError(e); + } + }).launch(); + } + }); + } + + /** + * 压缩图片 + */ + public static void compressImage(String imagePath, String targetDir, ICompressListener listener) { + Luban.with(BaseApplication.getInstance()) + .load(imagePath) + .ignoreBy(100) + .setTargetDir(targetDir) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + listener.onSuccess(file); + } else { + listener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + listener.onError(e); + } + }).launch(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 55a56a3..8872825 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -5,92 +5,22 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.Build; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.Log; import androidx.core.app.ActivityCompat; import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; -import com.casic.dcms.utils.callback.IDownloadListener; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import org.jetbrains.annotations.NotNull; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; - public class OtherUtils { private static final String TAG = "OtherUtils"; - /** - * 绘制文字到右下角 - */ - public static String drawTextToRightBottom(Context context, Bitmap bitmap, String name, String date, String time) { - //初始化画笔 - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(Color.RED); - paint.setDither(true); // 获取跟清晰的图像采样 - paint.setFilterBitmap(true);// 过滤一些 - paint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - Rect nameBounds = new Rect(); - paint.getTextBounds(name, 0, name.length(), nameBounds); - Rect dateBounds = new Rect(); - paint.getTextBounds(date, 0, date.length(), dateBounds); - Rect timeBounds = new Rect(); - paint.getTextBounds(time, 0, time.length(), timeBounds); - - //添加水印 - android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); - if (bitmapConfig == null) { - bitmapConfig = Bitmap.Config.RGB_565; - } - bitmap = bitmap.copy(bitmapConfig, true); - - Canvas canvas = new Canvas(bitmap); - final int bitmapWidth = bitmap.getWidth(); - final int bitmapHeight = bitmap.getHeight(); - final int paddingRight = QMUIDisplayHelper.dp2px(context, 10); - //有几行就写几行 - canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 55), paint); - canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 30), paint); - canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 10), paint); - - //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); - try { - FileOutputStream fos = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return file.getAbsolutePath(); - } - //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { Intent intent = new Intent(context, BigImageActivity.class); @@ -137,60 +67,4 @@ } return ""; } - - public static void downloadFile(String url, IDownloadListener listener) { - OkHttpClient okHttpClient = new OkHttpClient(); - Request request = new Request.Builder().get().url(url).build(); - okHttpClient.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - e.printStackTrace(); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - InputStream is = null; - byte[] buf = new byte[2048]; - int len; - FileOutputStream fos = null; - // 储存下载文件的目录 - String savePath = FileUtils.getDownloadFilePath(); - try { - ResponseBody body = response.body(); - if (body != null) { - is = body.byteStream(); - long total = body.contentLength(); - listener.onDownloadStart(total); - File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); - fos = new FileOutputStream(file); - long sum = 0; - while ((len = is.read(buf)) != -1) { - fos.write(buf, 0, len); - sum += len; - listener.onProgressChanged(sum); - } - fos.flush(); - listener.onDownloadEnd(file); - } else { - Log.d(TAG, "onResponse: body is null"); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (is != null) - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (fos != null) - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 72ccfdb..1b390a7 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -12,27 +12,37 @@ **/ @SuppressLint("SimpleDateFormat") public class TimeOrDateUtil { - /** - * 时间戳转时间 - */ - public static String timestampToTime(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); - } + private static final String TAG = "TimeOrDateUtil"; + private static final SimpleDateFormat allDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); + private static final SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); /** - * 时间戳转时间 + * 时间戳转完整日期时间 */ - public static String timestampToTime(long mills) { - SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); - return millsFormat.format(mills); + public static String timestampToCompleteDate(long millSeconds) { + return allDateFormat.format(new Date(millSeconds)); } /** * 时间戳转日期 */ - public static String timestampToDate(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); + public static String timestampToDate(long millSeconds) { + return dateFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转时间 + */ + public static String timestampToTime(long millSeconds) { + return timeFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转分秒 + */ + public static String millsToTime(long millSeconds) { + return millsFormat.format(new Date(millSeconds)); } } diff --git a/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java new file mode 100644 index 0000000..2f22e31 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java @@ -0,0 +1,15 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface ICompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + void onSuccess(File file); + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + void onError(Throwable e); +} diff --git a/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java new file mode 100644 index 0000000..979a7f1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java @@ -0,0 +1,9 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface IWaterMarkAddListener { + void onSuccess(File file); + + void onError(Throwable e); +} 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 04d396f..6e7aae1 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 @@ -14,6 +14,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -444,10 +445,10 @@ /** * 公厕打扫签到 *

- * http://111.198.10.15:11409/toiletClean/add + * http://111.198.10.15:11409/sanitation/toiletClean/add */ @FormUrlEncoded - @POST("/toiletClean/add") + @POST("/sanitation/toiletClean/add") Observable cleanToilet(@Header("token") String token, @Field("toiletId") String toiletId, @Field("userId") String userId, @@ -456,4 +457,16 @@ @Field("cleanTime") String cleanTime, @Field("photo") String photo, @Field("workContent") String workContent); + + /** + * 公厕打扫记录 + *

+ * http://111.198.10.15:11409/sanitation/toiletClean/listPage + */ + @GET("/sanitation/toiletClean/listPage") + Observable obtainToiletCleanRecord(@Header("token") String token, + @Query("userId") String userId, + @Query("keywords") String keywords, + @Query("beginDate") String beginDate, + @Query("endDate") String endDate); } 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 d2e73ee..aeec792 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 @@ -1,10 +1,7 @@ package com.casic.dcms.utils.retrofit; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.util.Log; -import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.bean.CaseCheckBean; import com.casic.dcms.bean.CaseCheckedBean; @@ -19,6 +16,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -35,10 +33,7 @@ import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.HttpConfig; -import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import org.jetbrains.annotations.NotNull; @@ -296,16 +291,9 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ public static Observable getImageUploadResult(File image) { - //改为上传带水印的图片 - Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath()); - String path = OtherUtils.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, - StringHelper.getUserAccount(), - TimeOrDateUtil.timestampToDate("yyy-MM-dd"), - TimeOrDateUtil.timestampToTime("HH:mm:ss")); - Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), new File(path)); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), image); MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", image.getName(), requestBody); return service.uploadImage(AuthenticationHelper.getToken(), imagePart); } @@ -515,4 +503,14 @@ return service.cleanToilet(AuthenticationHelper.getToken(), toiletId, userId, lng, lat, cleanTime, photo, workContent); } + + /** + * 公厕打扫记录 + */ + public static Observable getCleanRecordResult(String userId, String keywords, + String beginDate, String endDate) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java new file mode 100644 index 0000000..1e43b87 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -0,0 +1,91 @@ +package com.casic.dcms.widgets; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.TimeOrDateUtil; + +import java.util.Timer; +import java.util.TimerTask; + +public class SignInDialog extends Dialog implements View.OnClickListener { + + private static final String TAG = "SignInDialog"; + private String address; + private OnDialogClickListener listener; + + private SignInDialog(Builder builder) { + super(builder.mContext); + this.address = builder.address; + this.listener = builder.listener; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_sign_in); + initView(); + } + + private void initView() { + TextView clockView = findViewById(R.id.clockView); + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.millsToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); + TextView signInPlaceView = findViewById(R.id.signInPlaceView); + if (!TextUtils.isEmpty(address)) { + signInPlaceView.setText(address); + } + TextView signInView = findViewById(R.id.signInView); + signInView.setOnClickListener(this); + } + + @Override + public void onClick(View view) { + int i = view.getId(); + if (i == R.id.signInView) { + if (listener != null) { + listener.onViewClick(); + } + } + this.dismiss(); + } + + public static class Builder { + private Context mContext; + private String address; + private OnDialogClickListener listener; + + public Builder setContext(Context context) { + this.mContext = context; + return this; + } + + public Builder setAddress(String address) { + this.address = address; + return this; + } + + public Builder setOnDialogClickListener(OnDialogClickListener listener) { + this.listener = listener; + return this; + } + + public SignInDialog build() { + return new SignInDialog(this); + } + } + + public interface OnDialogClickListener { + void onViewClick(); + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_more.xml b/app/src/main/res/drawable/ic_more.xml index aa71aad..da5378e 100644 --- a/app/src/main/res/drawable/ic_more.xml +++ b/app/src/main/res/drawable/ic_more.xml @@ -1,9 +1,9 @@ diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml new file mode 100644 index 0000000..ddf926b --- /dev/null +++ b/app/src/main/res/drawable/ic_search.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_sign.xml b/app/src/main/res/drawable/ic_sign.xml new file mode 100644 index 0000000..f914440 --- /dev/null +++ b/app/src/main/res/drawable/ic_sign.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml new file mode 100644 index 0000000..eb35023 --- /dev/null +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_toilet.xml b/app/src/main/res/layout/activity_toilet.xml index 1319356..d230b14 100644 --- a/app/src/main/res/layout/activity_toilet.xml +++ b/app/src/main/res/layout/activity_toilet.xml @@ -63,36 +63,6 @@ android:layout_height="wrap_content" android:orientation="vertical"> - - - - - - - - - + + + + + + + + - + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java new file mode 100644 index 0000000..b7778b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -0,0 +1,166 @@ +package com.casic.dcms.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; + +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.utils.callback.ICompressListener; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.io.File; +import java.io.FileOutputStream; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; + +public class ImageHelper { + /** + * 绘制文字到右下角并压缩图片 + */ + public static void drawTextToRightBottom(Context context, final Bitmap bitmap, String name, String date, + String time, IWaterMarkAddListener markAddListener) { + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + //初始化画笔 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(Color.RED); + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + paint.setTextSize(QMUIDisplayHelper.sp2px(context, 50)); + Rect nameBounds = new Rect(); + paint.getTextBounds(name, 0, name.length(), nameBounds); + Rect dateBounds = new Rect(); + paint.getTextBounds(date, 0, date.length(), dateBounds); + Rect timeBounds = new Rect(); + paint.getTextBounds(time, 0, time.length(), timeBounds); + + //添加水印 + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + if (bitmapConfig == null) { + bitmapConfig = Bitmap.Config.RGB_565; + } + Bitmap copyBitmap = bitmap.copy(bitmapConfig, true); + + Canvas canvas = new Canvas(copyBitmap); + final int bitmapWidth = copyBitmap.getWidth(); + final int bitmapHeight = copyBitmap.getHeight(); + final int padding = QMUIDisplayHelper.dp2px(context, 20);//两行水印间的间距 + final int paddingRight = QMUIDisplayHelper.dp2px(context, 20); + final int paddingBottom = QMUIDisplayHelper.dp2px(context, 20); + //有几行就写几行 + canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, + bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), paint); + canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, + bitmapHeight - (timeBounds.height() + padding + paddingBottom), paint); + canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, + bitmapHeight - paddingBottom, paint); + + //将带有水印的图片保存 + File file = FileUtils.getWaterImageFile(); + try { + FileOutputStream fos = new FileOutputStream(file); + copyBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + subscriber.onNext(file); + } + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(File file) { + //压缩图片 + Luban.with(context).load(file.getPath()).ignoreBy(100) + .setTargetDir(FileUtils.getImageCompressPath()) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + markAddListener.onSuccess(file); + } else { + markAddListener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + markAddListener.onError(e); + } + }).launch(); + } + }); + } + + /** + * 压缩图片 + */ + public static void compressImage(String imagePath, String targetDir, ICompressListener listener) { + Luban.with(BaseApplication.getInstance()) + .load(imagePath) + .ignoreBy(100) + .setTargetDir(targetDir) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + listener.onSuccess(file); + } else { + listener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + listener.onError(e); + } + }).launch(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 55a56a3..8872825 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -5,92 +5,22 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.Build; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.Log; import androidx.core.app.ActivityCompat; import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; -import com.casic.dcms.utils.callback.IDownloadListener; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import org.jetbrains.annotations.NotNull; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; - public class OtherUtils { private static final String TAG = "OtherUtils"; - /** - * 绘制文字到右下角 - */ - public static String drawTextToRightBottom(Context context, Bitmap bitmap, String name, String date, String time) { - //初始化画笔 - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(Color.RED); - paint.setDither(true); // 获取跟清晰的图像采样 - paint.setFilterBitmap(true);// 过滤一些 - paint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - Rect nameBounds = new Rect(); - paint.getTextBounds(name, 0, name.length(), nameBounds); - Rect dateBounds = new Rect(); - paint.getTextBounds(date, 0, date.length(), dateBounds); - Rect timeBounds = new Rect(); - paint.getTextBounds(time, 0, time.length(), timeBounds); - - //添加水印 - android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); - if (bitmapConfig == null) { - bitmapConfig = Bitmap.Config.RGB_565; - } - bitmap = bitmap.copy(bitmapConfig, true); - - Canvas canvas = new Canvas(bitmap); - final int bitmapWidth = bitmap.getWidth(); - final int bitmapHeight = bitmap.getHeight(); - final int paddingRight = QMUIDisplayHelper.dp2px(context, 10); - //有几行就写几行 - canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 55), paint); - canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 30), paint); - canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 10), paint); - - //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); - try { - FileOutputStream fos = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return file.getAbsolutePath(); - } - //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { Intent intent = new Intent(context, BigImageActivity.class); @@ -137,60 +67,4 @@ } return ""; } - - public static void downloadFile(String url, IDownloadListener listener) { - OkHttpClient okHttpClient = new OkHttpClient(); - Request request = new Request.Builder().get().url(url).build(); - okHttpClient.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - e.printStackTrace(); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - InputStream is = null; - byte[] buf = new byte[2048]; - int len; - FileOutputStream fos = null; - // 储存下载文件的目录 - String savePath = FileUtils.getDownloadFilePath(); - try { - ResponseBody body = response.body(); - if (body != null) { - is = body.byteStream(); - long total = body.contentLength(); - listener.onDownloadStart(total); - File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); - fos = new FileOutputStream(file); - long sum = 0; - while ((len = is.read(buf)) != -1) { - fos.write(buf, 0, len); - sum += len; - listener.onProgressChanged(sum); - } - fos.flush(); - listener.onDownloadEnd(file); - } else { - Log.d(TAG, "onResponse: body is null"); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (is != null) - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (fos != null) - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 72ccfdb..1b390a7 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -12,27 +12,37 @@ **/ @SuppressLint("SimpleDateFormat") public class TimeOrDateUtil { - /** - * 时间戳转时间 - */ - public static String timestampToTime(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); - } + private static final String TAG = "TimeOrDateUtil"; + private static final SimpleDateFormat allDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); + private static final SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); /** - * 时间戳转时间 + * 时间戳转完整日期时间 */ - public static String timestampToTime(long mills) { - SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); - return millsFormat.format(mills); + public static String timestampToCompleteDate(long millSeconds) { + return allDateFormat.format(new Date(millSeconds)); } /** * 时间戳转日期 */ - public static String timestampToDate(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); + public static String timestampToDate(long millSeconds) { + return dateFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转时间 + */ + public static String timestampToTime(long millSeconds) { + return timeFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转分秒 + */ + public static String millsToTime(long millSeconds) { + return millsFormat.format(new Date(millSeconds)); } } diff --git a/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java new file mode 100644 index 0000000..2f22e31 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java @@ -0,0 +1,15 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface ICompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + void onSuccess(File file); + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + void onError(Throwable e); +} diff --git a/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java new file mode 100644 index 0000000..979a7f1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java @@ -0,0 +1,9 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface IWaterMarkAddListener { + void onSuccess(File file); + + void onError(Throwable e); +} 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 04d396f..6e7aae1 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 @@ -14,6 +14,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -444,10 +445,10 @@ /** * 公厕打扫签到 *

- * http://111.198.10.15:11409/toiletClean/add + * http://111.198.10.15:11409/sanitation/toiletClean/add */ @FormUrlEncoded - @POST("/toiletClean/add") + @POST("/sanitation/toiletClean/add") Observable cleanToilet(@Header("token") String token, @Field("toiletId") String toiletId, @Field("userId") String userId, @@ -456,4 +457,16 @@ @Field("cleanTime") String cleanTime, @Field("photo") String photo, @Field("workContent") String workContent); + + /** + * 公厕打扫记录 + *

+ * http://111.198.10.15:11409/sanitation/toiletClean/listPage + */ + @GET("/sanitation/toiletClean/listPage") + Observable obtainToiletCleanRecord(@Header("token") String token, + @Query("userId") String userId, + @Query("keywords") String keywords, + @Query("beginDate") String beginDate, + @Query("endDate") String endDate); } 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 d2e73ee..aeec792 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 @@ -1,10 +1,7 @@ package com.casic.dcms.utils.retrofit; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.util.Log; -import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.bean.CaseCheckBean; import com.casic.dcms.bean.CaseCheckedBean; @@ -19,6 +16,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -35,10 +33,7 @@ import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.HttpConfig; -import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import org.jetbrains.annotations.NotNull; @@ -296,16 +291,9 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ public static Observable getImageUploadResult(File image) { - //改为上传带水印的图片 - Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath()); - String path = OtherUtils.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, - StringHelper.getUserAccount(), - TimeOrDateUtil.timestampToDate("yyy-MM-dd"), - TimeOrDateUtil.timestampToTime("HH:mm:ss")); - Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), new File(path)); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), image); MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", image.getName(), requestBody); return service.uploadImage(AuthenticationHelper.getToken(), imagePart); } @@ -515,4 +503,14 @@ return service.cleanToilet(AuthenticationHelper.getToken(), toiletId, userId, lng, lat, cleanTime, photo, workContent); } + + /** + * 公厕打扫记录 + */ + public static Observable getCleanRecordResult(String userId, String keywords, + String beginDate, String endDate) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java new file mode 100644 index 0000000..1e43b87 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -0,0 +1,91 @@ +package com.casic.dcms.widgets; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.TimeOrDateUtil; + +import java.util.Timer; +import java.util.TimerTask; + +public class SignInDialog extends Dialog implements View.OnClickListener { + + private static final String TAG = "SignInDialog"; + private String address; + private OnDialogClickListener listener; + + private SignInDialog(Builder builder) { + super(builder.mContext); + this.address = builder.address; + this.listener = builder.listener; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_sign_in); + initView(); + } + + private void initView() { + TextView clockView = findViewById(R.id.clockView); + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.millsToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); + TextView signInPlaceView = findViewById(R.id.signInPlaceView); + if (!TextUtils.isEmpty(address)) { + signInPlaceView.setText(address); + } + TextView signInView = findViewById(R.id.signInView); + signInView.setOnClickListener(this); + } + + @Override + public void onClick(View view) { + int i = view.getId(); + if (i == R.id.signInView) { + if (listener != null) { + listener.onViewClick(); + } + } + this.dismiss(); + } + + public static class Builder { + private Context mContext; + private String address; + private OnDialogClickListener listener; + + public Builder setContext(Context context) { + this.mContext = context; + return this; + } + + public Builder setAddress(String address) { + this.address = address; + return this; + } + + public Builder setOnDialogClickListener(OnDialogClickListener listener) { + this.listener = listener; + return this; + } + + public SignInDialog build() { + return new SignInDialog(this); + } + } + + public interface OnDialogClickListener { + void onViewClick(); + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_more.xml b/app/src/main/res/drawable/ic_more.xml index aa71aad..da5378e 100644 --- a/app/src/main/res/drawable/ic_more.xml +++ b/app/src/main/res/drawable/ic_more.xml @@ -1,9 +1,9 @@ diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml new file mode 100644 index 0000000..ddf926b --- /dev/null +++ b/app/src/main/res/drawable/ic_search.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_sign.xml b/app/src/main/res/drawable/ic_sign.xml new file mode 100644 index 0000000..f914440 --- /dev/null +++ b/app/src/main/res/drawable/ic_sign.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml new file mode 100644 index 0000000..eb35023 --- /dev/null +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_toilet.xml b/app/src/main/res/layout/activity_toilet.xml index 1319356..d230b14 100644 --- a/app/src/main/res/layout/activity_toilet.xml +++ b/app/src/main/res/layout/activity_toilet.xml @@ -63,36 +63,6 @@ android:layout_height="wrap_content" android:orientation="vertical"> - - - - - - - - - + + + + + + + + - + + + + + + + + + + + + + + + + + + diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java new file mode 100644 index 0000000..b7778b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -0,0 +1,166 @@ +package com.casic.dcms.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; + +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.utils.callback.ICompressListener; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.io.File; +import java.io.FileOutputStream; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; + +public class ImageHelper { + /** + * 绘制文字到右下角并压缩图片 + */ + public static void drawTextToRightBottom(Context context, final Bitmap bitmap, String name, String date, + String time, IWaterMarkAddListener markAddListener) { + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + //初始化画笔 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(Color.RED); + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + paint.setTextSize(QMUIDisplayHelper.sp2px(context, 50)); + Rect nameBounds = new Rect(); + paint.getTextBounds(name, 0, name.length(), nameBounds); + Rect dateBounds = new Rect(); + paint.getTextBounds(date, 0, date.length(), dateBounds); + Rect timeBounds = new Rect(); + paint.getTextBounds(time, 0, time.length(), timeBounds); + + //添加水印 + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + if (bitmapConfig == null) { + bitmapConfig = Bitmap.Config.RGB_565; + } + Bitmap copyBitmap = bitmap.copy(bitmapConfig, true); + + Canvas canvas = new Canvas(copyBitmap); + final int bitmapWidth = copyBitmap.getWidth(); + final int bitmapHeight = copyBitmap.getHeight(); + final int padding = QMUIDisplayHelper.dp2px(context, 20);//两行水印间的间距 + final int paddingRight = QMUIDisplayHelper.dp2px(context, 20); + final int paddingBottom = QMUIDisplayHelper.dp2px(context, 20); + //有几行就写几行 + canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, + bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), paint); + canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, + bitmapHeight - (timeBounds.height() + padding + paddingBottom), paint); + canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, + bitmapHeight - paddingBottom, paint); + + //将带有水印的图片保存 + File file = FileUtils.getWaterImageFile(); + try { + FileOutputStream fos = new FileOutputStream(file); + copyBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + subscriber.onNext(file); + } + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(File file) { + //压缩图片 + Luban.with(context).load(file.getPath()).ignoreBy(100) + .setTargetDir(FileUtils.getImageCompressPath()) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + markAddListener.onSuccess(file); + } else { + markAddListener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + markAddListener.onError(e); + } + }).launch(); + } + }); + } + + /** + * 压缩图片 + */ + public static void compressImage(String imagePath, String targetDir, ICompressListener listener) { + Luban.with(BaseApplication.getInstance()) + .load(imagePath) + .ignoreBy(100) + .setTargetDir(targetDir) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + listener.onSuccess(file); + } else { + listener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + listener.onError(e); + } + }).launch(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 55a56a3..8872825 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -5,92 +5,22 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.Build; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.Log; import androidx.core.app.ActivityCompat; import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; -import com.casic.dcms.utils.callback.IDownloadListener; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import org.jetbrains.annotations.NotNull; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; - public class OtherUtils { private static final String TAG = "OtherUtils"; - /** - * 绘制文字到右下角 - */ - public static String drawTextToRightBottom(Context context, Bitmap bitmap, String name, String date, String time) { - //初始化画笔 - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(Color.RED); - paint.setDither(true); // 获取跟清晰的图像采样 - paint.setFilterBitmap(true);// 过滤一些 - paint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - Rect nameBounds = new Rect(); - paint.getTextBounds(name, 0, name.length(), nameBounds); - Rect dateBounds = new Rect(); - paint.getTextBounds(date, 0, date.length(), dateBounds); - Rect timeBounds = new Rect(); - paint.getTextBounds(time, 0, time.length(), timeBounds); - - //添加水印 - android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); - if (bitmapConfig == null) { - bitmapConfig = Bitmap.Config.RGB_565; - } - bitmap = bitmap.copy(bitmapConfig, true); - - Canvas canvas = new Canvas(bitmap); - final int bitmapWidth = bitmap.getWidth(); - final int bitmapHeight = bitmap.getHeight(); - final int paddingRight = QMUIDisplayHelper.dp2px(context, 10); - //有几行就写几行 - canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 55), paint); - canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 30), paint); - canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 10), paint); - - //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); - try { - FileOutputStream fos = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return file.getAbsolutePath(); - } - //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { Intent intent = new Intent(context, BigImageActivity.class); @@ -137,60 +67,4 @@ } return ""; } - - public static void downloadFile(String url, IDownloadListener listener) { - OkHttpClient okHttpClient = new OkHttpClient(); - Request request = new Request.Builder().get().url(url).build(); - okHttpClient.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - e.printStackTrace(); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - InputStream is = null; - byte[] buf = new byte[2048]; - int len; - FileOutputStream fos = null; - // 储存下载文件的目录 - String savePath = FileUtils.getDownloadFilePath(); - try { - ResponseBody body = response.body(); - if (body != null) { - is = body.byteStream(); - long total = body.contentLength(); - listener.onDownloadStart(total); - File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); - fos = new FileOutputStream(file); - long sum = 0; - while ((len = is.read(buf)) != -1) { - fos.write(buf, 0, len); - sum += len; - listener.onProgressChanged(sum); - } - fos.flush(); - listener.onDownloadEnd(file); - } else { - Log.d(TAG, "onResponse: body is null"); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (is != null) - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (fos != null) - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 72ccfdb..1b390a7 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -12,27 +12,37 @@ **/ @SuppressLint("SimpleDateFormat") public class TimeOrDateUtil { - /** - * 时间戳转时间 - */ - public static String timestampToTime(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); - } + private static final String TAG = "TimeOrDateUtil"; + private static final SimpleDateFormat allDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); + private static final SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); /** - * 时间戳转时间 + * 时间戳转完整日期时间 */ - public static String timestampToTime(long mills) { - SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); - return millsFormat.format(mills); + public static String timestampToCompleteDate(long millSeconds) { + return allDateFormat.format(new Date(millSeconds)); } /** * 时间戳转日期 */ - public static String timestampToDate(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); + public static String timestampToDate(long millSeconds) { + return dateFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转时间 + */ + public static String timestampToTime(long millSeconds) { + return timeFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转分秒 + */ + public static String millsToTime(long millSeconds) { + return millsFormat.format(new Date(millSeconds)); } } diff --git a/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java new file mode 100644 index 0000000..2f22e31 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java @@ -0,0 +1,15 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface ICompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + void onSuccess(File file); + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + void onError(Throwable e); +} diff --git a/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java new file mode 100644 index 0000000..979a7f1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java @@ -0,0 +1,9 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface IWaterMarkAddListener { + void onSuccess(File file); + + void onError(Throwable e); +} 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 04d396f..6e7aae1 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 @@ -14,6 +14,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -444,10 +445,10 @@ /** * 公厕打扫签到 *

- * http://111.198.10.15:11409/toiletClean/add + * http://111.198.10.15:11409/sanitation/toiletClean/add */ @FormUrlEncoded - @POST("/toiletClean/add") + @POST("/sanitation/toiletClean/add") Observable cleanToilet(@Header("token") String token, @Field("toiletId") String toiletId, @Field("userId") String userId, @@ -456,4 +457,16 @@ @Field("cleanTime") String cleanTime, @Field("photo") String photo, @Field("workContent") String workContent); + + /** + * 公厕打扫记录 + *

+ * http://111.198.10.15:11409/sanitation/toiletClean/listPage + */ + @GET("/sanitation/toiletClean/listPage") + Observable obtainToiletCleanRecord(@Header("token") String token, + @Query("userId") String userId, + @Query("keywords") String keywords, + @Query("beginDate") String beginDate, + @Query("endDate") String endDate); } 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 d2e73ee..aeec792 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 @@ -1,10 +1,7 @@ package com.casic.dcms.utils.retrofit; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.util.Log; -import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.bean.CaseCheckBean; import com.casic.dcms.bean.CaseCheckedBean; @@ -19,6 +16,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -35,10 +33,7 @@ import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.HttpConfig; -import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import org.jetbrains.annotations.NotNull; @@ -296,16 +291,9 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ public static Observable getImageUploadResult(File image) { - //改为上传带水印的图片 - Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath()); - String path = OtherUtils.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, - StringHelper.getUserAccount(), - TimeOrDateUtil.timestampToDate("yyy-MM-dd"), - TimeOrDateUtil.timestampToTime("HH:mm:ss")); - Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), new File(path)); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), image); MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", image.getName(), requestBody); return service.uploadImage(AuthenticationHelper.getToken(), imagePart); } @@ -515,4 +503,14 @@ return service.cleanToilet(AuthenticationHelper.getToken(), toiletId, userId, lng, lat, cleanTime, photo, workContent); } + + /** + * 公厕打扫记录 + */ + public static Observable getCleanRecordResult(String userId, String keywords, + String beginDate, String endDate) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java new file mode 100644 index 0000000..1e43b87 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -0,0 +1,91 @@ +package com.casic.dcms.widgets; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.TimeOrDateUtil; + +import java.util.Timer; +import java.util.TimerTask; + +public class SignInDialog extends Dialog implements View.OnClickListener { + + private static final String TAG = "SignInDialog"; + private String address; + private OnDialogClickListener listener; + + private SignInDialog(Builder builder) { + super(builder.mContext); + this.address = builder.address; + this.listener = builder.listener; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_sign_in); + initView(); + } + + private void initView() { + TextView clockView = findViewById(R.id.clockView); + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.millsToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); + TextView signInPlaceView = findViewById(R.id.signInPlaceView); + if (!TextUtils.isEmpty(address)) { + signInPlaceView.setText(address); + } + TextView signInView = findViewById(R.id.signInView); + signInView.setOnClickListener(this); + } + + @Override + public void onClick(View view) { + int i = view.getId(); + if (i == R.id.signInView) { + if (listener != null) { + listener.onViewClick(); + } + } + this.dismiss(); + } + + public static class Builder { + private Context mContext; + private String address; + private OnDialogClickListener listener; + + public Builder setContext(Context context) { + this.mContext = context; + return this; + } + + public Builder setAddress(String address) { + this.address = address; + return this; + } + + public Builder setOnDialogClickListener(OnDialogClickListener listener) { + this.listener = listener; + return this; + } + + public SignInDialog build() { + return new SignInDialog(this); + } + } + + public interface OnDialogClickListener { + void onViewClick(); + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_more.xml b/app/src/main/res/drawable/ic_more.xml index aa71aad..da5378e 100644 --- a/app/src/main/res/drawable/ic_more.xml +++ b/app/src/main/res/drawable/ic_more.xml @@ -1,9 +1,9 @@ diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml new file mode 100644 index 0000000..ddf926b --- /dev/null +++ b/app/src/main/res/drawable/ic_search.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_sign.xml b/app/src/main/res/drawable/ic_sign.xml new file mode 100644 index 0000000..f914440 --- /dev/null +++ b/app/src/main/res/drawable/ic_sign.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml new file mode 100644 index 0000000..eb35023 --- /dev/null +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_toilet.xml b/app/src/main/res/layout/activity_toilet.xml index 1319356..d230b14 100644 --- a/app/src/main/res/layout/activity_toilet.xml +++ b/app/src/main/res/layout/activity_toilet.xml @@ -63,36 +63,6 @@ android:layout_height="wrap_content" android:orientation="vertical"> - - - - - - - - - + + + + + + + + - + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_sign_in.xml b/app/src/main/res/layout/dialog_sign_in.xml new file mode 100644 index 0000000..245dc09 --- /dev/null +++ b/app/src/main/res/layout/dialog_sign_in.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java new file mode 100644 index 0000000..b7778b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -0,0 +1,166 @@ +package com.casic.dcms.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; + +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.utils.callback.ICompressListener; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.io.File; +import java.io.FileOutputStream; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; + +public class ImageHelper { + /** + * 绘制文字到右下角并压缩图片 + */ + public static void drawTextToRightBottom(Context context, final Bitmap bitmap, String name, String date, + String time, IWaterMarkAddListener markAddListener) { + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + //初始化画笔 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(Color.RED); + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + paint.setTextSize(QMUIDisplayHelper.sp2px(context, 50)); + Rect nameBounds = new Rect(); + paint.getTextBounds(name, 0, name.length(), nameBounds); + Rect dateBounds = new Rect(); + paint.getTextBounds(date, 0, date.length(), dateBounds); + Rect timeBounds = new Rect(); + paint.getTextBounds(time, 0, time.length(), timeBounds); + + //添加水印 + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + if (bitmapConfig == null) { + bitmapConfig = Bitmap.Config.RGB_565; + } + Bitmap copyBitmap = bitmap.copy(bitmapConfig, true); + + Canvas canvas = new Canvas(copyBitmap); + final int bitmapWidth = copyBitmap.getWidth(); + final int bitmapHeight = copyBitmap.getHeight(); + final int padding = QMUIDisplayHelper.dp2px(context, 20);//两行水印间的间距 + final int paddingRight = QMUIDisplayHelper.dp2px(context, 20); + final int paddingBottom = QMUIDisplayHelper.dp2px(context, 20); + //有几行就写几行 + canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, + bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), paint); + canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, + bitmapHeight - (timeBounds.height() + padding + paddingBottom), paint); + canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, + bitmapHeight - paddingBottom, paint); + + //将带有水印的图片保存 + File file = FileUtils.getWaterImageFile(); + try { + FileOutputStream fos = new FileOutputStream(file); + copyBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + subscriber.onNext(file); + } + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(File file) { + //压缩图片 + Luban.with(context).load(file.getPath()).ignoreBy(100) + .setTargetDir(FileUtils.getImageCompressPath()) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + markAddListener.onSuccess(file); + } else { + markAddListener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + markAddListener.onError(e); + } + }).launch(); + } + }); + } + + /** + * 压缩图片 + */ + public static void compressImage(String imagePath, String targetDir, ICompressListener listener) { + Luban.with(BaseApplication.getInstance()) + .load(imagePath) + .ignoreBy(100) + .setTargetDir(targetDir) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + listener.onSuccess(file); + } else { + listener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + listener.onError(e); + } + }).launch(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 55a56a3..8872825 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -5,92 +5,22 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.Build; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.Log; import androidx.core.app.ActivityCompat; import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; -import com.casic.dcms.utils.callback.IDownloadListener; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import org.jetbrains.annotations.NotNull; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; - public class OtherUtils { private static final String TAG = "OtherUtils"; - /** - * 绘制文字到右下角 - */ - public static String drawTextToRightBottom(Context context, Bitmap bitmap, String name, String date, String time) { - //初始化画笔 - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(Color.RED); - paint.setDither(true); // 获取跟清晰的图像采样 - paint.setFilterBitmap(true);// 过滤一些 - paint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - Rect nameBounds = new Rect(); - paint.getTextBounds(name, 0, name.length(), nameBounds); - Rect dateBounds = new Rect(); - paint.getTextBounds(date, 0, date.length(), dateBounds); - Rect timeBounds = new Rect(); - paint.getTextBounds(time, 0, time.length(), timeBounds); - - //添加水印 - android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); - if (bitmapConfig == null) { - bitmapConfig = Bitmap.Config.RGB_565; - } - bitmap = bitmap.copy(bitmapConfig, true); - - Canvas canvas = new Canvas(bitmap); - final int bitmapWidth = bitmap.getWidth(); - final int bitmapHeight = bitmap.getHeight(); - final int paddingRight = QMUIDisplayHelper.dp2px(context, 10); - //有几行就写几行 - canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 55), paint); - canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 30), paint); - canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 10), paint); - - //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); - try { - FileOutputStream fos = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return file.getAbsolutePath(); - } - //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { Intent intent = new Intent(context, BigImageActivity.class); @@ -137,60 +67,4 @@ } return ""; } - - public static void downloadFile(String url, IDownloadListener listener) { - OkHttpClient okHttpClient = new OkHttpClient(); - Request request = new Request.Builder().get().url(url).build(); - okHttpClient.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - e.printStackTrace(); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - InputStream is = null; - byte[] buf = new byte[2048]; - int len; - FileOutputStream fos = null; - // 储存下载文件的目录 - String savePath = FileUtils.getDownloadFilePath(); - try { - ResponseBody body = response.body(); - if (body != null) { - is = body.byteStream(); - long total = body.contentLength(); - listener.onDownloadStart(total); - File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); - fos = new FileOutputStream(file); - long sum = 0; - while ((len = is.read(buf)) != -1) { - fos.write(buf, 0, len); - sum += len; - listener.onProgressChanged(sum); - } - fos.flush(); - listener.onDownloadEnd(file); - } else { - Log.d(TAG, "onResponse: body is null"); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (is != null) - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (fos != null) - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 72ccfdb..1b390a7 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -12,27 +12,37 @@ **/ @SuppressLint("SimpleDateFormat") public class TimeOrDateUtil { - /** - * 时间戳转时间 - */ - public static String timestampToTime(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); - } + private static final String TAG = "TimeOrDateUtil"; + private static final SimpleDateFormat allDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); + private static final SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); /** - * 时间戳转时间 + * 时间戳转完整日期时间 */ - public static String timestampToTime(long mills) { - SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); - return millsFormat.format(mills); + public static String timestampToCompleteDate(long millSeconds) { + return allDateFormat.format(new Date(millSeconds)); } /** * 时间戳转日期 */ - public static String timestampToDate(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); + public static String timestampToDate(long millSeconds) { + return dateFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转时间 + */ + public static String timestampToTime(long millSeconds) { + return timeFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转分秒 + */ + public static String millsToTime(long millSeconds) { + return millsFormat.format(new Date(millSeconds)); } } diff --git a/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java new file mode 100644 index 0000000..2f22e31 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java @@ -0,0 +1,15 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface ICompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + void onSuccess(File file); + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + void onError(Throwable e); +} diff --git a/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java new file mode 100644 index 0000000..979a7f1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java @@ -0,0 +1,9 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface IWaterMarkAddListener { + void onSuccess(File file); + + void onError(Throwable e); +} 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 04d396f..6e7aae1 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 @@ -14,6 +14,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -444,10 +445,10 @@ /** * 公厕打扫签到 *

- * http://111.198.10.15:11409/toiletClean/add + * http://111.198.10.15:11409/sanitation/toiletClean/add */ @FormUrlEncoded - @POST("/toiletClean/add") + @POST("/sanitation/toiletClean/add") Observable cleanToilet(@Header("token") String token, @Field("toiletId") String toiletId, @Field("userId") String userId, @@ -456,4 +457,16 @@ @Field("cleanTime") String cleanTime, @Field("photo") String photo, @Field("workContent") String workContent); + + /** + * 公厕打扫记录 + *

+ * http://111.198.10.15:11409/sanitation/toiletClean/listPage + */ + @GET("/sanitation/toiletClean/listPage") + Observable obtainToiletCleanRecord(@Header("token") String token, + @Query("userId") String userId, + @Query("keywords") String keywords, + @Query("beginDate") String beginDate, + @Query("endDate") String endDate); } 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 d2e73ee..aeec792 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 @@ -1,10 +1,7 @@ package com.casic.dcms.utils.retrofit; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.util.Log; -import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.bean.CaseCheckBean; import com.casic.dcms.bean.CaseCheckedBean; @@ -19,6 +16,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -35,10 +33,7 @@ import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.HttpConfig; -import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import org.jetbrains.annotations.NotNull; @@ -296,16 +291,9 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ public static Observable getImageUploadResult(File image) { - //改为上传带水印的图片 - Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath()); - String path = OtherUtils.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, - StringHelper.getUserAccount(), - TimeOrDateUtil.timestampToDate("yyy-MM-dd"), - TimeOrDateUtil.timestampToTime("HH:mm:ss")); - Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), new File(path)); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), image); MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", image.getName(), requestBody); return service.uploadImage(AuthenticationHelper.getToken(), imagePart); } @@ -515,4 +503,14 @@ return service.cleanToilet(AuthenticationHelper.getToken(), toiletId, userId, lng, lat, cleanTime, photo, workContent); } + + /** + * 公厕打扫记录 + */ + public static Observable getCleanRecordResult(String userId, String keywords, + String beginDate, String endDate) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java new file mode 100644 index 0000000..1e43b87 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -0,0 +1,91 @@ +package com.casic.dcms.widgets; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.TimeOrDateUtil; + +import java.util.Timer; +import java.util.TimerTask; + +public class SignInDialog extends Dialog implements View.OnClickListener { + + private static final String TAG = "SignInDialog"; + private String address; + private OnDialogClickListener listener; + + private SignInDialog(Builder builder) { + super(builder.mContext); + this.address = builder.address; + this.listener = builder.listener; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_sign_in); + initView(); + } + + private void initView() { + TextView clockView = findViewById(R.id.clockView); + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.millsToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); + TextView signInPlaceView = findViewById(R.id.signInPlaceView); + if (!TextUtils.isEmpty(address)) { + signInPlaceView.setText(address); + } + TextView signInView = findViewById(R.id.signInView); + signInView.setOnClickListener(this); + } + + @Override + public void onClick(View view) { + int i = view.getId(); + if (i == R.id.signInView) { + if (listener != null) { + listener.onViewClick(); + } + } + this.dismiss(); + } + + public static class Builder { + private Context mContext; + private String address; + private OnDialogClickListener listener; + + public Builder setContext(Context context) { + this.mContext = context; + return this; + } + + public Builder setAddress(String address) { + this.address = address; + return this; + } + + public Builder setOnDialogClickListener(OnDialogClickListener listener) { + this.listener = listener; + return this; + } + + public SignInDialog build() { + return new SignInDialog(this); + } + } + + public interface OnDialogClickListener { + void onViewClick(); + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_more.xml b/app/src/main/res/drawable/ic_more.xml index aa71aad..da5378e 100644 --- a/app/src/main/res/drawable/ic_more.xml +++ b/app/src/main/res/drawable/ic_more.xml @@ -1,9 +1,9 @@ diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml new file mode 100644 index 0000000..ddf926b --- /dev/null +++ b/app/src/main/res/drawable/ic_search.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_sign.xml b/app/src/main/res/drawable/ic_sign.xml new file mode 100644 index 0000000..f914440 --- /dev/null +++ b/app/src/main/res/drawable/ic_sign.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml new file mode 100644 index 0000000..eb35023 --- /dev/null +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_toilet.xml b/app/src/main/res/layout/activity_toilet.xml index 1319356..d230b14 100644 --- a/app/src/main/res/layout/activity_toilet.xml +++ b/app/src/main/res/layout/activity_toilet.xml @@ -63,36 +63,6 @@ android:layout_height="wrap_content" android:orientation="vertical"> - - - - - - - - - + + + + + + + + - + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_sign_in.xml b/app/src/main/res/layout/dialog_sign_in.xml new file mode 100644 index 0000000..245dc09 --- /dev/null +++ b/app/src/main/res/layout/dialog_sign_in.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_record_recycleview.xml b/app/src/main/res/layout/item_record_recycleview.xml new file mode 100644 index 0000000..dd29b50 --- /dev/null +++ b/app/src/main/res/layout/item_record_recycleview.xml @@ -0,0 +1,31 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index f5edb66..4e8aa5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 15 - versionName "v1.0.0.7" + versionCode 16 + versionName "v1.0.0.8" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } @@ -99,4 +99,6 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //图片压缩 + implementation 'top.zibin:Luban:1.1.8' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4a50de..6ea35aa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,6 +80,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java new file mode 100644 index 0000000..b7778b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -0,0 +1,166 @@ +package com.casic.dcms.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; + +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.utils.callback.ICompressListener; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.io.File; +import java.io.FileOutputStream; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; + +public class ImageHelper { + /** + * 绘制文字到右下角并压缩图片 + */ + public static void drawTextToRightBottom(Context context, final Bitmap bitmap, String name, String date, + String time, IWaterMarkAddListener markAddListener) { + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + //初始化画笔 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(Color.RED); + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + paint.setTextSize(QMUIDisplayHelper.sp2px(context, 50)); + Rect nameBounds = new Rect(); + paint.getTextBounds(name, 0, name.length(), nameBounds); + Rect dateBounds = new Rect(); + paint.getTextBounds(date, 0, date.length(), dateBounds); + Rect timeBounds = new Rect(); + paint.getTextBounds(time, 0, time.length(), timeBounds); + + //添加水印 + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + if (bitmapConfig == null) { + bitmapConfig = Bitmap.Config.RGB_565; + } + Bitmap copyBitmap = bitmap.copy(bitmapConfig, true); + + Canvas canvas = new Canvas(copyBitmap); + final int bitmapWidth = copyBitmap.getWidth(); + final int bitmapHeight = copyBitmap.getHeight(); + final int padding = QMUIDisplayHelper.dp2px(context, 20);//两行水印间的间距 + final int paddingRight = QMUIDisplayHelper.dp2px(context, 20); + final int paddingBottom = QMUIDisplayHelper.dp2px(context, 20); + //有几行就写几行 + canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, + bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), paint); + canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, + bitmapHeight - (timeBounds.height() + padding + paddingBottom), paint); + canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, + bitmapHeight - paddingBottom, paint); + + //将带有水印的图片保存 + File file = FileUtils.getWaterImageFile(); + try { + FileOutputStream fos = new FileOutputStream(file); + copyBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + subscriber.onNext(file); + } + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(File file) { + //压缩图片 + Luban.with(context).load(file.getPath()).ignoreBy(100) + .setTargetDir(FileUtils.getImageCompressPath()) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + markAddListener.onSuccess(file); + } else { + markAddListener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + markAddListener.onError(e); + } + }).launch(); + } + }); + } + + /** + * 压缩图片 + */ + public static void compressImage(String imagePath, String targetDir, ICompressListener listener) { + Luban.with(BaseApplication.getInstance()) + .load(imagePath) + .ignoreBy(100) + .setTargetDir(targetDir) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + listener.onSuccess(file); + } else { + listener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + listener.onError(e); + } + }).launch(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 55a56a3..8872825 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -5,92 +5,22 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.Build; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.Log; import androidx.core.app.ActivityCompat; import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; -import com.casic.dcms.utils.callback.IDownloadListener; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import org.jetbrains.annotations.NotNull; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; - public class OtherUtils { private static final String TAG = "OtherUtils"; - /** - * 绘制文字到右下角 - */ - public static String drawTextToRightBottom(Context context, Bitmap bitmap, String name, String date, String time) { - //初始化画笔 - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(Color.RED); - paint.setDither(true); // 获取跟清晰的图像采样 - paint.setFilterBitmap(true);// 过滤一些 - paint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - Rect nameBounds = new Rect(); - paint.getTextBounds(name, 0, name.length(), nameBounds); - Rect dateBounds = new Rect(); - paint.getTextBounds(date, 0, date.length(), dateBounds); - Rect timeBounds = new Rect(); - paint.getTextBounds(time, 0, time.length(), timeBounds); - - //添加水印 - android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); - if (bitmapConfig == null) { - bitmapConfig = Bitmap.Config.RGB_565; - } - bitmap = bitmap.copy(bitmapConfig, true); - - Canvas canvas = new Canvas(bitmap); - final int bitmapWidth = bitmap.getWidth(); - final int bitmapHeight = bitmap.getHeight(); - final int paddingRight = QMUIDisplayHelper.dp2px(context, 10); - //有几行就写几行 - canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 55), paint); - canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 30), paint); - canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 10), paint); - - //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); - try { - FileOutputStream fos = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return file.getAbsolutePath(); - } - //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { Intent intent = new Intent(context, BigImageActivity.class); @@ -137,60 +67,4 @@ } return ""; } - - public static void downloadFile(String url, IDownloadListener listener) { - OkHttpClient okHttpClient = new OkHttpClient(); - Request request = new Request.Builder().get().url(url).build(); - okHttpClient.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - e.printStackTrace(); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - InputStream is = null; - byte[] buf = new byte[2048]; - int len; - FileOutputStream fos = null; - // 储存下载文件的目录 - String savePath = FileUtils.getDownloadFilePath(); - try { - ResponseBody body = response.body(); - if (body != null) { - is = body.byteStream(); - long total = body.contentLength(); - listener.onDownloadStart(total); - File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); - fos = new FileOutputStream(file); - long sum = 0; - while ((len = is.read(buf)) != -1) { - fos.write(buf, 0, len); - sum += len; - listener.onProgressChanged(sum); - } - fos.flush(); - listener.onDownloadEnd(file); - } else { - Log.d(TAG, "onResponse: body is null"); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (is != null) - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (fos != null) - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 72ccfdb..1b390a7 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -12,27 +12,37 @@ **/ @SuppressLint("SimpleDateFormat") public class TimeOrDateUtil { - /** - * 时间戳转时间 - */ - public static String timestampToTime(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); - } + private static final String TAG = "TimeOrDateUtil"; + private static final SimpleDateFormat allDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); + private static final SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); /** - * 时间戳转时间 + * 时间戳转完整日期时间 */ - public static String timestampToTime(long mills) { - SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); - return millsFormat.format(mills); + public static String timestampToCompleteDate(long millSeconds) { + return allDateFormat.format(new Date(millSeconds)); } /** * 时间戳转日期 */ - public static String timestampToDate(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); + public static String timestampToDate(long millSeconds) { + return dateFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转时间 + */ + public static String timestampToTime(long millSeconds) { + return timeFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转分秒 + */ + public static String millsToTime(long millSeconds) { + return millsFormat.format(new Date(millSeconds)); } } diff --git a/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java new file mode 100644 index 0000000..2f22e31 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java @@ -0,0 +1,15 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface ICompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + void onSuccess(File file); + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + void onError(Throwable e); +} diff --git a/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java new file mode 100644 index 0000000..979a7f1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java @@ -0,0 +1,9 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface IWaterMarkAddListener { + void onSuccess(File file); + + void onError(Throwable e); +} 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 04d396f..6e7aae1 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 @@ -14,6 +14,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -444,10 +445,10 @@ /** * 公厕打扫签到 *

- * http://111.198.10.15:11409/toiletClean/add + * http://111.198.10.15:11409/sanitation/toiletClean/add */ @FormUrlEncoded - @POST("/toiletClean/add") + @POST("/sanitation/toiletClean/add") Observable cleanToilet(@Header("token") String token, @Field("toiletId") String toiletId, @Field("userId") String userId, @@ -456,4 +457,16 @@ @Field("cleanTime") String cleanTime, @Field("photo") String photo, @Field("workContent") String workContent); + + /** + * 公厕打扫记录 + *

+ * http://111.198.10.15:11409/sanitation/toiletClean/listPage + */ + @GET("/sanitation/toiletClean/listPage") + Observable obtainToiletCleanRecord(@Header("token") String token, + @Query("userId") String userId, + @Query("keywords") String keywords, + @Query("beginDate") String beginDate, + @Query("endDate") String endDate); } 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 d2e73ee..aeec792 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 @@ -1,10 +1,7 @@ package com.casic.dcms.utils.retrofit; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.util.Log; -import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.bean.CaseCheckBean; import com.casic.dcms.bean.CaseCheckedBean; @@ -19,6 +16,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -35,10 +33,7 @@ import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.HttpConfig; -import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import org.jetbrains.annotations.NotNull; @@ -296,16 +291,9 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ public static Observable getImageUploadResult(File image) { - //改为上传带水印的图片 - Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath()); - String path = OtherUtils.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, - StringHelper.getUserAccount(), - TimeOrDateUtil.timestampToDate("yyy-MM-dd"), - TimeOrDateUtil.timestampToTime("HH:mm:ss")); - Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), new File(path)); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), image); MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", image.getName(), requestBody); return service.uploadImage(AuthenticationHelper.getToken(), imagePart); } @@ -515,4 +503,14 @@ return service.cleanToilet(AuthenticationHelper.getToken(), toiletId, userId, lng, lat, cleanTime, photo, workContent); } + + /** + * 公厕打扫记录 + */ + public static Observable getCleanRecordResult(String userId, String keywords, + String beginDate, String endDate) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java new file mode 100644 index 0000000..1e43b87 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -0,0 +1,91 @@ +package com.casic.dcms.widgets; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.TimeOrDateUtil; + +import java.util.Timer; +import java.util.TimerTask; + +public class SignInDialog extends Dialog implements View.OnClickListener { + + private static final String TAG = "SignInDialog"; + private String address; + private OnDialogClickListener listener; + + private SignInDialog(Builder builder) { + super(builder.mContext); + this.address = builder.address; + this.listener = builder.listener; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_sign_in); + initView(); + } + + private void initView() { + TextView clockView = findViewById(R.id.clockView); + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.millsToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); + TextView signInPlaceView = findViewById(R.id.signInPlaceView); + if (!TextUtils.isEmpty(address)) { + signInPlaceView.setText(address); + } + TextView signInView = findViewById(R.id.signInView); + signInView.setOnClickListener(this); + } + + @Override + public void onClick(View view) { + int i = view.getId(); + if (i == R.id.signInView) { + if (listener != null) { + listener.onViewClick(); + } + } + this.dismiss(); + } + + public static class Builder { + private Context mContext; + private String address; + private OnDialogClickListener listener; + + public Builder setContext(Context context) { + this.mContext = context; + return this; + } + + public Builder setAddress(String address) { + this.address = address; + return this; + } + + public Builder setOnDialogClickListener(OnDialogClickListener listener) { + this.listener = listener; + return this; + } + + public SignInDialog build() { + return new SignInDialog(this); + } + } + + public interface OnDialogClickListener { + void onViewClick(); + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_more.xml b/app/src/main/res/drawable/ic_more.xml index aa71aad..da5378e 100644 --- a/app/src/main/res/drawable/ic_more.xml +++ b/app/src/main/res/drawable/ic_more.xml @@ -1,9 +1,9 @@ diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml new file mode 100644 index 0000000..ddf926b --- /dev/null +++ b/app/src/main/res/drawable/ic_search.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_sign.xml b/app/src/main/res/drawable/ic_sign.xml new file mode 100644 index 0000000..f914440 --- /dev/null +++ b/app/src/main/res/drawable/ic_sign.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml new file mode 100644 index 0000000..eb35023 --- /dev/null +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_toilet.xml b/app/src/main/res/layout/activity_toilet.xml index 1319356..d230b14 100644 --- a/app/src/main/res/layout/activity_toilet.xml +++ b/app/src/main/res/layout/activity_toilet.xml @@ -63,36 +63,6 @@ android:layout_height="wrap_content" android:orientation="vertical"> - - - - - - - - - + + + + + + + + - + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_sign_in.xml b/app/src/main/res/layout/dialog_sign_in.xml new file mode 100644 index 0000000..245dc09 --- /dev/null +++ b/app/src/main/res/layout/dialog_sign_in.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_record_recycleview.xml b/app/src/main/res/layout/item_record_recycleview.xml new file mode 100644 index 0000000..dd29b50 --- /dev/null +++ b/app/src/main/res/layout/item_record_recycleview.xml @@ -0,0 +1,31 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/popu_person.xml b/app/src/main/res/layout/popu_person.xml index fdebb06..4134031 100644 --- a/app/src/main/res/layout/popu_person.xml +++ b/app/src/main/res/layout/popu_person.xml @@ -11,6 +11,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" + android:paddingVertical="5dp" android:text="人员信息" android:textColor="@color/black" android:textSize="@dimen/titleFontSize" /> @@ -24,7 +25,8 @@ + android:orientation="horizontal" + android:paddingVertical="5dp"> + android:orientation="horizontal" + android:paddingVertical="5dp"> + android:orientation="horizontal" + android:paddingVertical="5dp"> + android:orientation="horizontal" + android:paddingVertical="5dp"> + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java new file mode 100644 index 0000000..4957e67 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -0,0 +1,81 @@ +package com.casic.dcms.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.bean.CleanRecordBean; + +import java.util.List; + +public class RecordListAdapter extends RecyclerView.Adapter { + + private List dataRows; + private LayoutInflater layoutInflater; + + public RecordListAdapter(Context context, List dataRows) { + this.dataRows = dataRows; + layoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = layoutInflater.inflate(R.layout.item_record_recycleview, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + holder.bindView(dataRows.get(position)); + if (clickListener != null) { + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clickListener.onClick(position); + } + }); + } + } + + @Override + public int getItemCount() { + return dataRows.size(); + } + + private OnItemClickListener clickListener; + + public interface OnItemClickListener { + void onClick(int position); + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.clickListener = onItemClickListener; + } + + static class ItemViewHolder extends RecyclerView.ViewHolder { + + private TextView workTimeView; + private TextView toiletNameView; + private TextView workerNameView; + + ItemViewHolder(@NonNull View itemView) { + super(itemView); + workTimeView = itemView.findViewById(R.id.workTimeView); + toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerNameView = itemView.findViewById(R.id.workerNameView); + } + + void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { + workTimeView.setText(rowsBean.getCreateTime()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java new file mode 100644 index 0000000..77c0fba --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/CleanRecordBean.java @@ -0,0 +1,202 @@ +package com.casic.dcms.bean; + +import java.util.List; + +public class CleanRecordBean { + + /** + * code : 200.0 + * data : {"rows":[{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}],"total":6} + * message : 请求成功 + * success : true + */ + + private double code; + private DataBean data; + private String message; + private boolean success; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataBean { + /** + * rows : [{"createTime":"2021-05-31","defFlag":"0","id":"1399290564295921665","lat":"39.91570858","lng":"116.26856423","photo":"2021-05\\9cd59072bb40498dba03e07db0d3f79c.png","toiletId":"1120210531170001","toiletName":"","updateTime":"2021-05-31","userId":"1394828956022857730","userName":"","workContent":"日常保洁"}] + * total : 6.0 + */ + + private double total; + private List rows; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class RowsBean { + /** + * createTime : 2021-05-31 + * defFlag : 0 + * id : 1399290564295921665 + * lat : 39.91570858 + * lng : 116.26856423 + * photo : 2021-05\9cd59072bb40498dba03e07db0d3f79c.png + * toiletId : 1120210531170001 + * toiletName : + * updateTime : 2021-05-31 + * userId : 1394828956022857730 + * userName : + * workContent : 日常保洁 + */ + + private String createTime; + private String defFlag; + private String id; + private String lat; + private String lng; + private String photo; + private String toiletId; + private String toiletName; + private String updateTime; + private String userId; + private String userName; + private String workContent; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDefFlag() { + return defFlag; + } + + public void setDefFlag(String defFlag) { + this.defFlag = defFlag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getToiletId() { + return toiletId; + } + + public void setToiletId(String toiletId) { + this.toiletId = toiletId; + } + + public String getToiletName() { + return toiletName; + } + + public void setToiletName(String toiletName) { + this.toiletName = toiletName; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getWorkContent() { + return workContent; + } + + public void setWorkContent(String workContent) { + this.workContent = workContent; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java new file mode 100644 index 0000000..f50849c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -0,0 +1,50 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.CleanRecordBean; +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 CleanRecordModelImpl implements ICleanRecordModel { + + private OnGetRecordListener listener; + + public CleanRecordModelImpl(OnGetRecordListener recordListener) { + this.listener = recordListener; + } + + public interface OnGetRecordListener { + void onSuccess(CleanRecordBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + 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(CleanRecordBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java new file mode 100644 index 0000000..3ffe8c4 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +public interface ICleanRecordModel { + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java new file mode 100644 index 0000000..5b37216 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -0,0 +1,37 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.CleanRecordModelImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; + +public class CleanRecordPresenterImpl extends BasePresenter implements ICleanRecordPresenter, CleanRecordModelImpl.OnGetRecordListener { + + private ICleanToiletRecordView view; + private CleanRecordModelImpl model; + + public CleanRecordPresenterImpl(ICleanToiletRecordView cleanToiletRecordView) { + this.view = cleanToiletRecordView; + model = new CleanRecordModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(CleanRecordBean result) { + view.obtainCleanRecordResult(result); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java new file mode 100644 index 0000000..2b9acdd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.presenter; + +public interface ICleanRecordPresenter { + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java index d0313e9..e53c5ac 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/UploadImagePresenterImpl.java @@ -1,9 +1,17 @@ package com.casic.dcms.mvp.presenter; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.mvp.BasePresenter; import com.casic.dcms.mvp.model.UploadImageModelImpl; import com.casic.dcms.mvp.view.IUploadFileView; +import com.casic.dcms.utils.ImageHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; import java.io.File; @@ -20,7 +28,27 @@ @Override public void onReadyRetrofitRequest(File file) { view.showProgress(); - addSubscription(actionModel.sendRetrofitRequest(file)); + //改为上传带水印的图片 + Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); + ImageHelper.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, + StringHelper.getUserAccount(), + TimeOrDateUtil.timestampToDate(System.currentTimeMillis()), + TimeOrDateUtil.timestampToTime(System.currentTimeMillis()), + new IWaterMarkAddListener() { + @Override + public void onSuccess(File file) { + if (file != null) { + addSubscription(actionModel.sendRetrofitRequest(file)); + } else { + view.obtainDataFail(); + } + } + + @Override + public void onError(Throwable e) { + view.obtainDataFail(); + } + }); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java new file mode 100644 index 0000000..9df83d9 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -0,0 +1,7 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.CleanRecordBean; + +public interface ICleanToiletRecordView { + void obtainCleanRecordResult(CleanRecordBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java index f02a4d7..aac6084 100644 --- a/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java +++ b/app/src/main/java/com/casic/dcms/service/GeTuiIntentService.java @@ -59,7 +59,7 @@ noticeBean.setTitle(resultBean.getTitle()); noticeBean.setContent(resultBean.getContent()); noticeBean.setType(resultBean.getType()); - noticeBean.setPushDate(TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss")); + noticeBean.setPushDate(TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis())); noticeBean.setIsRead("1"); //存本地一份 diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java index 3d6ad31..b5a94e2 100644 --- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java @@ -11,11 +11,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.casic.dcms.R; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.photoview.PhotoView; import org.jetbrains.annotations.NotNull; @@ -40,8 +43,13 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_big_image); ButterKnife.bind(this); - + setupTopBarLayout(); initEvent(); + } + + private void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.black)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); leftBackView.setOnClickListener(v -> finish()); } @@ -101,7 +109,7 @@ View view = LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false); PhotoView photoView = view.findViewById(R.id.photoView); Glide.with(context).load(data.get(position)).into(photoView); - photoView.setScaleType(ImageView.ScaleType.FIT_XY); + photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); container.addView(view); //点击大图取消预览 photoView.setOnClickListener(v -> BigImageActivity.this.finish()); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index f69c6cf..2d0c0af 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.ui.fragment.check.CaseCheckFragment; import com.casic.dcms.ui.fragment.check.CaseCheckedFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -235,9 +234,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -246,9 +242,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -260,13 +253,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index 62413d2..90a578a 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -37,7 +37,6 @@ import com.casic.dcms.ui.fragment.handle.OvertimeCaseFragment; import com.casic.dcms.ui.fragment.handle.UrgentCaseFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -126,7 +125,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private CaseHandlePresenterImpl caseHandlePresenter; private MediaPlayer mediaPlayer; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ImageRecycleViewAdapter handleImageAdapter;//处理图片的adapter @Override @@ -367,9 +366,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -378,9 +374,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -392,13 +385,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; default: break; diff --git a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java index 67144b6..5ab5294 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseOnMapActivity.java @@ -29,7 +29,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.mvp.view.ICaseHandleListView; import com.casic.dcms.mvp.view.ICaseVerifyView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.ToastHelper; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -239,25 +238,25 @@ private void resetRadioButton(int index) { switch (index) { case 0: - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求处置中数据 caseHandleListPresenter.onReadyRetrofitRequest(null, null, 1000, 1); break; case 1: - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核实数据 caseVerifyPresenter.onReadyRetrofitRequest(1000, 1); break; case 2: - checkRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.white)); - verifyRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); - handleRadioButton.setTextColor(ColorHelper.getResourcesColor(this, R.color.textColor)); + checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); + handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.textColor)); //请求待核查数据 caseCheckPresenter.onReadyRetrofitRequest(1000, 1); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index 568a21f..111a834 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseLargeClassView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; import com.jzxiang.pickerview.TimePickerDialog; @@ -114,7 +113,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); eorc = String.valueOf(position + 1); //获取案卷大类 @@ -136,7 +135,7 @@ dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -162,7 +161,7 @@ dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } }).build().show(); @@ -173,7 +172,7 @@ caseStatusPresenter.onReadyRetrofitRequest(); break; case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择处理时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -181,14 +180,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startTimeView.setText(date); - startTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + startTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择截止时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -196,10 +195,10 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endTimeView.setText(date); - endTimeView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + endTimeView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: @@ -247,10 +246,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -264,7 +263,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -285,7 +284,7 @@ caseState = beans.get(position).getValue(); caseStatusView.setText(tag); - caseStatusView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseStatusView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); } }).build().show(); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 75ac52e..d610761 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -42,7 +43,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.AudioRecodeHelper; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; @@ -123,7 +123,7 @@ private CaseSubmitPresenterImpl caseSubmitPresenter; private List largeClassBeans; private List smallClassBeans; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ProgressDialog progressDialog; private UploadImagePresenterImpl uploadImagePresenter; private List imageList = new ArrayList<>();//服务器返回的拍照数据集 @@ -222,7 +222,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -242,7 +242,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -269,7 +269,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -347,9 +347,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -358,9 +355,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -372,13 +366,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case PictureConfig.PREVIEW_VIDEO_CODE: LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0); @@ -518,10 +512,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -536,7 +530,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index 10bfc1b..60521cf 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -22,7 +22,6 @@ import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -74,7 +73,7 @@ private UploadImagePresenterImpl uploadImagePresenter; private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter; private ImageRecycleViewAdapter imageAdapter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, loadingDialog; private ArrayList realPaths = new ArrayList<>();//真是图片路径 private List mediaList = new ArrayList<>();//上传到服务器的数据集 private String gridId, shopID; @@ -150,9 +149,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -161,9 +157,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -175,13 +168,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 7750f8a..7830b21 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,9 +28,7 @@ import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseSubmitCaseView; import com.casic.dcms.mvp.view.IUploadFileView; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.OtherUtils; @@ -145,7 +144,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseClassView.setText(tag); - caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷大类 caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); @@ -165,7 +164,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseLargeClassView.setText(tag); - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); @@ -192,7 +191,7 @@ public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); caseSmallClassView.setText(tag); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); + caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.textColor)); typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); } @@ -245,9 +244,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -256,9 +252,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -270,13 +263,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { @@ -308,10 +301,10 @@ } else { caseLargeClassView.setText(largeClassBeans.get(0).getTypeName());//默认选择第一个 } - caseLargeClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseLargeClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); caseSmallClassView.setText("请选择"); - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } @@ -326,7 +319,7 @@ } else { caseSmallClassView.setText(smallClassBeans.get(0).getTypeDetailName());//默认选择第一个 } - caseSmallClassView.setTextColor(ColorHelper.getResourcesColor(this, R.color.darkGray)); + caseSmallClassView.setTextColor(ContextCompat.getColor(this, R.color.darkGray)); } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index d28d4b2..da6a75f 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -41,7 +41,6 @@ import com.casic.dcms.ui.fragment.verify.CaseVerifiedFragment; import com.casic.dcms.ui.fragment.verify.CaseVerifyFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.JzExoMedia; @@ -72,7 +71,7 @@ public class CaseVerifyDetailActivity extends BaseCaseActivity implements ICaseDetailView, View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, IUploadFileView, ICaseNextNodeView, ICaseHandleView { - private Context context = CaseVerifyDetailActivity.this; + private Context context = this; @BindView(R.id.caseNumberView) TextView caseNumberView; @BindView(R.id.caseTypeView) @@ -522,9 +521,6 @@ .isWeChatStyle(true) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(2) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -533,9 +529,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -547,13 +540,13 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + String mediaRealPath = media.getRealPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaRealPath)); } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java new file mode 100644 index 0000000..5fb348b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -0,0 +1,178 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.RecordListAdapter; +import com.casic.dcms.base.BaseCaseActivity; +import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; +import com.casic.dcms.mvp.view.ICleanToiletRecordView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.ToastHelper; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.qmuiteam.qmui.widget.QMUIEmptyView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { + + @BindView(R.id.emptyView) + QMUIEmptyView emptyView; + @BindView(R.id.dateView) + TextView dateView; + @BindView(R.id.calendarView) + ImageView calendarView; + @BindView(R.id.recordRecyclerView) + RecyclerView recordRecyclerView; + + private Context context = this; + private RecordListAdapter adapter; + private List dataBeans = new ArrayList<>(); + private boolean isNotify = false; + private WeakReferenceHandler weakReferenceHandler; + private CleanRecordPresenterImpl recordPresenter; + + @Override + public int initLayoutView() { + return R.layout.activity_clean_list; + } + + @Override + protected String setTitleName() { + return "保洁作业记录"; + } + + @Override + public void initData() { + weakReferenceHandler = new WeakReferenceHandler(this); + recordPresenter = new CleanRecordPresenterImpl(this); + } + + @Override + public void initEvent() { + //默认加载所有数据 + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + calendarView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack((timePickerView, millSeconds) -> { + String date = TimeOrDateUtil.timestampToDate(millSeconds); + + dateView.setText(date); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + date, ""); + isNotify = true; + }).build().show(getSupportFragmentManager(), "year_month_day"); + } + }); + } + + @Override + public void obtainCleanRecordResult(CleanRecordBean resultBean) { +// Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isNotify) { + dataBeans.clear(); + dataBeans = dataRows; + isNotify = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(20210601); + } + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CleanResultListActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CleanResultListActivity resultActivity = reference.get(); + if (msg.what == 20210601) { + if (resultActivity.isNotify) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.recordRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new RecordListAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + CleanRecordBean.DataBean.RowsBean rowsBean = resultActivity.dataBeans.get(position); + + Intent intent = new Intent(resultActivity, WorkerOnMapActivity.class); + intent.putExtra("userName", rowsBean.getUserName()); + intent.putExtra("createTime", rowsBean.getCreateTime()); + intent.putExtra("toiletName", rowsBean.getToiletName()); + String dataLng = rowsBean.getLng(); + if (TextUtils.isEmpty(dataLng)) { + ToastHelper.showToast("经度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lng", Double.parseDouble(dataLng)); + String dataLat = rowsBean.getLat(); + if (TextUtils.isEmpty(dataLat)) { + ToastHelper.showToast("纬度异常", ToastHelper.ERROR); + return; + } + intent.putExtra("lat", Double.parseDouble(dataLat)); +// intent.putExtra("lng", Constant.DEFAULT_LNG); +// intent.putExtra("lat", Constant.DEFAULT_LAT); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (recordPresenter != null) { + recordPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 7356d27..6c03459 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -13,7 +13,6 @@ import com.casic.dcms.R; import com.casic.dcms.adapter.AnalysisRecycleAdapter; import com.casic.dcms.base.BaseActivity; -import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; @@ -113,7 +112,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.selectStartDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -121,14 +120,14 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); startDateView.setText(date); SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: - new TimePickerDialog.Builder().setThemeColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleStringId("请选择结束时间") .setWheelItemTextSize(16) .setCyclic(false) @@ -136,7 +135,7 @@ .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate("yyy-MM-dd"); + String date = TimeOrDateUtil.timestampToDate(millSeconds); endDateView.setText(date); SaveKeyValues.putValue("endTime", date); 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 2596836..d1ce586 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -10,7 +10,6 @@ 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.TextView; @@ -28,15 +27,14 @@ 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; -import com.casic.dcms.utils.FileUtils; 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.casic.dcms.widgets.SignInDialog; import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.layers.ArcGISTiledLayer; import com.esri.arcgisruntime.mapping.ArcGISMap; @@ -47,7 +45,6 @@ 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; @@ -61,6 +58,8 @@ import java.io.File; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -92,11 +91,12 @@ ImageView takePictureView; @BindView(R.id.signInButton) QMUIRoundButton signInButton; + @BindView(R.id.clockView) + TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog; + private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 - private QMUITipDialog loadingDialog; private CleanToiletPresenterImpl cleanToiletPresenter; @Override @@ -114,10 +114,24 @@ finish(); } }); + topLayout.addRightImageButton(R.drawable.ic_more, 2).setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(context, CleanResultListActivity.class)); + } + }); } @Override public void initData() { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.timestampToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -165,7 +179,7 @@ .setTipWord("提交中,请稍后") .create(); - loadingDialog = new QMUITipDialog.Builder(this) + locationDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("定位中,请稍后") .create(); @@ -197,7 +211,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - loadingDialog.show(); + locationDialog.show(); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -226,7 +240,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - loadingDialog.dismiss(); + locationDialog.dismiss(); } }, true); break; @@ -251,14 +265,14 @@ .setShowTitle(true) //显示Title .setScanType(QrConfig.TYPE_ALL)//识别二维码和条形码 .setShowAlbum(false) //显示从相册选择按钮 - .setCornerColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描框颜色 - .setLineColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) //设置扫描线颜色 + .setCornerColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描框颜色 + .setLineColor(ContextCompat.getColor(this, R.color.mainThemeColor)) //设置扫描线颜色 .setLineSpeed(QrConfig.LINE_MEDIUM) //设置扫描线速度 .setDesText(null) //扫描框下文字 .setShowDes(true) //是否显示扫描框下面文字 .setPlaySound(true) //是否扫描成功后bi~的声音 .setIsOnlyCenter(true) //是否只识别框中内容(默认为全屏识别) - .setTitleBackgroudColor(ColorHelper.getResourcesColor(this, R.color.mainThemeColor)) + .setTitleBackgroudColor(ContextCompat.getColor(this, R.color.mainThemeColor)) .setTitleTextColor(Color.WHITE) //设置Title文字颜色 .setScreenOrientation(QrConfig.SCREEN_PORTRAIT) //设置屏幕方式 .setScanLineStyle(ScanLineView.style_hybrid) //扫描线样式 @@ -276,9 +290,6 @@ .openCamera(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .isCompress(true) - .compressQuality(80) - .compressSavePath(FileUtils.getImageCompressPath()) .forResult(PictureConfig.REQUEST_CAMERA); break; case R.id.signInButton: @@ -305,12 +316,11 @@ } double longitude = aMapLocation.getLongitude(); double latitude = aMapLocation.getLatitude(); - String cleanTime = TimeOrDateUtil.timestampToDate("yyyy-MM-dd HH:mm:ss"); + String cleanTime = TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()); cleanToiletPresenter.onReadyRetrofitRequest(toiletId, StringHelper.getUserId(), String.valueOf(longitude), String.valueOf(latitude), cleanTime, imagePath, StringHelper.filterString(workContentView.getText().toString())); } - loadingDialog.dismiss(); } }, true); break; @@ -348,7 +358,7 @@ if (resultCode == RESULT_OK) { if (requestCode == PictureConfig.REQUEST_CAMERA) { LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getRealPath())); } } } @@ -409,7 +419,16 @@ @Override public void obtainCleanResult(ActionResultBean resultBean) { - Log.d(TAG, "obtainUploadAudioResult: " + new Gson().toJson(resultBean)); +// Log.d(TAG, "obtainCleanResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + new SignInDialog.Builder().setContext(this).setAddress(locationStreetView.getText().toString()).setOnDialogClickListener(new SignInDialog.OnDialogClickListener() { + @Override + public void onViewClick() { + startActivity(new Intent(context, CleanResultListActivity.class)); + PublicToiletActivity.this.finish(); + } + }).build().show(); + } } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java new file mode 100644 index 0000000..1580311 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -0,0 +1,247 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.ToastHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.BindView; +import butterknife.OnClick; + +public class WorkerOnMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "WorkerOnMapActivity"; + @BindView(R.id.topLayout) + QMUITopBarLayout topLayout; + @BindView(R.id.mapView) + MapView mapView; + + private String userName, createTime, toiletName; + private double lng, lat; + private WeakReferenceHandler weakReferenceHandler; + private QMUITipDialog loadingDialog; + + @Override + public int initLayoutView() { + return R.layout.activity_worker_map; + } + + @Override + protected void setupTopBarLayout() { + topLayout.setTitle("查看位置").setTextColor(ContextCompat.getColor(this, R.color.white)); + topLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + topLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", 0); + lat = getIntent().getDoubleExtra("lat", 0); + + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + ArcGISTiledLayer baseLayer = new ArcGISTiledLayer(Constant.BASE_MAP_SERVICE_URL); + Basemap basemap = new Basemap(baseLayer); + arcGISMap.setBasemap(basemap); + mapView.setMap(arcGISMap); + + weakReferenceHandler = new WeakReferenceHandler(this); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("定位中,请稍后") + .create(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + Point point = new Point(lng, lat, mapView.getSpatialReference()); + mapView.setViewpointCenterAsync(point, 2800);//标注到指定经纬度并放大地图显示 + addPictureMarker(point); + + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - point.getX()) <= Constant.DELTA_LNG_10 && Math.abs(lat - point.getY()) <= Constant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(WorkerOnMapActivity mapFragment) { + reference = new WeakReference<>(mapFragment); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + WorkerOnMapActivity mapActivity = reference.get(); + switch (msg.what) { + case 2021060101: + View popupView = LayoutInflater.from(mapActivity).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + + userNameView.setText(mapActivity.userName); + signInTimeView.setText(mapActivity.createTime); + toiletNameView.setText(mapActivity.toiletName); + + QMUIPopups.popup(mapActivity, QMUIDisplayHelper.dp2px(mapActivity, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(mapActivity, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(mapActivity.mapView); + break; + case 2021060102: + ToastHelper.showToast("附近无工作人员,请重新选点", ToastHelper.WARING); + break; + default: + break; + } + } + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + loadingDialog.show(); + LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + + } + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + mapView.setViewpointCenterAsync(new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude()), 1000); + loadingDialog.dismiss(); + } + } + }, true); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index b57fe03..ab75c67 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -32,6 +32,7 @@ import com.casic.dcms.ui.MainActivity; import com.casic.dcms.ui.UserInfoActivity; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; @@ -237,7 +238,7 @@ //下载apk private void downloadApk(String url) { - OtherUtils.downloadFile(url, new IDownloadListener() { + FileUtils.downloadFile(url, new IDownloadListener() { @Override public void onDownloadStart(long totalBytes) { progressDialog.setMax((int) totalBytes); diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java deleted file mode 100644 index 73f6799..0000000 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.Context; -import android.graphics.Color; - -import java.util.Random; - -/** - * @Author: Pengxh - * @Time: 2021/4/12 10:11 - * @Email: 290677893@qq.com - **/ -public class ColorHelper { - public static int getResourcesColor(Context context, int res) { - return context.getResources().getColor(res); - } - - /** - * 随机颜色 - */ - public static int getRandomColor() { - Random random = new Random(); - int red = random.nextInt(256); - int green = random.nextInt(256); - int blue = random.nextInt(256); - return Color.rgb(red, green, blue); - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index 315a587..7942090 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -4,12 +4,25 @@ import android.content.Context; import android.util.Log; +import com.casic.dcms.utils.callback.IDownloadListener; + +import org.jetbrains.annotations.NotNull; + import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + public class FileUtils { private static final String TAG = "FileUtils"; @SuppressLint("StaticFieldLeak") @@ -147,7 +160,7 @@ } //储存下载文件的目录 - static String getDownloadFilePath() { + private static String getDownloadFilePath() { if (downloadDir == null) { File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { @@ -195,4 +208,60 @@ } return videoFile.getPath(); } + + public static void downloadFile(String url, IDownloadListener listener) { + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().get().url(url).build(); + okHttpClient.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + e.printStackTrace(); + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + InputStream is = null; + byte[] buf = new byte[2048]; + int len; + FileOutputStream fos = null; + // 储存下载文件的目录 + String savePath = getDownloadFilePath(); + try { + ResponseBody body = response.body(); + if (body != null) { + is = body.byteStream(); + long total = body.contentLength(); + listener.onDownloadStart(total); + File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); + fos = new FileOutputStream(file); + long sum = 0; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + sum += len; + listener.onProgressChanged(sum); + } + fos.flush(); + listener.onDownloadEnd(file); + } else { + Log.d(TAG, "onResponse: body is null"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + if (fos != null) + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java new file mode 100644 index 0000000..b7778b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -0,0 +1,166 @@ +package com.casic.dcms.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.text.TextUtils; + +import com.casic.dcms.base.BaseApplication; +import com.casic.dcms.utils.callback.ICompressListener; +import com.casic.dcms.utils.callback.IWaterMarkAddListener; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +import java.io.File; +import java.io.FileOutputStream; + +import rx.Observable; +import rx.Observer; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; +import top.zibin.luban.CompressionPredicate; +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; + +public class ImageHelper { + /** + * 绘制文字到右下角并压缩图片 + */ + public static void drawTextToRightBottom(Context context, final Bitmap bitmap, String name, String date, + String time, IWaterMarkAddListener markAddListener) { + Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + //初始化画笔 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(Color.RED); + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + paint.setTextSize(QMUIDisplayHelper.sp2px(context, 50)); + Rect nameBounds = new Rect(); + paint.getTextBounds(name, 0, name.length(), nameBounds); + Rect dateBounds = new Rect(); + paint.getTextBounds(date, 0, date.length(), dateBounds); + Rect timeBounds = new Rect(); + paint.getTextBounds(time, 0, time.length(), timeBounds); + + //添加水印 + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + if (bitmapConfig == null) { + bitmapConfig = Bitmap.Config.RGB_565; + } + Bitmap copyBitmap = bitmap.copy(bitmapConfig, true); + + Canvas canvas = new Canvas(copyBitmap); + final int bitmapWidth = copyBitmap.getWidth(); + final int bitmapHeight = copyBitmap.getHeight(); + final int padding = QMUIDisplayHelper.dp2px(context, 20);//两行水印间的间距 + final int paddingRight = QMUIDisplayHelper.dp2px(context, 20); + final int paddingBottom = QMUIDisplayHelper.dp2px(context, 20); + //有几行就写几行 + canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, + bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), paint); + canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, + bitmapHeight - (timeBounds.height() + padding + paddingBottom), paint); + canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, + bitmapHeight - paddingBottom, paint); + + //将带有水印的图片保存 + File file = FileUtils.getWaterImageFile(); + try { + FileOutputStream fos = new FileOutputStream(file); + copyBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + subscriber.onNext(file); + } + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(File file) { + //压缩图片 + Luban.with(context).load(file.getPath()).ignoreBy(100) + .setTargetDir(FileUtils.getImageCompressPath()) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + markAddListener.onSuccess(file); + } else { + markAddListener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + markAddListener.onError(e); + } + }).launch(); + } + }); + } + + /** + * 压缩图片 + */ + public static void compressImage(String imagePath, String targetDir, ICompressListener listener) { + Luban.with(BaseApplication.getInstance()) + .load(imagePath) + .ignoreBy(100) + .setTargetDir(targetDir) + .filter(new CompressionPredicate() { + @Override + public boolean apply(String path) { + return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif")); + } + }) + .setCompressListener(new OnCompressListener() { + + @Override + public void onStart() { + + } + + @Override + public void onSuccess(File file) { + if (file != null) { + listener.onSuccess(file); + } else { + listener.onSuccess(null); + } + } + + @Override + public void onError(Throwable e) { + listener.onError(e); + } + }).launch(); + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 55a56a3..8872825 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -5,92 +5,22 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.os.Build; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.Log; import androidx.core.app.ActivityCompat; import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; -import com.casic.dcms.utils.callback.IDownloadListener; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import org.jetbrains.annotations.NotNull; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; - public class OtherUtils { private static final String TAG = "OtherUtils"; - /** - * 绘制文字到右下角 - */ - public static String drawTextToRightBottom(Context context, Bitmap bitmap, String name, String date, String time) { - //初始化画笔 - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(Color.RED); - paint.setDither(true); // 获取跟清晰的图像采样 - paint.setFilterBitmap(true);// 过滤一些 - paint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - Rect nameBounds = new Rect(); - paint.getTextBounds(name, 0, name.length(), nameBounds); - Rect dateBounds = new Rect(); - paint.getTextBounds(date, 0, date.length(), dateBounds); - Rect timeBounds = new Rect(); - paint.getTextBounds(time, 0, time.length(), timeBounds); - - //添加水印 - android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); - if (bitmapConfig == null) { - bitmapConfig = Bitmap.Config.RGB_565; - } - bitmap = bitmap.copy(bitmapConfig, true); - - Canvas canvas = new Canvas(bitmap); - final int bitmapWidth = bitmap.getWidth(); - final int bitmapHeight = bitmap.getHeight(); - final int paddingRight = QMUIDisplayHelper.dp2px(context, 10); - //有几行就写几行 - canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 55), paint); - canvas.drawText(date, bitmapWidth - dateBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 30), paint); - canvas.drawText(time, bitmapWidth - timeBounds.width() - paddingRight, - bitmapHeight - QMUIDisplayHelper.dp2px(context, 10), paint); - - //将带有水印的图片保存 - File file = FileUtils.getWaterImageFile(); - try { - FileOutputStream fos = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return file.getAbsolutePath(); - } - //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { Intent intent = new Intent(context, BigImageActivity.class); @@ -137,60 +67,4 @@ } return ""; } - - public static void downloadFile(String url, IDownloadListener listener) { - OkHttpClient okHttpClient = new OkHttpClient(); - Request request = new Request.Builder().get().url(url).build(); - okHttpClient.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - e.printStackTrace(); - } - - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - InputStream is = null; - byte[] buf = new byte[2048]; - int len; - FileOutputStream fos = null; - // 储存下载文件的目录 - String savePath = FileUtils.getDownloadFilePath(); - try { - ResponseBody body = response.body(); - if (body != null) { - is = body.byteStream(); - long total = body.contentLength(); - listener.onDownloadStart(total); - File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1)); - fos = new FileOutputStream(file); - long sum = 0; - while ((len = is.read(buf)) != -1) { - fos.write(buf, 0, len); - sum += len; - listener.onProgressChanged(sum); - } - fos.flush(); - listener.onDownloadEnd(file); - } else { - Log.d(TAG, "onResponse: body is null"); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (is != null) - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (fos != null) - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - }); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 72ccfdb..1b390a7 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -12,27 +12,37 @@ **/ @SuppressLint("SimpleDateFormat") public class TimeOrDateUtil { - /** - * 时间戳转时间 - */ - public static String timestampToTime(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); - } + private static final String TAG = "TimeOrDateUtil"; + private static final SimpleDateFormat allDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); + private static final SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); /** - * 时间戳转时间 + * 时间戳转完整日期时间 */ - public static String timestampToTime(long mills) { - SimpleDateFormat millsFormat = new SimpleDateFormat("mm:ss"); - return millsFormat.format(mills); + public static String timestampToCompleteDate(long millSeconds) { + return allDateFormat.format(new Date(millSeconds)); } /** * 时间戳转日期 */ - public static String timestampToDate(String formatStr) { - SimpleDateFormat millsFormat = new SimpleDateFormat(formatStr); - return millsFormat.format(new Date()); + public static String timestampToDate(long millSeconds) { + return dateFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转时间 + */ + public static String timestampToTime(long millSeconds) { + return timeFormat.format(new Date(millSeconds)); + } + + /** + * 时间戳转分秒 + */ + public static String millsToTime(long millSeconds) { + return millsFormat.format(new Date(millSeconds)); } } diff --git a/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java new file mode 100644 index 0000000..2f22e31 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/ICompressListener.java @@ -0,0 +1,15 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface ICompressListener { + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + void onSuccess(File file); + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + void onError(Throwable e); +} diff --git a/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java new file mode 100644 index 0000000..979a7f1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/IWaterMarkAddListener.java @@ -0,0 +1,9 @@ +package com.casic.dcms.utils.callback; + +import java.io.File; + +public interface IWaterMarkAddListener { + void onSuccess(File file); + + void onError(Throwable e); +} 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 04d396f..6e7aae1 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 @@ -14,6 +14,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -444,10 +445,10 @@ /** * 公厕打扫签到 *

- * http://111.198.10.15:11409/toiletClean/add + * http://111.198.10.15:11409/sanitation/toiletClean/add */ @FormUrlEncoded - @POST("/toiletClean/add") + @POST("/sanitation/toiletClean/add") Observable cleanToilet(@Header("token") String token, @Field("toiletId") String toiletId, @Field("userId") String userId, @@ -456,4 +457,16 @@ @Field("cleanTime") String cleanTime, @Field("photo") String photo, @Field("workContent") String workContent); + + /** + * 公厕打扫记录 + *

+ * http://111.198.10.15:11409/sanitation/toiletClean/listPage + */ + @GET("/sanitation/toiletClean/listPage") + Observable obtainToiletCleanRecord(@Header("token") String token, + @Query("userId") String userId, + @Query("keywords") String keywords, + @Query("beginDate") String beginDate, + @Query("endDate") String endDate); } 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 d2e73ee..aeec792 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 @@ -1,10 +1,7 @@ package com.casic.dcms.utils.retrofit; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.util.Log; -import com.casic.dcms.base.BaseApplication; import com.casic.dcms.bean.ActionResultBean; import com.casic.dcms.bean.CaseCheckBean; import com.casic.dcms.bean.CaseCheckedBean; @@ -19,6 +16,7 @@ import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.bean.CaseVerifiedBean; import com.casic.dcms.bean.CaseVerifyBean; +import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.bean.CommonSentenceBean; import com.casic.dcms.bean.DeptTreeBean; import com.casic.dcms.bean.EventSourceBean; @@ -35,10 +33,7 @@ import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.HttpConfig; -import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import org.jetbrains.annotations.NotNull; @@ -296,16 +291,9 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ public static Observable getImageUploadResult(File image) { - //改为上传带水印的图片 - Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath()); - String path = OtherUtils.drawTextToRightBottom(BaseApplication.getInstance(), bitmap, - StringHelper.getUserAccount(), - TimeOrDateUtil.timestampToDate("yyy-MM-dd"), - TimeOrDateUtil.timestampToTime("HH:mm:ss")); - Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), new File(path)); + RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), image); MultipartBody.Part imagePart = MultipartBody.Part.createFormData("file", image.getName(), requestBody); return service.uploadImage(AuthenticationHelper.getToken(), imagePart); } @@ -515,4 +503,14 @@ return service.cleanToilet(AuthenticationHelper.getToken(), toiletId, userId, lng, lat, cleanTime, photo, workContent); } + + /** + * 公厕打扫记录 + */ + public static Observable getCleanRecordResult(String userId, String keywords, + String beginDate, String endDate) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + } } diff --git a/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java new file mode 100644 index 0000000..1e43b87 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/SignInDialog.java @@ -0,0 +1,91 @@ +package com.casic.dcms.widgets; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.TextView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.TimeOrDateUtil; + +import java.util.Timer; +import java.util.TimerTask; + +public class SignInDialog extends Dialog implements View.OnClickListener { + + private static final String TAG = "SignInDialog"; + private String address; + private OnDialogClickListener listener; + + private SignInDialog(Builder builder) { + super(builder.mContext); + this.address = builder.address; + this.listener = builder.listener; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_sign_in); + initView(); + } + + private void initView() { + TextView clockView = findViewById(R.id.clockView); + new Timer().schedule(new TimerTask() { + @Override + public void run() { + String systemTime = TimeOrDateUtil.millsToTime(System.currentTimeMillis()); + clockView.post(() -> clockView.setText(systemTime)); + } + }, 0, 1000); + TextView signInPlaceView = findViewById(R.id.signInPlaceView); + if (!TextUtils.isEmpty(address)) { + signInPlaceView.setText(address); + } + TextView signInView = findViewById(R.id.signInView); + signInView.setOnClickListener(this); + } + + @Override + public void onClick(View view) { + int i = view.getId(); + if (i == R.id.signInView) { + if (listener != null) { + listener.onViewClick(); + } + } + this.dismiss(); + } + + public static class Builder { + private Context mContext; + private String address; + private OnDialogClickListener listener; + + public Builder setContext(Context context) { + this.mContext = context; + return this; + } + + public Builder setAddress(String address) { + this.address = address; + return this; + } + + public Builder setOnDialogClickListener(OnDialogClickListener listener) { + this.listener = listener; + return this; + } + + public SignInDialog build() { + return new SignInDialog(this); + } + } + + public interface OnDialogClickListener { + void onViewClick(); + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_more.xml b/app/src/main/res/drawable/ic_more.xml index aa71aad..da5378e 100644 --- a/app/src/main/res/drawable/ic_more.xml +++ b/app/src/main/res/drawable/ic_more.xml @@ -1,9 +1,9 @@ diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml new file mode 100644 index 0000000..ddf926b --- /dev/null +++ b/app/src/main/res/drawable/ic_search.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_sign.xml b/app/src/main/res/drawable/ic_sign.xml new file mode 100644 index 0000000..f914440 --- /dev/null +++ b/app/src/main/res/drawable/ic_sign.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml new file mode 100644 index 0000000..eb35023 --- /dev/null +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_toilet.xml b/app/src/main/res/layout/activity_toilet.xml index 1319356..d230b14 100644 --- a/app/src/main/res/layout/activity_toilet.xml +++ b/app/src/main/res/layout/activity_toilet.xml @@ -63,36 +63,6 @@ android:layout_height="wrap_content" android:orientation="vertical"> - - - - - - - - - + + + + + + + + - + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_sign_in.xml b/app/src/main/res/layout/dialog_sign_in.xml new file mode 100644 index 0000000..245dc09 --- /dev/null +++ b/app/src/main/res/layout/dialog_sign_in.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_record_recycleview.xml b/app/src/main/res/layout/item_record_recycleview.xml new file mode 100644 index 0000000..dd29b50 --- /dev/null +++ b/app/src/main/res/layout/item_record_recycleview.xml @@ -0,0 +1,31 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/popu_person.xml b/app/src/main/res/layout/popu_person.xml index fdebb06..4134031 100644 --- a/app/src/main/res/layout/popu_person.xml +++ b/app/src/main/res/layout/popu_person.xml @@ -11,6 +11,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" + android:paddingVertical="5dp" android:text="人员信息" android:textColor="@color/black" android:textSize="@dimen/titleFontSize" /> @@ -24,7 +25,8 @@ + android:orientation="horizontal" + android:paddingVertical="5dp"> + android:orientation="horizontal" + android:paddingVertical="5dp"> + android:orientation="horizontal" + android:paddingVertical="5dp"> + android:orientation="horizontal" + android:paddingVertical="5dp"> + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file