From 547ee3b33be625a261bf77b10b70ded7ba01c57e Mon Sep 17 00:00:00 2001 From: lianlilong <409813353@qq.com> Date: Sun, 7 Apr 2024 09:45:39 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=A1=B5=E9=9D=A2=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- .../apply/fragment/ApplyFragment.java | 144 +++++ .../apply/model/ApplyDept.java | 72 +++ .../apply/model/ApplyPerson.java | 24 + .../apply/model/ApplyType.java | 33 + .../apply/viewmodel/ApplyViewModel.java | 78 +++ .../activity/KeyPersonDetailActivity.java | 2 +- .../PoliceEmergencyDetailActivity.java | 4 +- .../data/adapter/KeyPersonAdapter.java | 4 +- .../data/adapter/PoliceEmergencyAdapter.java | 2 +- .../{ => data}/fragment/DataFragment.java | 8 +- .../{ => data}/model/DataCount.java | 2 +- .../{ => data}/model/KeyPerson.java | 2 +- .../{ => data}/model/KeyPersonDetail.java | 2 +- .../{ => data}/model/PoliceEmergency.java | 2 +- .../model/PoliceEmergencyDetail.java | 2 +- .../{ => data}/viewmodel/DataViewModel.java | 14 +- .../fragment/ApplyFragment.java | 99 --- .../http/BaseRequestClient.java | 259 ++++++++ .../policedatasystem/http/CustomCallBack.java | 28 - .../policedatasystem/http/RequestClient.java | 587 ++++-------------- .../improve/fragment/ImproveFragment.java | 32 + .../improve/viewmodel/ImproveViewModel.java | 67 ++ .../policedatasystem/indexActivity.java | 33 +- .../policedatasystem/{ => main}/App.java | 2 +- .../{ => main}/model/ResourceList.java | 2 +- .../{ => main}/model/UserCredential.java | 2 +- .../{ => main}/viewmodel/IndexViewModel.java | 2 +- .../main/{ => widget}/RotatedTextView.java | 2 +- .../{ => main}/widget/WaterMarkBg.java | 2 +- .../{ => main}/widget/WaterMarkInfo.java | 2 +- .../{ => main}/widget/WaterMarkManager.java | 2 +- .../{ => main}/widget/WaterMarkView.java | 2 +- .../{ => mine}/fragment/MineFragment.java | 2 +- .../policedatasystem/util/Constants.java | 2 +- .../police/policedatasystem/util/UiUtils.java | 2 +- app/src/main/res/layout/activity_index.xml | 6 +- .../res/layout/activity_key_person_detail.xml | 2 +- .../activity_police_emergency_detail.xml | 2 +- .../res/layout/bottom_navigation_view.xml | 24 + app/src/main/res/layout/dialog_selector.xml | 24 + app/src/main/res/layout/dropdown_layout4.xml | 123 ++-- app/src/main/res/layout/fragment_apply.xml | 8 +- app/src/main/res/layout/fragment_improve.xml | 94 +++ .../main/res/layout/item_dialog_selector.xml | 18 + app/src/main/res/layout/view_water_mark.xml | 2 +- .../res/mipmap-xxhdpi/icon_improve_normal.png | Bin 0 -> 2208 bytes .../mipmap-xxhdpi/icon_improve_selected.png | Bin 0 -> 2238 bytes 48 files changed, 1125 insertions(+), 704 deletions(-) create mode 100644 app/src/main/java/com/police/policedatasystem/apply/fragment/ApplyFragment.java create mode 100644 app/src/main/java/com/police/policedatasystem/apply/model/ApplyDept.java create mode 100644 app/src/main/java/com/police/policedatasystem/apply/model/ApplyPerson.java create mode 100644 app/src/main/java/com/police/policedatasystem/apply/model/ApplyType.java create mode 100644 app/src/main/java/com/police/policedatasystem/apply/viewmodel/ApplyViewModel.java rename app/src/main/java/com/police/policedatasystem/{ => data}/fragment/DataFragment.java (98%) rename app/src/main/java/com/police/policedatasystem/{ => data}/model/DataCount.java (95%) rename app/src/main/java/com/police/policedatasystem/{ => data}/model/KeyPerson.java (97%) rename app/src/main/java/com/police/policedatasystem/{ => data}/model/KeyPersonDetail.java (99%) rename app/src/main/java/com/police/policedatasystem/{ => data}/model/PoliceEmergency.java (95%) rename app/src/main/java/com/police/policedatasystem/{ => data}/model/PoliceEmergencyDetail.java (99%) rename app/src/main/java/com/police/policedatasystem/{ => data}/viewmodel/DataViewModel.java (96%) delete mode 100644 app/src/main/java/com/police/policedatasystem/fragment/ApplyFragment.java create mode 100644 app/src/main/java/com/police/policedatasystem/http/BaseRequestClient.java create mode 100644 app/src/main/java/com/police/policedatasystem/improve/fragment/ImproveFragment.java create mode 100644 app/src/main/java/com/police/policedatasystem/improve/viewmodel/ImproveViewModel.java rename app/src/main/java/com/police/policedatasystem/{ => main}/App.java (91%) rename app/src/main/java/com/police/policedatasystem/{ => main}/model/ResourceList.java (95%) rename app/src/main/java/com/police/policedatasystem/{ => main}/model/UserCredential.java (98%) rename app/src/main/java/com/police/policedatasystem/{ => main}/viewmodel/IndexViewModel.java (82%) rename app/src/main/java/com/police/policedatasystem/main/{ => widget}/RotatedTextView.java (96%) rename app/src/main/java/com/police/policedatasystem/{ => main}/widget/WaterMarkBg.java (98%) rename app/src/main/java/com/police/policedatasystem/{ => main}/widget/WaterMarkInfo.java (98%) rename app/src/main/java/com/police/policedatasystem/{ => main}/widget/WaterMarkManager.java (98%) rename app/src/main/java/com/police/policedatasystem/{ => main}/widget/WaterMarkView.java (99%) rename app/src/main/java/com/police/policedatasystem/{ => mine}/fragment/MineFragment.java (98%) create mode 100644 app/src/main/res/layout/dialog_selector.xml create mode 100644 app/src/main/res/layout/fragment_improve.xml create mode 100644 app/src/main/res/layout/item_dialog_selector.xml create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_improve_normal.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_improve_selected.png diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6b6f98b..ac81e78 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -16,7 +16,7 @@ applyTypes) { + // 初始化 PopupWindow + PopupWindow popupWindow = new PopupWindow(getContext()); + // 加载自定义布局 + DropdownLayout4Binding contentViewBinding = DropdownLayout4Binding.inflate(getLayoutInflater()); + View contentView = contentViewBinding.getRoot(); + // 设置 PopupWindow 的宽高 + popupWindow.setWidth(LinearLayout.LayoutParams.MATCH_PARENT); + popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.all_7_fff_bg)); + popupWindow.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT); + // 设置 PopupWindow 显示的位置(相对于按钮) + popupWindow.showAtLocation(binding.typeGroup, Gravity.NO_GRAVITY, 0, 0); + binding.tvApplySearchTitle.setText(applyTypes.get(0).getDictLabel()); + for (ApplyType item : applyTypes) { + TextView textView = new TextView(getContext()); + textView.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + textView.setHeight(UiUtils.dp2Px(40)); + textView.setGravity(Gravity.CENTER_VERTICAL); + textView.setTextSize(16); + textView.setBackgroundResource(R.color.white); + textView.setText(item.getDictLabel()); + contentViewBinding.llApplyTypeGroup.addView(textView); + textView.setOnClickListener(view -> { + // 处理菜单项 1 的点击事件 + binding.tvApplySearchTitle.setText(item.getDictLabel()); + popupWindow.dismiss(); // 关闭 PopupWindow + }); + } + // 将自定义布局设置为 PopupWindow 的内容视图 + popupWindow.setContentView(contentView); + // 设置 PopupWindow 的焦点 + popupWindow.setFocusable(true); + popupWindow.setOutsideTouchable(true); // 设置点击 PopupWindow 外部区域使其消失 + binding.typeGroup.setOnClickListener(view -> { + popupWindow.setWidth(binding.typeGroup.getWidth()); + popupWindow.showAsDropDown(binding.typeGroup); + }); + binding.includeApply.tvQueryName.setOnClickListener(view -> { + + }); + binding.includeApply.tvQueryOrg.setOnClickListener(view -> { + + }); + } + + public void setPopupWindow2(List applyDept) { + + } + + public void setPopupWindow3(List applyPeople) { + + } + + public void loadingShow() { + if (getActivity() != null) { + getActivity().runOnUiThread(() -> binding.rlLoading.setVisibility(View.VISIBLE)); + } + } + + public void loadingNone() { + if (getActivity() != null) { + getActivity().runOnUiThread(() -> binding.rlLoading.setVisibility(View.GONE)); + } + } + + public void showDialog() { + if (getContext() == null) return; + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + DialogSelectorBinding selectorBinding = DialogSelectorBinding.inflate(getLayoutInflater()); + View dialogView = selectorBinding.getRoot(); + RecyclerView recyclerView = selectorBinding.rcv; + recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); + List items = Arrays.asList("Item 1", "Item 2", "Item 3", "Item 4"); + BaseQuickAdapter adapter = new BaseQuickAdapter(R.layout.item_dialog_selector, items) { + @Override + protected void convert(@NonNull BaseViewHolder baseViewHolder, String s) { + baseViewHolder.setText(R.id.tv_item_text, s); + } + }; + recyclerView.setAdapter(adapter); + adapter.setOnItemClickListener((adapter1, view, position) -> { + + }); + builder.setView(dialogView); + AlertDialog dialog = builder.create(); + dialog.show(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/policedatasystem/apply/model/ApplyDept.java b/app/src/main/java/com/police/policedatasystem/apply/model/ApplyDept.java new file mode 100644 index 0000000..f1a1e01 --- /dev/null +++ b/app/src/main/java/com/police/policedatasystem/apply/model/ApplyDept.java @@ -0,0 +1,72 @@ +package com.police.policedatasystem.apply.model; + +import java.io.Serializable; + +/** + * {\"checked\":false,\"id\":\"220000000000\",\"name\":\"吉林省公安厅\",\"nocheck\":false,\"open\":false,\"pId\":\"0\",\"title\":\"吉林省公安厅\"} + */ +public class ApplyDept implements Serializable { + private boolean checked; + private String id; + private String name; + private String pId; + private String title; + private boolean open; + private boolean nocheck; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getpId() { + return pId; + } + + public void setpId(String pId) { + this.pId = pId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public boolean isNocheck() { + return nocheck; + } + + public void setNocheck(boolean nocheck) { + this.nocheck = nocheck; + } +} diff --git a/app/src/main/java/com/police/policedatasystem/apply/model/ApplyPerson.java b/app/src/main/java/com/police/policedatasystem/apply/model/ApplyPerson.java new file mode 100644 index 0000000..0848231 --- /dev/null +++ b/app/src/main/java/com/police/policedatasystem/apply/model/ApplyPerson.java @@ -0,0 +1,24 @@ +package com.police.policedatasystem.apply.model; + +import java.io.Serializable; + +public class ApplyPerson implements Serializable { + private String loginName; + private String userName; + + public String getLoginName() { + return loginName; + } + + public void setLoginName(String loginName) { + this.loginName = loginName; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } +} diff --git a/app/src/main/java/com/police/policedatasystem/apply/model/ApplyType.java b/app/src/main/java/com/police/policedatasystem/apply/model/ApplyType.java new file mode 100644 index 0000000..8225685 --- /dev/null +++ b/app/src/main/java/com/police/policedatasystem/apply/model/ApplyType.java @@ -0,0 +1,33 @@ +package com.police.policedatasystem.apply.model; + +import java.io.Serializable; + +public class ApplyType implements Serializable { + private String dictLabel; + private String dictSort; + private String dictValue; + + public String getDictLabel() { + return dictLabel; + } + + public void setDictLabel(String dictLabel) { + this.dictLabel = dictLabel; + } + + public String getDictSort() { + return dictSort; + } + + public void setDictSort(String dictSort) { + this.dictSort = dictSort; + } + + public String getDictValue() { + return dictValue; + } + + public void setDictValue(String dictValue) { + this.dictValue = dictValue; + } +} diff --git a/app/src/main/java/com/police/policedatasystem/apply/viewmodel/ApplyViewModel.java b/app/src/main/java/com/police/policedatasystem/apply/viewmodel/ApplyViewModel.java new file mode 100644 index 0000000..f2b9c34 --- /dev/null +++ b/app/src/main/java/com/police/policedatasystem/apply/viewmodel/ApplyViewModel.java @@ -0,0 +1,78 @@ +package com.police.policedatasystem.apply.viewmodel; + +import androidx.annotation.NonNull; + +import com.police.policedatasystem.apply.fragment.ApplyFragment; +import com.police.policedatasystem.apply.model.ApplyDept; +import com.police.policedatasystem.apply.model.ApplyType; +import com.police.policedatasystem.http.CustomCallBack; +import com.police.policedatasystem.indexActivity; +import com.police.policedatasystem.util.UiUtils; + +import java.util.Comparator; +import java.util.List; + +import okhttp3.Call; + +public class ApplyViewModel { + private final ApplyFragment fragment; + public indexActivity activity; + + public ApplyViewModel(ApplyFragment fragment, indexActivity activity) { + this.fragment = fragment; + this.activity = activity; + } + + public void getApplyType() { + fragment.loadingShow(); + activity.requestClient.getApplyType(new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + UiUtils.toast(e.getMessage()); + fragment.loadingNone(); + } + + @Override + public void onSuccess(List value) { + value.sort(Comparator.comparing(ApplyType::getDictSort)); + fragment.setPopupWindow(value); + fragment.loadingNone(); + } + }); + } + + public void getApplyDept() { + fragment.loadingShow(); + activity.requestClient.getApplyDept(new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + UiUtils.toast(e.getMessage()); + fragment.loadingNone(); + } + + @Override + public void onSuccess(List value) { +// value.sort(Comparator.comparing(ApplyDept::getDictSort)); + fragment.setPopupWindow2(value); + fragment.loadingNone(); + } + }); + } + public void getApplyPerson() { + fragment.loadingShow(); + activity.requestClient.getApplyDept(new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + UiUtils.toast(e.getMessage()); + fragment.loadingNone(); + } + + @Override + public void onSuccess(List value) { +// value.sort(Comparator.comparing(ApplyDept::getDictSort)); + fragment.setPopupWindow2(value); + fragment.loadingNone(); + } + }); + } +} diff --git a/app/src/main/java/com/police/policedatasystem/data/activity/KeyPersonDetailActivity.java b/app/src/main/java/com/police/policedatasystem/data/activity/KeyPersonDetailActivity.java index e48388f..eed887e 100644 --- a/app/src/main/java/com/police/policedatasystem/data/activity/KeyPersonDetailActivity.java +++ b/app/src/main/java/com/police/policedatasystem/data/activity/KeyPersonDetailActivity.java @@ -11,7 +11,7 @@ import android.widget.TextView; import com.bumptech.glide.Glide; import com.google.gson.Gson; import com.police.policedatasystem.databinding.ActivityKeyPersonDetailBinding; -import com.police.policedatasystem.model.KeyPersonDetail; +import com.police.policedatasystem.data.model.KeyPersonDetail; import com.police.policedatasystem.util.Constants; import com.police.policedatasystem.util.UiUtils; diff --git a/app/src/main/java/com/police/policedatasystem/data/activity/PoliceEmergencyDetailActivity.java b/app/src/main/java/com/police/policedatasystem/data/activity/PoliceEmergencyDetailActivity.java index 3211c5f..e2085b4 100644 --- a/app/src/main/java/com/police/policedatasystem/data/activity/PoliceEmergencyDetailActivity.java +++ b/app/src/main/java/com/police/policedatasystem/data/activity/PoliceEmergencyDetailActivity.java @@ -8,9 +8,9 @@ import android.widget.TextView; import com.bumptech.glide.Glide; import com.google.gson.Gson; -import com.police.policedatasystem.App; +import com.police.policedatasystem.main.App; import com.police.policedatasystem.databinding.ActivityPoliceEmergencyDetailBinding; -import com.police.policedatasystem.model.PoliceEmergencyDetail; +import com.police.policedatasystem.data.model.PoliceEmergencyDetail; import com.police.policedatasystem.util.Constants; import com.police.policedatasystem.util.UiUtils; diff --git a/app/src/main/java/com/police/policedatasystem/data/adapter/KeyPersonAdapter.java b/app/src/main/java/com/police/policedatasystem/data/adapter/KeyPersonAdapter.java index 5b60884..f28b10c 100644 --- a/app/src/main/java/com/police/policedatasystem/data/adapter/KeyPersonAdapter.java +++ b/app/src/main/java/com/police/policedatasystem/data/adapter/KeyPersonAdapter.java @@ -5,9 +5,9 @@ import android.widget.ImageView; import com.bumptech.glide.Glide; import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.viewholder.BaseViewHolder; -import com.police.policedatasystem.App; +import com.police.policedatasystem.main.App; import com.police.policedatasystem.R; -import com.police.policedatasystem.model.KeyPerson; +import com.police.policedatasystem.data.model.KeyPerson; import com.police.policedatasystem.util.UiUtils; public class KeyPersonAdapter extends BaseQuickAdapter { diff --git a/app/src/main/java/com/police/policedatasystem/data/adapter/PoliceEmergencyAdapter.java b/app/src/main/java/com/police/policedatasystem/data/adapter/PoliceEmergencyAdapter.java index 08f8e49..ac51552 100644 --- a/app/src/main/java/com/police/policedatasystem/data/adapter/PoliceEmergencyAdapter.java +++ b/app/src/main/java/com/police/policedatasystem/data/adapter/PoliceEmergencyAdapter.java @@ -3,7 +3,7 @@ package com.police.policedatasystem.data.adapter; import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.viewholder.BaseViewHolder; import com.police.policedatasystem.R; -import com.police.policedatasystem.model.PoliceEmergency; +import com.police.policedatasystem.data.model.PoliceEmergency; import com.police.policedatasystem.util.UiUtils; public class PoliceEmergencyAdapter extends BaseQuickAdapter { diff --git a/app/src/main/java/com/police/policedatasystem/fragment/DataFragment.java b/app/src/main/java/com/police/policedatasystem/data/fragment/DataFragment.java similarity index 98% rename from app/src/main/java/com/police/policedatasystem/fragment/DataFragment.java rename to app/src/main/java/com/police/policedatasystem/data/fragment/DataFragment.java index dd9ce2a..4a33ca6 100644 --- a/app/src/main/java/com/police/policedatasystem/fragment/DataFragment.java +++ b/app/src/main/java/com/police/policedatasystem/data/fragment/DataFragment.java @@ -1,4 +1,4 @@ -package com.police.policedatasystem.fragment; +package com.police.policedatasystem.data.fragment; import android.app.Activity; import android.content.Context; @@ -23,9 +23,9 @@ import com.police.policedatasystem.data.adapter.KeyPersonAdapter; import com.police.policedatasystem.data.adapter.PoliceEmergencyAdapter; import com.police.policedatasystem.databinding.FragmentDataBinding; import com.police.policedatasystem.indexActivity; -import com.police.policedatasystem.model.KeyPerson; -import com.police.policedatasystem.model.PoliceEmergency; -import com.police.policedatasystem.viewmodel.DataViewModel; +import com.police.policedatasystem.data.model.KeyPerson; +import com.police.policedatasystem.data.model.PoliceEmergency; +import com.police.policedatasystem.data.viewmodel.DataViewModel; import com.scwang.smart.refresh.footer.ClassicsFooter; import com.scwang.smart.refresh.header.ClassicsHeader; diff --git a/app/src/main/java/com/police/policedatasystem/model/DataCount.java b/app/src/main/java/com/police/policedatasystem/data/model/DataCount.java similarity index 95% rename from app/src/main/java/com/police/policedatasystem/model/DataCount.java rename to app/src/main/java/com/police/policedatasystem/data/model/DataCount.java index b0a24ed..7f7ab93 100644 --- a/app/src/main/java/com/police/policedatasystem/model/DataCount.java +++ b/app/src/main/java/com/police/policedatasystem/data/model/DataCount.java @@ -1,4 +1,4 @@ -package com.police.policedatasystem.model; +package com.police.policedatasystem.data.model; import java.io.Serializable; diff --git a/app/src/main/java/com/police/policedatasystem/model/KeyPerson.java b/app/src/main/java/com/police/policedatasystem/data/model/KeyPerson.java similarity index 97% rename from app/src/main/java/com/police/policedatasystem/model/KeyPerson.java rename to app/src/main/java/com/police/policedatasystem/data/model/KeyPerson.java index 9708000..bbb8ce2 100644 --- a/app/src/main/java/com/police/policedatasystem/model/KeyPerson.java +++ b/app/src/main/java/com/police/policedatasystem/data/model/KeyPerson.java @@ -1,4 +1,4 @@ -package com.police.policedatasystem.model; +package com.police.policedatasystem.data.model; import java.io.Serializable; diff --git a/app/src/main/java/com/police/policedatasystem/model/KeyPersonDetail.java b/app/src/main/java/com/police/policedatasystem/data/model/KeyPersonDetail.java similarity index 99% rename from app/src/main/java/com/police/policedatasystem/model/KeyPersonDetail.java rename to app/src/main/java/com/police/policedatasystem/data/model/KeyPersonDetail.java index 67e5f3b..4f0e36a 100644 --- a/app/src/main/java/com/police/policedatasystem/model/KeyPersonDetail.java +++ b/app/src/main/java/com/police/policedatasystem/data/model/KeyPersonDetail.java @@ -1,4 +1,4 @@ -package com.police.policedatasystem.model; +package com.police.policedatasystem.data.model; import java.io.Serializable; import java.util.List; diff --git a/app/src/main/java/com/police/policedatasystem/model/PoliceEmergency.java b/app/src/main/java/com/police/policedatasystem/data/model/PoliceEmergency.java similarity index 95% rename from app/src/main/java/com/police/policedatasystem/model/PoliceEmergency.java rename to app/src/main/java/com/police/policedatasystem/data/model/PoliceEmergency.java index abdd193..65f136a 100644 --- a/app/src/main/java/com/police/policedatasystem/model/PoliceEmergency.java +++ b/app/src/main/java/com/police/policedatasystem/data/model/PoliceEmergency.java @@ -1,4 +1,4 @@ -package com.police.policedatasystem.model; +package com.police.policedatasystem.data.model; import java.io.Serializable; diff --git a/app/src/main/java/com/police/policedatasystem/model/PoliceEmergencyDetail.java b/app/src/main/java/com/police/policedatasystem/data/model/PoliceEmergencyDetail.java similarity index 99% rename from app/src/main/java/com/police/policedatasystem/model/PoliceEmergencyDetail.java rename to app/src/main/java/com/police/policedatasystem/data/model/PoliceEmergencyDetail.java index f3d0381..5d4fccf 100644 --- a/app/src/main/java/com/police/policedatasystem/model/PoliceEmergencyDetail.java +++ b/app/src/main/java/com/police/policedatasystem/data/model/PoliceEmergencyDetail.java @@ -1,4 +1,4 @@ -package com.police.policedatasystem.model; +package com.police.policedatasystem.data.model; import java.io.Serializable; import java.util.List; diff --git a/app/src/main/java/com/police/policedatasystem/viewmodel/DataViewModel.java b/app/src/main/java/com/police/policedatasystem/data/viewmodel/DataViewModel.java similarity index 96% rename from app/src/main/java/com/police/policedatasystem/viewmodel/DataViewModel.java rename to app/src/main/java/com/police/policedatasystem/data/viewmodel/DataViewModel.java index 9dabad9..d896558 100644 --- a/app/src/main/java/com/police/policedatasystem/viewmodel/DataViewModel.java +++ b/app/src/main/java/com/police/policedatasystem/data/viewmodel/DataViewModel.java @@ -1,21 +1,21 @@ -package com.police.policedatasystem.viewmodel; +package com.police.policedatasystem.data.viewmodel; import androidx.annotation.NonNull; import com.google.gson.Gson; import com.police.policedatasystem.data.activity.KeyPersonDetailActivity; import com.police.policedatasystem.data.activity.PoliceEmergencyDetailActivity; -import com.police.policedatasystem.fragment.DataFragment; +import com.police.policedatasystem.data.fragment.DataFragment; import com.police.policedatasystem.http.CustomCallBack; import com.police.policedatasystem.http.requestparams.GetKeyPersonListParams; import com.police.policedatasystem.http.requestparams.GetOrgKeyPersonListParams; import com.police.policedatasystem.http.requestparams.GetPoliceEmergencyListParams; import com.police.policedatasystem.indexActivity; -import com.police.policedatasystem.model.DataCount; -import com.police.policedatasystem.model.KeyPerson; -import com.police.policedatasystem.model.KeyPersonDetail; -import com.police.policedatasystem.model.PoliceEmergency; -import com.police.policedatasystem.model.PoliceEmergencyDetail; +import com.police.policedatasystem.data.model.DataCount; +import com.police.policedatasystem.data.model.KeyPerson; +import com.police.policedatasystem.data.model.KeyPersonDetail; +import com.police.policedatasystem.data.model.PoliceEmergency; +import com.police.policedatasystem.data.model.PoliceEmergencyDetail; import com.police.policedatasystem.util.Constants; import com.police.policedatasystem.util.UiUtils; diff --git a/app/src/main/java/com/police/policedatasystem/fragment/ApplyFragment.java b/app/src/main/java/com/police/policedatasystem/fragment/ApplyFragment.java deleted file mode 100644 index a97ea94..0000000 --- a/app/src/main/java/com/police/policedatasystem/fragment/ApplyFragment.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.police.policedatasystem.fragment; - -import android.content.Context; -import android.graphics.drawable.ColorDrawable; -import android.os.Bundle; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; -import android.widget.PopupWindow; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.police.policedatasystem.R; -import com.police.policedatasystem.databinding.FragmentApplyBinding; - -public class ApplyFragment extends Fragment { - private FragmentApplyBinding binding; - private PopupWindow popupWindow; - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - binding = FragmentApplyBinding.inflate(inflater); - initView(); - return binding.getRoot(); - } - - private void initView() { - setPopupWindow(); - binding.typeGroup.setOnClickListener(view -> { - popupWindow.setWidth(binding.typeGroup.getWidth()); - popupWindow.showAsDropDown(binding.typeGroup); - }); - } - - private void setPopupWindow() { - // 初始化 PopupWindow - popupWindow = new PopupWindow(getContext()); - // 加载自定义布局 - LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); - View contentView = inflater.inflate(R.layout.dropdown_layout4, null); - // 设置 PopupWindow 的宽高 - popupWindow.setWidth(LinearLayout.LayoutParams.MATCH_PARENT); - popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.all_7_fff_bg)); - popupWindow.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT); - // 设置 PopupWindow 的背景 -// popupWindow.setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); - // 设置 PopupWindow 显示的位置(相对于按钮) - popupWindow.showAtLocation(binding.typeGroup, Gravity.NO_GRAVITY, 0, 0); - // 为每个菜单项设置点击事件 - TextView textView1 = contentView.findViewById(R.id.textView1); // 假设这是菜单项1的ID - TextView textView2 = contentView.findViewById(R.id.textView2); // 假设这是菜单项2的ID - TextView textView3 = contentView.findViewById(R.id.textView3); // 假设这是菜单项2的ID - TextView textView4 = contentView.findViewById(R.id.textView4); // 假设这是菜单项2的ID - TextView textView5 = contentView.findViewById(R.id.textView5); // 假设这是菜单项2的ID - TextView textView6 = contentView.findViewById(R.id.textView6); // 假设这是菜单项2的ID - textView1.setOnClickListener(v -> { - // 处理菜单项 1 的点击事件 - binding.tvApplySearchTitle.setText("处置警情"); - popupWindow.dismiss(); // 关闭 PopupWindow - }); - textView2.setOnClickListener(v -> { - // 处理菜单项 2 的点击事件 - binding.tvApplySearchTitle.setText("处置案情"); - popupWindow.dismiss(); // 关闭 PopupWindow - }); - textView3.setOnClickListener(v -> { - // 处理菜单项 2 的点击事件 - binding.tvApplySearchTitle.setText("管控重点人"); - popupWindow.dismiss(); // 关闭 PopupWindow - }); - textView4.setOnClickListener(v -> { - // 处理菜单项 2 的点击事件 - binding.tvApplySearchTitle.setText("追踪逃犯"); - popupWindow.dismiss(); // 关闭 PopupWindow - }); - textView5.setOnClickListener(v -> { - // 处理菜单项 2 的点击事件 - binding.tvApplySearchTitle.setText("核查线索"); - popupWindow.dismiss(); // 关闭 PopupWindow - }); - textView6.setOnClickListener(v -> { - // 处理菜单项 2 的点击事件 - binding.tvApplySearchTitle.setText("核验信息"); - popupWindow.dismiss(); // 关闭 PopupWindow - }); - // 将自定义布局设置为 PopupWindow 的内容视图 - popupWindow.setContentView(contentView); - // 设置 PopupWindow 的焦点 - popupWindow.setFocusable(true); - popupWindow.setOutsideTouchable(true); // 设置点击 PopupWindow 外部区域使其消失 - } - -} diff --git a/app/src/main/java/com/police/policedatasystem/http/BaseRequestClient.java b/app/src/main/java/com/police/policedatasystem/http/BaseRequestClient.java new file mode 100644 index 0000000..1ddbb6e --- /dev/null +++ b/app/src/main/java/com/police/policedatasystem/http/BaseRequestClient.java @@ -0,0 +1,259 @@ +package com.police.policedatasystem.http; + +import static com.police.policedatasystem.util.UaCredentialApi.PARAMS_KEY_UA_APP_CREDENTIAL; +import static com.police.policedatasystem.util.UaCredentialApi.PARAMS_KEY_UA_RET_CODE; +import static com.police.policedatasystem.util.UaCredentialApi.PARAMS_KEY_UA_RET_SUCCESS; +import static com.police.policedatasystem.util.UaCredentialApi.PARAMS_KEY_UA_USER_CREDENTIAL; + +import android.net.Uri; +import android.os.Bundle; + +import androidx.annotation.NonNull; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.police.policedatasystem.http.requestparams.RequestParams; +import com.police.policedatasystem.http.requestparams.ResponseParams; +import com.police.policedatasystem.indexActivity; +import com.police.policedatasystem.main.App; +import com.police.policedatasystem.main.model.ResourceList; +import com.police.policedatasystem.main.model.UserCredential; +import com.police.policedatasystem.util.Constants; +import com.police.policedatasystem.util.UiUtils; + +import java.io.IOException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +import okhttp3.logging.HttpLoggingInterceptor; + +public class BaseRequestClient { + public final indexActivity activity; + private OkHttpClient okHttpClient; + + public BaseRequestClient(indexActivity activity) { + this.activity = activity; + } + + /* + + */ + private void call(String url, RequestParams params, Callback callback) { + try { + RequestBody body = RequestBody.create(new Gson().toJson(params), MediaType.parse("application/json; charset=utf-8")); + Request request = new Request.Builder() + .url(url) + .post(body) + .addHeader("userCredential", URLEncoder.encode(Constants.USER_CREDENTIAL, "UTF-8")) + .addHeader("appCredential", URLEncoder.encode(Constants.APP_CREDENTIAL, "UTF-8")) + .build(); + okHttpClient.newCall(request).enqueue(callback); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + public void init() { + HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); + loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); // 设置日志级别,例如打印请求和响应的body + okHttpClient = new OkHttpClient.Builder() + .addInterceptor(loggingInterceptor) // 添加日志拦截器 + .callTimeout(30, TimeUnit.SECONDS) + .connectTimeout(30, TimeUnit.SECONDS) + .build(); + //获取接口需要用到的凭证 + getInterface(); + } + + //获取接口需要用到的凭证 + private void getInterface() { + Uri uri = Uri.parse("content://com.ydjw.ua.getCredential"); + Bundle params = new Bundle(); + String paramsMessageId = UiUtils.uuid(); + //构建参数 + params.putString("messageId", paramsMessageId);//消息id + params.putString("version", "1");//接口版本号,当前为1 + params.putString("appId", Constants.APP_ID);// + params.putString("orgId", Constants.ORG_ID);// + params.putString("networkAreaCode", "3");// + params.putString("packageName", "com.police.policedatasystem");//应用包名,可空 + //获取票据 + Bundle bundle = App.getApp().getContentResolver().call(uri, "", null, params); + //解析结果 + if (bundle == null) { + UiUtils.toast("获取应用凭证失败,bundle为空!"); + return; + } + String messageId = bundle.getString("messageId"); + if (paramsMessageId.equals(messageId)) { + int resultCode = bundle.getInt(PARAMS_KEY_UA_RET_CODE); + if (PARAMS_KEY_UA_RET_SUCCESS == resultCode) { + Constants.APP_CREDENTIAL = bundle.getString(PARAMS_KEY_UA_APP_CREDENTIAL); + Constants.USER_CREDENTIAL = bundle.getString(PARAMS_KEY_UA_USER_CREDENTIAL); + Constants.USER_ID = new Gson().fromJson(Constants.USER_CREDENTIAL, UserCredential.class).getCredential().getLoad().getUserInfo().getJh(); + Constants.SFZH = new Gson().fromJson(Constants.USER_CREDENTIAL, UserCredential.class).getCredential().getLoad().getUserInfo().getSfzh(); + Constants.USER_ORG_ID = new Gson().fromJson(Constants.USER_CREDENTIAL, UserCredential.class).getCredential().getLoad().getUserInfo().getOrgId(); + //根据票据寻址 + findAddress(); + } else { + UiUtils.toast(bundle.getString("message") + ",resultCode:" + resultCode); + } + } else { + UiUtils.toast("获取应用凭证失败,messageId不一致!"); + } + } + + //第二步,寻址 + private void findAddress() { + Thread thread = new Thread(() -> { + // 在这里执行耗时任务 + Uri uri = Uri.parse("content://com.ydjw.rsb.getResourceAddress"); + Bundle bundle = new Bundle(); + String paramsMessageId = UiUtils.uuid(); + bundle.putString("appCredential", Constants.APP_CREDENTIAL);//应用凭证,由上一步获得 + bundle.putString("userCredential", Constants.USER_CREDENTIAL);//用户凭证,由上一步获得 + bundle.putString("version", "1");//服务总线接口版本号,当前为1 + bundle.putString("messageId", paramsMessageId);//消息 ID + Bundle callBack = App.getApp().getContentResolver().call(uri, "", null, bundle); + if (callBack == null) { + UiUtils.toast("获取应用资源地址失败,bundle为空"); + return; + } + String messageId = callBack.getString("messageId"); + String resourceList = callBack.getString("resourceList"); + if (paramsMessageId.equals(messageId)) { + int resultCode = callBack.getInt("resultCode"); + if (resultCode == 0) { + if (UiUtils.isEmpty(resourceList)) { + UiUtils.toast("寻址失败,resourceList为空!"); + return; + } + List resourceLists = new Gson().fromJson(resourceList, new TypeToken>() { + }.getType()); + for (ResourceList item : resourceLists) { + Constants.resourceListsMap.put(item.getResourceId(), item); + } + //2.发起请求,获取重点人数据 + activity.initData(); + } else { + if (UiUtils.isEmpty(resourceList)) { + UiUtils.toast("寻址失败,错误码:" + resultCode); + } + } + } + }); + thread.start(); + } + + + /** + * 基类封装 + */ + public void request(String urlKey, String jsonParams, CustomCallBack callBack) { + ResourceList resourceList = Constants.resourceListsMap.get(urlKey); + if (resourceList == null) { + return; + } + RequestParams.Parameter parameter = getParameter(urlKey, jsonParams); + RequestParams requestParams = new RequestParams(); + requestParams.setMessageId(UiUtils.uuid()); + requestParams.setVersion("1.0"); + requestParams.setParameter(parameter); + call(resourceList.getResourceAddress(), requestParams, new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull IOException e) { + // 请求失败 + activity.runOnUiThread(() -> callBack.onError(call, e)); + } + + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) { + if (!response.isSuccessful()) { + activity.runOnUiThread(() -> callBack.onError(call, new IOException("Unexpected code " + response))); + return; + } + try { + // 请求成功,处理响应数据 + if (response.body() == null) { + activity.runOnUiThread(() -> callBack.onError(call, new Exception("服务器返回数据异常"))); + return; + } + String responseBody = response.body().string(); + if (urlKey.equals(Constants.APPLY_TYPE_ID)){ + responseBody = "{\n" + + "\"code\":\"200\",\n" + + "\"data\":{\n" + + "\"dataList\":[\n" + + "{\n" + + "\"fieldValues\":[\n" + + "{\n" + + "\"field\":\"outjson\",\n" + + "\"value\":\"[{\\\"dictLabel\\\":\\\"管控重点人\\\",\\\"dictSort\\\":1,\\\"dictValue\\\":\\\"1\\\"},{\\\"dictLabel\\\":\\\"核验信息\\\",\\\"dictSort\\\":3,\\\"dictValue\\\":\\\"3\\\"},{\\\"dictLabel\\\":\\\"追踪逃犯\\\",\\\"dictSort\\\":2,\\\"dictValue\\\":\\\"6\\\"},{\\\"dictLabel\\\":\\\"处置警情\\\",\\\"dictSort\\\":0,\\\"dictValue\\\":\\\"0\\\"},{\\\"dictLabel\\\":\\\"核查线索\\\",\\\"dictSort\\\":2,\\\"dictValue\\\":\\\"2\\\"},{\\\"dictLabel\\\":\\\"其他\\\",\\\"dictSort\\\":5,\\\"dictValue\\\":\\\"5\\\"},{\\\"dictLabel\\\":\\\"处置案情\\\",\\\"dictSort\\\":1,\\\"dictValue\\\":\\\"7\\\"}]\"\n" + + "}\n" + + "]\n" + + "}\n" + + "],\n" + + "\"page\":{\n" + + "\"total\":7,\n" + + "\"pageNo\":10,\n" + + "\"pageSize\":1\n" + + "}\n" + + "},\n" + + "\"messageId\":\"788a1cc4-2009-4744-ba66-7503ca37b0f2\",\n" + + "\"message\":\"ok\",\n" + + "\"version\":\"1.0\"\n" + + "}"; + } + ResponseParams responseParams = new Gson().fromJson(responseBody, ResponseParams.class); + if (!"200".equals(responseParams.getCode())) { + activity.runOnUiThread(() -> callBack.onError(call, new Exception("服务器出错,请联系开发人员或稍后重试!"))); + return; + } + if (responseParams.getData().getDataList() == null || responseParams.getData().getDataList().isEmpty()) { + activity.runOnUiThread(() -> callBack.onError(call, new Exception("服务器返回数据异常"))); + return; + } + ResponseParams.FieldData fieldData = responseParams.getData().getDataList().get(0); + if (fieldData.getFieldValues() == null || fieldData.getFieldValues().isEmpty()) { + activity.runOnUiThread(() -> callBack.onError(call, new Exception("服务器返回数据异常"))); + return; + } + activity.runOnUiThread(() -> callBack.onSuccess(fieldData.getFieldValues().get(0).getValue())); + } catch (Exception e) { + activity.runOnUiThread(() -> callBack.onError(call, e)); + } + } + }); + } + + @NonNull + private static RequestParams.Parameter getParameter(String urlKey, String jsonParams) { + RequestParams.Condition condition = new RequestParams.Condition(); + condition.setLogicalOperate("and"); + RequestParams.KeyValues keyValues = new RequestParams.KeyValues(); + keyValues.setKey("injson"); + keyValues.setValue(jsonParams); + List keyValuesList = new ArrayList<>(); + keyValuesList.add(keyValues); + condition.setKeyValueList(keyValuesList); + RequestParams.Parameter parameter = new RequestParams.Parameter(); + parameter.setCondition(condition); + parameter.setPage(new RequestParams.Page()); + parameter.setFields("outjson"); + parameter.setNetworkCode("3"); + parameter.setOrderBy(null); + parameter.setRegionalismCode(Constants.ORG_ID); + parameter.setDataObjId(urlKey); + return parameter; + } +} diff --git a/app/src/main/java/com/police/policedatasystem/http/CustomCallBack.java b/app/src/main/java/com/police/policedatasystem/http/CustomCallBack.java index 8235faf..02994b1 100644 --- a/app/src/main/java/com/police/policedatasystem/http/CustomCallBack.java +++ b/app/src/main/java/com/police/policedatasystem/http/CustomCallBack.java @@ -9,32 +9,4 @@ public abstract class CustomCallBack { public abstract void onSuccess(T value); -// @Override -// public void onFailure(@NonNull Call call, @NonNull IOException e) { -// onError(call, e); -// } -// -// @Override -// public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { -// if (!response.isSuccessful()) { -// onError(call, new IOException("Unexpected code " + response)); -// return; -// } -// try { -// ResponseParams responseParams = new Gson().fromJson(response.body().string(), ResponseParams.class); -// if ("200".equals(responseParams.getCode())) { -// for (ResponseParams.FieldData item : responseParams.getData().getDataList()) { -// for (ResponseParams.FieldValues i : item.getFieldValues()) { -//// new Gson().fromJson() -//// onSuccess(i.getValue()); -// } -// } -// } else { -// onError(call, new IOException(responseParams.getMessage())); -// } -// } catch (Exception e) { -// onError(call, new IOException("Unexpected code " + response)); -// } -// } - } diff --git a/app/src/main/java/com/police/policedatasystem/http/RequestClient.java b/app/src/main/java/com/police/policedatasystem/http/RequestClient.java index 61c1fb0..ca343c8 100644 --- a/app/src/main/java/com/police/policedatasystem/http/RequestClient.java +++ b/app/src/main/java/com/police/policedatasystem/http/RequestClient.java @@ -1,169 +1,35 @@ package com.police.policedatasystem.http; -import static com.police.policedatasystem.util.UaCredentialApi.PARAMS_KEY_UA_APP_CREDENTIAL; -import static com.police.policedatasystem.util.UaCredentialApi.PARAMS_KEY_UA_RET_CODE; -import static com.police.policedatasystem.util.UaCredentialApi.PARAMS_KEY_UA_RET_SUCCESS; -import static com.police.policedatasystem.util.UaCredentialApi.PARAMS_KEY_UA_USER_CREDENTIAL; - -import android.net.Uri; -import android.os.Bundle; - import androidx.annotation.NonNull; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import com.police.policedatasystem.App; +import com.police.policedatasystem.apply.model.ApplyDept; +import com.police.policedatasystem.apply.model.ApplyPerson; +import com.police.policedatasystem.apply.model.ApplyType; +import com.police.policedatasystem.data.model.DataCount; +import com.police.policedatasystem.data.model.KeyPerson; +import com.police.policedatasystem.data.model.KeyPersonDetail; +import com.police.policedatasystem.data.model.PoliceEmergency; +import com.police.policedatasystem.data.model.PoliceEmergencyDetail; import com.police.policedatasystem.http.requestparams.GetKeyPersonDetailParams; import com.police.policedatasystem.http.requestparams.GetKeyPersonListParams; import com.police.policedatasystem.http.requestparams.GetKeyPersonMessageCountParams; import com.police.policedatasystem.http.requestparams.GetOrgKeyPersonListParams; import com.police.policedatasystem.http.requestparams.GetPoliceEmergencyDetailParams; import com.police.policedatasystem.http.requestparams.GetPoliceEmergencyListParams; -import com.police.policedatasystem.http.requestparams.RequestParams; -import com.police.policedatasystem.http.requestparams.ResponseParams; import com.police.policedatasystem.indexActivity; -import com.police.policedatasystem.model.DataCount; -import com.police.policedatasystem.model.KeyPerson; -import com.police.policedatasystem.model.KeyPersonDetail; -import com.police.policedatasystem.model.PoliceEmergency; -import com.police.policedatasystem.model.PoliceEmergencyDetail; -import com.police.policedatasystem.model.ResourceList; -import com.police.policedatasystem.model.UserCredential; import com.police.policedatasystem.util.Constants; -import com.police.policedatasystem.util.UiUtils; -import java.io.IOException; -import java.net.URLEncoder; -import java.util.ArrayList; +import java.util.HashMap; import java.util.List; -import java.util.concurrent.TimeUnit; import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.MediaType; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.RequestBody; -import okhttp3.Response; -import okhttp3.logging.HttpLoggingInterceptor; -public class RequestClient { - private final indexActivity activity; - private OkHttpClient okHttpClient; +public class RequestClient extends BaseRequestClient { public RequestClient(indexActivity activity) { - this.activity = activity; - } - - /* - - */ - private void call(String url, RequestParams params, Callback callback) { - try { - RequestBody body = RequestBody.create(new Gson().toJson(params), MediaType.parse("application/json; charset=utf-8")); - Request request = new Request.Builder() - .url(url) - .post(body) - .addHeader("userCredential", URLEncoder.encode(Constants.USER_CREDENTIAL, "UTF-8")) - .addHeader("appCredential", URLEncoder.encode(Constants.APP_CREDENTIAL, "UTF-8")) - .build(); - okHttpClient.newCall(request).enqueue(callback); - } catch (Exception e) { - e.printStackTrace(); - } - - } - - public void init() { - HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); - loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); // 设置日志级别,例如打印请求和响应的body - okHttpClient = new OkHttpClient.Builder() - .addInterceptor(loggingInterceptor) // 添加日志拦截器 - .callTimeout(30, TimeUnit.SECONDS) - .connectTimeout(30, TimeUnit.SECONDS) - .build(); - //获取接口需要用到的凭证 - getInterface(); - } - - //获取接口需要用到的凭证 - private void getInterface() { - Uri uri = Uri.parse("content://com.ydjw.ua.getCredential"); - Bundle params = new Bundle(); - String paramsMessageId = UiUtils.uuid(); - //构建参数 - params.putString("messageId", paramsMessageId);//消息id - params.putString("version", "1");//接口版本号,当前为1 - params.putString("appId", Constants.APP_ID);// - params.putString("orgId", Constants.ORG_ID);// - params.putString("networkAreaCode", "3");// - params.putString("packageName", "com.police.policedatasystem");//应用包名,可空 - //获取票据 - Bundle bundle = App.getApp().getContentResolver().call(uri, "", null, params); - //解析结果 - if (bundle == null) { - UiUtils.toast("获取应用凭证失败,bundle为空!"); - return; - } - String messageId = bundle.getString("messageId"); - if (paramsMessageId.equals(messageId)) { - int resultCode = bundle.getInt(PARAMS_KEY_UA_RET_CODE); - if (PARAMS_KEY_UA_RET_SUCCESS == resultCode) { - Constants.APP_CREDENTIAL = bundle.getString(PARAMS_KEY_UA_APP_CREDENTIAL); - Constants.USER_CREDENTIAL = bundle.getString(PARAMS_KEY_UA_USER_CREDENTIAL); - Constants.USER_ID = new Gson().fromJson(Constants.USER_CREDENTIAL, UserCredential.class).getCredential().getLoad().getUserInfo().getJh(); - Constants.SFZH = new Gson().fromJson(Constants.USER_CREDENTIAL, UserCredential.class).getCredential().getLoad().getUserInfo().getSfzh(); - Constants.USER_ORG_ID = new Gson().fromJson(Constants.USER_CREDENTIAL, UserCredential.class).getCredential().getLoad().getUserInfo().getOrgId(); - //根据票据寻址 - findAddress(); - } else { - UiUtils.toast(bundle.getString("message") + ",resultCode:" + resultCode); - } - } else { - UiUtils.toast("获取应用凭证失败,messageId不一致!"); - } - } - - //第二步,寻址 - private void findAddress() { - Thread thread = new Thread(() -> { - // 在这里执行耗时任务 - Uri uri = Uri.parse("content://com.ydjw.rsb.getResourceAddress"); - Bundle bundle = new Bundle(); - String paramsMessageId = UiUtils.uuid(); - bundle.putString("appCredential", Constants.APP_CREDENTIAL);//应用凭证,由上一步获得 - bundle.putString("userCredential", Constants.USER_CREDENTIAL);//用户凭证,由上一步获得 - bundle.putString("version", "1");//服务总线接口版本号,当前为1 - bundle.putString("messageId", paramsMessageId);//消息 ID - Bundle callBack = App.getApp().getContentResolver().call(uri, "", null, bundle); - if (callBack == null) { - UiUtils.toast("获取应用资源地址失败,bundle为空"); - return; - } - String messageId = callBack.getString("messageId"); - String resourceList = callBack.getString("resourceList"); - if (paramsMessageId.equals(messageId)) { - int resultCode = callBack.getInt("resultCode"); - if (resultCode == 0) { - if (UiUtils.isEmpty(resourceList)) { - UiUtils.toast("寻址失败,resourceList为空!"); - return; - } - List resourceLists = new Gson().fromJson(resourceList, new TypeToken>() { - }.getType()); - for (ResourceList item : resourceLists) { - Constants.resourceListsMap.put(item.getResourceId(), item); - } - //2.发起请求,获取重点人数据 - activity.initData(); - } else { - if (UiUtils.isEmpty(resourceList)) { - UiUtils.toast("寻址失败,错误码:" + resultCode); - } - } - } - }); - thread.start(); + super(activity); } /** @@ -173,66 +39,20 @@ public class RequestClient { * @param callback 回调函数 */ public void getKeyPerson(GetKeyPersonListParams params, CustomCallBack> callback) { - ResourceList resourceList = Constants.resourceListsMap.get(Constants.KEY_PERSON_ID); - RequestParams.Condition condition = new RequestParams.Condition(); - condition.setLogicalOperate("and"); - RequestParams.KeyValues keyValues = new RequestParams.KeyValues(); - keyValues.setKey("injson"); params.setJybh(Constants.USER_ID); params.setSfhm(Constants.SFZH); params.setPageSize(Constants.PAGE_SIZE + ""); - keyValues.setValue(new Gson().toJson(params)); - List keyValuesList = new ArrayList<>(); - keyValuesList.add(keyValues); - condition.setKeyValueList(keyValuesList); - RequestParams.Parameter parameter = new RequestParams.Parameter(); - parameter.setCondition(condition); - parameter.setPage(new RequestParams.Page()); - parameter.setFields("outjson"); - parameter.setNetworkCode("3"); - parameter.setOrderBy(null); - parameter.setRegionalismCode(Constants.ORG_ID); - parameter.setDataObjId(Constants.KEY_PERSON_ID); - RequestParams requestParams = new RequestParams(); - requestParams.setMessageId(UiUtils.uuid()); - requestParams.setVersion("1.0"); - requestParams.setParameter(parameter); - if (resourceList == null) return; - call(resourceList.getResourceAddress(), requestParams, new Callback() { + request(Constants.KEY_PERSON_ID, new Gson().toJson(params), new CustomCallBack() { @Override - public void onFailure(@NonNull Call call, @NonNull IOException e) { - activity.runOnUiThread(() -> callback.onError(call, e)); - // 请求失败 - e.printStackTrace(); + public void onError(Call call, @NonNull Exception e) { + callback.onError(call, e); } @Override - public void onResponse(@NonNull Call call, @NonNull Response response) { - try { - // 请求成功,处理响应数据 - String responseBody = response.body().string(); - activity.runOnUiThread(() -> { - if (!response.isSuccessful()) { - callback.onError(call, new IOException("Unexpected code " + response)); - return; - } - ResponseParams responseParams = new Gson().fromJson(responseBody, ResponseParams.class); - if ("200".equals(responseParams.getCode())) { - for (ResponseParams.FieldData item : responseParams.getData().getDataList()) { - for (ResponseParams.FieldValues i : item.getFieldValues()) { - List keyPersonList = new Gson().fromJson(i.getValue(), new TypeToken>() { - }.getType()); - callback.onSuccess(keyPersonList); - } - } - } else { - callback.onError(call, new IOException(responseParams.getMessage())); - } - }); - } catch (Exception e) { - callback.onError(call, e); - e.printStackTrace(); - } + public void onSuccess(String value) { + List keyPersonList = new Gson().fromJson(value, new TypeToken>() { + }.getType()); + callback.onSuccess(keyPersonList); } }); } @@ -240,75 +60,23 @@ public class RequestClient { /** * 获取组织重点人数据 * - * @param params 搜索关键字姓名 - * @param callBack 回调函数 + * @param params 搜索关键字姓名 */ - public void getOrgKeyPerson(GetOrgKeyPersonListParams params, CustomCallBack> callBack) { - ResourceList resourceList = Constants.resourceListsMap.get(Constants.ORG_KEY_PERSON_ID); - RequestParams.Condition condition = new RequestParams.Condition(); - condition.setLogicalOperate("and"); - RequestParams.KeyValues keyValues = new RequestParams.KeyValues(); - keyValues.setKey("injson"); + public void getOrgKeyPerson(GetOrgKeyPersonListParams params, CustomCallBack> callback) { params.setSfhm(Constants.SFZH); params.setDept(Constants.USER_ORG_ID); params.setPageSize(Constants.PAGE_SIZE + ""); - keyValues.setValue(new Gson().toJson(params)); - List keyValuesList = new ArrayList<>(); - keyValuesList.add(keyValues); - condition.setKeyValueList(keyValuesList); - RequestParams.Parameter parameter = new RequestParams.Parameter(); - parameter.setCondition(condition); - parameter.setPage(new RequestParams.Page()); - parameter.setFields("outjson"); - parameter.setNetworkCode("3"); - parameter.setOrderBy(null); - parameter.setRegionalismCode(Constants.ORG_ID); - parameter.setDataObjId(Constants.ORG_KEY_PERSON_ID); - RequestParams requestParams = new RequestParams(); - requestParams.setMessageId(UiUtils.uuid()); - requestParams.setVersion("1.0"); - requestParams.setParameter(parameter); - if (resourceList == null) { - callBack.onError(null, new Exception("寻址数据为空")); - return; - } - - call(resourceList.getResourceAddress(), requestParams, new Callback() { + request(Constants.KEY_PERSON_ID, new Gson().toJson(params), new CustomCallBack() { @Override - public void onFailure(@NonNull Call call, @NonNull IOException e) { - activity.runOnUiThread(() -> callBack.onError(call, e)); - // 请求失败 - e.printStackTrace(); + public void onError(Call call, @NonNull Exception e) { + callback.onError(call, e); } @Override - public void onResponse(@NonNull Call call, @NonNull Response response) { - if (!response.isSuccessful()) { - activity.runOnUiThread(() -> callBack.onError(call, new IOException("Unexpected code " + response))); - return; - } - try { - // 请求成功,处理响应数据 - String responseBody = response.body().string(); - activity.runOnUiThread(() -> { - ResponseParams responseParams = new Gson().fromJson(responseBody, ResponseParams.class); - if ("200".equals(responseParams.getCode())) { - for (ResponseParams.FieldData item : responseParams.getData().getDataList()) { - for (ResponseParams.FieldValues i : item.getFieldValues()) { - List keyPersonList = new Gson().fromJson(i.getValue(), new TypeToken>() { - }.getType()); - callBack.onSuccess(keyPersonList); - } - } - } else { - callBack.onError(call, new Exception(responseParams.getMessage())); - } - }); - } catch (Exception e) { - activity.runOnUiThread(() -> callBack.onError(call, e)); - e.printStackTrace(); - } - + public void onSuccess(String value) { + List keyPersonList = new Gson().fromJson(value, new TypeToken>() { + }.getType()); + callback.onSuccess(keyPersonList); } }); } @@ -320,62 +88,20 @@ public class RequestClient { * @param str 身份证号 */ public void keyPersonDetail(String str, CustomCallBack callBack) { - ResourceList resourceList = Constants.resourceListsMap.get(Constants.KEY_PERSON_DETAIL_ID); - RequestParams.Condition condition = new RequestParams.Condition(); - condition.setLogicalOperate("and"); - RequestParams.KeyValues keyValues = new RequestParams.KeyValues(); - keyValues.setKey("injson"); GetKeyPersonDetailParams params = new GetKeyPersonDetailParams(); params.setSfzh(str);// params.setSfzh("220104197307276911"); params.setSfhm(Constants.SFZH); - keyValues.setValue(new Gson().toJson(params)); - List keyValuesList = new ArrayList<>(); - keyValuesList.add(keyValues); - condition.setKeyValueList(keyValuesList); - RequestParams.Parameter parameter = new RequestParams.Parameter(); - parameter.setCondition(condition); - parameter.setPage(new RequestParams.Page()); - parameter.setFields("outjson"); - parameter.setNetworkCode("3"); - parameter.setOrderBy(null); - parameter.setRegionalismCode(Constants.ORG_ID); - parameter.setDataObjId(Constants.KEY_PERSON_DETAIL_ID); - RequestParams requestParams = new RequestParams(); - requestParams.setMessageId(UiUtils.uuid()); - requestParams.setVersion("1.0"); - requestParams.setParameter(parameter); - call(resourceList.getResourceAddress(), requestParams, new Callback() { + request(Constants.KEY_PERSON_DETAIL_ID, new Gson().toJson(params), new CustomCallBack() { @Override - public void onFailure(@NonNull Call call, @NonNull IOException e) { - // 请求失败 - e.printStackTrace(); - activity.runOnUiThread(() -> callBack.onError(call, e)); + public void onError(Call call, @NonNull Exception e) { + callBack.onError(call, e); } @Override - public void onResponse(@NonNull Call call, @NonNull Response response) { - if (!response.isSuccessful()) { - activity.runOnUiThread(() -> callBack.onError(call, new IOException("Unexpected code " + response))); - return; - } - try { - // 请求成功,处理响应数据 - String responseBody = response.body().string(); - ResponseParams responseParams = new Gson().fromJson(responseBody, ResponseParams.class); - if (!"200".equals(responseParams.getCode())) { - activity.runOnUiThread(() -> callBack.onError(call, new Exception("服务器异常,请联系开发人员或稍后重试!"))); - return; - } - for (ResponseParams.FieldData item : responseParams.getData().getDataList()) { - for (ResponseParams.FieldValues i : item.getFieldValues()) { - KeyPersonDetail keyPersonDetail = new Gson().fromJson(i.getValue(), KeyPersonDetail.class); - activity.runOnUiThread(() -> callBack.onSuccess(keyPersonDetail)); - } - } - } catch (Exception e) { - e.printStackTrace(); - activity.runOnUiThread(() -> callBack.onError(call, e)); - } + public void onSuccess(String value) { + KeyPersonDetail keyPersonList = new Gson().fromJson(value, new TypeToken() { + }.getType()); + callBack.onSuccess(keyPersonList); } }); } @@ -387,71 +113,20 @@ public class RequestClient { * @param callBack 回调函数 */ public void getPoliceEmergency(GetPoliceEmergencyListParams params, CustomCallBack> callBack) { - ResourceList resourceList = Constants.resourceListsMap.get(Constants.POLICE_EMERGENCY_ID); - RequestParams.Condition condition = new RequestParams.Condition(); - condition.setLogicalOperate("and"); - RequestParams.KeyValues keyValues = new RequestParams.KeyValues(); - keyValues.setKey("injson"); params.setSfhm(Constants.SFZH); // params.setSfhm("220104198105200331"); params.setPageSize(Constants.PAGE_SIZE + ""); - keyValues.setValue(new Gson().toJson(params)); - List keyValuesList = new ArrayList<>(); - keyValuesList.add(keyValues); - condition.setKeyValueList(keyValuesList); - RequestParams.Parameter parameter = new RequestParams.Parameter(); - parameter.setCondition(condition); - parameter.setPage(new RequestParams.Page()); - parameter.setFields("outjson"); - parameter.setNetworkCode("3"); - parameter.setOrderBy(null); - parameter.setRegionalismCode(Constants.ORG_ID); - parameter.setDataObjId(Constants.POLICE_EMERGENCY_ID); - RequestParams requestParams = new RequestParams(); - requestParams.setMessageId(UiUtils.uuid()); - requestParams.setVersion("1.0"); - requestParams.setParameter(parameter); - if (resourceList == null) { - callBack.onError(null, new Exception("寻址数据为空")); - return; - } - - call(resourceList.getResourceAddress(), requestParams, new Callback() { + request(Constants.POLICE_EMERGENCY_ID, new Gson().toJson(params), new CustomCallBack() { @Override - public void onFailure(@NonNull Call call, @NonNull IOException e) { - activity.runOnUiThread(() -> callBack.onError(call, e)); - // 请求失败 - e.printStackTrace(); + public void onError(Call call, @NonNull Exception e) { + callBack.onError(call, e); } @Override - public void onResponse(@NonNull Call call, @NonNull Response response) { - if (!response.isSuccessful()) { - activity.runOnUiThread(() -> callBack.onError(call, new IOException("Unexpected code " + response))); - return; - } - try { - // 请求成功,处理响应数据 - String responseBody = response.body().string(); - activity.runOnUiThread(() -> { - ResponseParams responseParams = new Gson().fromJson(responseBody, ResponseParams.class); - if ("200".equals(responseParams.getCode())) { - for (ResponseParams.FieldData item : responseParams.getData().getDataList()) { - for (ResponseParams.FieldValues i : item.getFieldValues()) { - List keyPersonList = new Gson().fromJson(i.getValue(), new TypeToken>() { - }.getType()); - callBack.onSuccess(keyPersonList); - } - } - } else { - callBack.onError(call, new Exception(responseParams.getMessage())); - } - }); - } catch (Exception e) { - activity.runOnUiThread(() -> callBack.onError(call, e)); - e.printStackTrace(); - } - + public void onSuccess(String value) { + List keyPersonList = new Gson().fromJson(value, new TypeToken>() { + }.getType()); + callBack.onSuccess(keyPersonList); } }); } @@ -463,62 +138,19 @@ public class RequestClient { * @param str 身份证号 */ public void getPoliceEmergencyDetail(String str, CustomCallBack callBack) { - ResourceList resourceList = Constants.resourceListsMap.get(Constants.POLICE_EMERGENCY_DETAIL_ID); - RequestParams.Condition condition = new RequestParams.Condition(); - condition.setLogicalOperate("and"); - RequestParams.KeyValues keyValues = new RequestParams.KeyValues(); - keyValues.setKey("injson"); GetPoliceEmergencyDetailParams params = new GetPoliceEmergencyDetailParams(); params.setJcjbh(str);// params.setSfzh("220104197307276911"); params.setSfhm(Constants.SFZH); - keyValues.setValue(new Gson().toJson(params)); - List keyValuesList = new ArrayList<>(); - keyValuesList.add(keyValues); - condition.setKeyValueList(keyValuesList); - RequestParams.Parameter parameter = new RequestParams.Parameter(); - parameter.setCondition(condition); - parameter.setPage(new RequestParams.Page()); - parameter.setFields("outjson"); - parameter.setNetworkCode("3"); - parameter.setOrderBy(null); - parameter.setRegionalismCode(Constants.ORG_ID); - parameter.setDataObjId(Constants.POLICE_EMERGENCY_DETAIL_ID); - RequestParams requestParams = new RequestParams(); - requestParams.setMessageId(UiUtils.uuid()); - requestParams.setVersion("1.0"); - requestParams.setParameter(parameter); - call(resourceList.getResourceAddress(), requestParams, new Callback() { + request(Constants.POLICE_EMERGENCY_DETAIL_ID, new Gson().toJson(params), new CustomCallBack() { @Override - public void onFailure(@NonNull Call call, @NonNull IOException e) { - // 请求失败 - e.printStackTrace(); - activity.runOnUiThread(() -> callBack.onError(call, e)); + public void onError(Call call, @NonNull Exception e) { + callBack.onError(call, e); } @Override - public void onResponse(@NonNull Call call, @NonNull Response response) { - if (!response.isSuccessful()) { - activity.runOnUiThread(() -> callBack.onError(call, new IOException("Unexpected code " + response))); - return; - } - try { - // 请求成功,处理响应数据 - String responseBody = response.body().string(); - ResponseParams responseParams = new Gson().fromJson(responseBody, ResponseParams.class); - if (!"200".equals(responseParams.getCode())) { - activity.runOnUiThread(() -> callBack.onError(call, new Exception("服务器异常,请联系开发人员或稍后重试!"))); - return; - } - for (ResponseParams.FieldData item : responseParams.getData().getDataList()) { - for (ResponseParams.FieldValues i : item.getFieldValues()) { - PoliceEmergencyDetail keyPersonDetail = new Gson().fromJson(i.getValue(), PoliceEmergencyDetail.class); - activity.runOnUiThread(() -> callBack.onSuccess(keyPersonDetail)); - } - } - } catch (Exception e) { - e.printStackTrace(); - activity.runOnUiThread(() -> callBack.onError(call, e)); - } + public void onSuccess(String value) { + PoliceEmergencyDetail keyPersonDetail = new Gson().fromJson(value, PoliceEmergencyDetail.class); + callBack.onSuccess(keyPersonDetail); } }); } @@ -527,66 +159,91 @@ public class RequestClient { * 获取重点人数据统计 */ public void getKeyPersonMessageCount(CustomCallBack callBack) { - ResourceList resourceList = Constants.resourceListsMap.get(Constants.KEY_PERSON_MESSAGE_COUNT_ID); - RequestParams.Condition condition = new RequestParams.Condition(); - condition.setLogicalOperate("and"); - RequestParams.KeyValues keyValues = new RequestParams.KeyValues(); - keyValues.setKey("injson"); GetKeyPersonMessageCountParams params = new GetKeyPersonMessageCountParams(); params.setSfhm(Constants.SFZH); params.setJybh(Constants.USER_ID); params.setDept(Constants.USER_ORG_ID); // params.setSfhm("220104198105200331"); -// params.setDept(Constants.USER_ORG_ID); // params.setJybh("106222"); - keyValues.setValue(new Gson().toJson(params)); - List keyValuesList = new ArrayList<>(); - keyValuesList.add(keyValues); - condition.setKeyValueList(keyValuesList); - RequestParams.Parameter parameter = new RequestParams.Parameter(); - parameter.setCondition(condition); - parameter.setPage(new RequestParams.Page()); - parameter.setFields("outjson"); - parameter.setNetworkCode("3"); - parameter.setOrderBy(null); - parameter.setRegionalismCode(Constants.ORG_ID); - parameter.setDataObjId(Constants.KEY_PERSON_MESSAGE_COUNT_ID); - RequestParams requestParams = new RequestParams(); - requestParams.setMessageId(UiUtils.uuid()); - requestParams.setVersion("1.0"); - requestParams.setParameter(parameter); - call(resourceList.getResourceAddress(), requestParams, new Callback() { +// params.setDept(Constants.USER_ORG_ID); + request(Constants.KEY_PERSON_MESSAGE_COUNT_ID, new Gson().toJson(params), new CustomCallBack() { @Override - public void onFailure(@NonNull Call call, @NonNull IOException e) { - // 请求失败 - e.printStackTrace(); - activity.runOnUiThread(() -> callBack.onError(call, e)); + public void onError(Call call, @NonNull Exception e) { + callBack.onError(call, e); } @Override - public void onResponse(@NonNull Call call, @NonNull Response response) { - if (!response.isSuccessful()) { - activity.runOnUiThread(() -> callBack.onError(call, new IOException("Unexpected code " + response))); - return; - } - try { - // 请求成功,处理响应数据 - String responseBody = response.body().string(); - ResponseParams responseParams = new Gson().fromJson(responseBody, ResponseParams.class); - if (!"200".equals(responseParams.getCode())) { - activity.runOnUiThread(() -> callBack.onError(call, new Exception("服务器异常,请联系开发人员或稍后重试!"))); - return; - } - for (ResponseParams.FieldData item : responseParams.getData().getDataList()) { - for (ResponseParams.FieldValues i : item.getFieldValues()) { - DataCount dataCount = new Gson().fromJson(i.getValue(), DataCount.class); - activity.runOnUiThread(() -> callBack.onSuccess(dataCount)); - } - } - } catch (Exception e) { - e.printStackTrace(); - activity.runOnUiThread(() -> callBack.onError(call, e)); - } + public void onSuccess(String value) { + DataCount dataCount = new Gson().fromJson(value, DataCount.class); + callBack.onSuccess(dataCount); + } + }); + } + + /** + * 获取申请支援类型 + */ + public void getApplyType(CustomCallBack> callBack) { + HashMap params = new HashMap<>(); + params.put("type", "1"); + params.put("deptId", Constants.USER_ORG_ID); + params.put("sfhm", Constants.SFZH); + request(Constants.APPLY_TYPE_ID, new Gson().toJson(params), new CustomCallBack() { + @Override + public void onError(Call call, @NonNull Exception e) { + callBack.onError(call, e); + } + + @Override + public void onSuccess(String value) { + List applyTypes = new Gson().fromJson(value, new TypeToken>() { + }.getType()); + callBack.onSuccess(applyTypes); + } + }); + } + + /** + * 获取申请部门 + */ + public void getApplyDept(CustomCallBack> callBack) { + HashMap params = new HashMap<>(); + params.put("type", "2"); + params.put("deptId", Constants.USER_ORG_ID); + params.put("sfhm", Constants.SFZH); + request(Constants.APPLY_TYPE_ID, new Gson().toJson(params), new CustomCallBack() { + @Override + public void onError(Call call, @NonNull Exception e) { + callBack.onError(call, e); + } + + @Override + public void onSuccess(String value) { + List applyTypes = new Gson().fromJson(value, new TypeToken>() { + }.getType()); + callBack.onSuccess(applyTypes); + } + }); + } + /** + * 获取申请支援审批人 + */ + public void getApplyPerson(CustomCallBack> callBack) { + HashMap params = new HashMap<>(); + params.put("type", "3"); + params.put("deptId", Constants.USER_ORG_ID); + params.put("sfhm", Constants.SFZH); + request(Constants.APPLY_TYPE_ID, new Gson().toJson(params), new CustomCallBack() { + @Override + public void onError(Call call, @NonNull Exception e) { + callBack.onError(call, e); + } + + @Override + public void onSuccess(String value) { + List applyTypes = new Gson().fromJson(value, new TypeToken>() { + }.getType()); + callBack.onSuccess(applyTypes); } }); } diff --git a/app/src/main/java/com/police/policedatasystem/improve/fragment/ImproveFragment.java b/app/src/main/java/com/police/policedatasystem/improve/fragment/ImproveFragment.java new file mode 100644 index 0000000..e3a2f3a --- /dev/null +++ b/app/src/main/java/com/police/policedatasystem/improve/fragment/ImproveFragment.java @@ -0,0 +1,32 @@ +package com.police.policedatasystem.improve.fragment; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.PopupWindow; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.police.policedatasystem.databinding.FragmentImproveBinding; + +/** + * 改进意见 + */ +public class ImproveFragment extends Fragment { + private FragmentImproveBinding binding; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + binding = FragmentImproveBinding.inflate(inflater); + initView(); + return binding.getRoot(); + } + + private void initView() { + + } +} diff --git a/app/src/main/java/com/police/policedatasystem/improve/viewmodel/ImproveViewModel.java b/app/src/main/java/com/police/policedatasystem/improve/viewmodel/ImproveViewModel.java new file mode 100644 index 0000000..41a22b3 --- /dev/null +++ b/app/src/main/java/com/police/policedatasystem/improve/viewmodel/ImproveViewModel.java @@ -0,0 +1,67 @@ +package com.police.policedatasystem.improve.viewmodel; + +import androidx.annotation.NonNull; + +import com.google.gson.Gson; +import com.police.policedatasystem.data.activity.KeyPersonDetailActivity; +import com.police.policedatasystem.data.activity.PoliceEmergencyDetailActivity; +import com.police.policedatasystem.data.fragment.DataFragment; +import com.police.policedatasystem.data.model.DataCount; +import com.police.policedatasystem.data.model.KeyPerson; +import com.police.policedatasystem.data.model.KeyPersonDetail; +import com.police.policedatasystem.data.model.PoliceEmergency; +import com.police.policedatasystem.data.model.PoliceEmergencyDetail; +import com.police.policedatasystem.http.CustomCallBack; +import com.police.policedatasystem.http.requestparams.GetKeyPersonListParams; +import com.police.policedatasystem.http.requestparams.GetOrgKeyPersonListParams; +import com.police.policedatasystem.http.requestparams.GetPoliceEmergencyListParams; +import com.police.policedatasystem.improve.fragment.ImproveFragment; +import com.police.policedatasystem.indexActivity; +import com.police.policedatasystem.util.Constants; +import com.police.policedatasystem.util.UiUtils; + +import java.util.List; + +import okhttp3.Call; + +public class ImproveViewModel { + private final ImproveFragment fragment; + public int pageNum = 1; + public indexActivity activity; + + public ImproveViewModel(ImproveFragment fragment, indexActivity activity) { + this.fragment = fragment; + this.activity = activity; + } + + public void keyPersonInit() { +// fragment.loadingShow(); + pageNum = 1; +// fragment.personList.clear(); + //加载数据 +// GetKeyPersonListParams params = new GetKeyPersonListParams(); +// params.setPageNum(pageNum + ""); +// if (fragment.filterType == 0) { +// params.setXm(fragment.binding.etInput.getText().toString()); +// } else { +// params.setSfzh(fragment.binding.etInput.getText().toString()); +// } +// activity.requestClient.getKeyPerson(params, new CustomCallBack>() { +// @Override +// public void onError(@NonNull Call call, @NonNull Exception e) { +// UiUtils.toast(e.getMessage()); +// fragment.loadingNone(); +// } +// +// @Override +// public void onSuccess(List value) { +// fragment.loadingNone(); +// if (value != null) { +// fragment.personList.addAll(value); +// } +// fragment.adapter.notifyDataSetChanged(); +// } +// }); + } + +} diff --git a/app/src/main/java/com/police/policedatasystem/indexActivity.java b/app/src/main/java/com/police/policedatasystem/indexActivity.java index aad2ef5..63083a9 100644 --- a/app/src/main/java/com/police/policedatasystem/indexActivity.java +++ b/app/src/main/java/com/police/policedatasystem/indexActivity.java @@ -15,22 +15,24 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; +import com.police.policedatasystem.apply.fragment.ApplyFragment; +import com.police.policedatasystem.data.fragment.DataFragment; import com.police.policedatasystem.databinding.ActivityIndexBinding; -import com.police.policedatasystem.fragment.ApplyFragment; -import com.police.policedatasystem.fragment.DataFragment; -import com.police.policedatasystem.fragment.MineFragment; import com.police.policedatasystem.http.RequestClient; +import com.police.policedatasystem.improve.fragment.ImproveFragment; +import com.police.policedatasystem.main.viewmodel.IndexViewModel; +import com.police.policedatasystem.mine.fragment.MineFragment; import com.police.policedatasystem.util.Constants; -import com.police.policedatasystem.viewmodel.IndexViewModel; public class indexActivity extends AppCompatActivity { public ActivityIndexBinding binding; private IndexViewModel viewModel; public RequestClient requestClient; public boolean findAddress = false; - private final DataFragment dataFragment = new DataFragment(); - private final ApplyFragment applyFragment= new ApplyFragment(); - private final MineFragment mineFragment= new MineFragment(); + private final DataFragment dataFragment = new DataFragment(); + private final ApplyFragment applyFragment = new ApplyFragment(); + private final MineFragment mineFragment = new MineFragment(); + private final ImproveFragment improveFragment = new ImproveFragment(); @Override protected void onCreate(Bundle savedInstanceState) { @@ -51,6 +53,8 @@ public class indexActivity extends AppCompatActivity { binding.navBarGroup.navBarText2.setTextColor(getColor(R.color.normal_color)); binding.navBarGroup.navBarIcon3.setImageResource(R.mipmap.icon_mine_normal); binding.navBarGroup.navBarText3.setTextColor(getColor(R.color.normal_color)); + binding.navBarGroup.navBarIcon4.setImageResource(R.mipmap.icon_improve_normal); + binding.navBarGroup.navBarText4.setTextColor(getColor(R.color.normal_color)); }); binding.navBarGroup.navBar2.setOnClickListener(view -> { replaceFragment(applyFragment); @@ -60,6 +64,8 @@ public class indexActivity extends AppCompatActivity { binding.navBarGroup.navBarText2.setTextColor(getColor(R.color.selected_color)); binding.navBarGroup.navBarIcon3.setImageResource(R.mipmap.icon_mine_normal); binding.navBarGroup.navBarText3.setTextColor(getColor(R.color.normal_color)); + binding.navBarGroup.navBarIcon4.setImageResource(R.mipmap.icon_improve_normal); + binding.navBarGroup.navBarText4.setTextColor(getColor(R.color.normal_color)); }); binding.navBarGroup.navBar3.setOnClickListener(view -> { replaceFragment(mineFragment); @@ -69,6 +75,19 @@ public class indexActivity extends AppCompatActivity { binding.navBarGroup.navBarText2.setTextColor(getColor(R.color.normal_color)); binding.navBarGroup.navBarIcon3.setImageResource(R.mipmap.icon_mine_selected); binding.navBarGroup.navBarText3.setTextColor(getColor(R.color.selected_color)); + binding.navBarGroup.navBarIcon4.setImageResource(R.mipmap.icon_improve_normal); + binding.navBarGroup.navBarText4.setTextColor(getColor(R.color.normal_color)); + }); + binding.navBarGroup.navBar4.setOnClickListener(view -> { + replaceFragment(improveFragment); + binding.navBarGroup.navBarIcon1.setImageResource(R.mipmap.icon_data_normal); + binding.navBarGroup.navBarText1.setTextColor(getColor(R.color.normal_color)); + binding.navBarGroup.navBarIcon2.setImageResource(R.mipmap.icon_apply_normal); + binding.navBarGroup.navBarText2.setTextColor(getColor(R.color.normal_color)); + binding.navBarGroup.navBarIcon3.setImageResource(R.mipmap.icon_mine_normal); + binding.navBarGroup.navBarText3.setTextColor(getColor(R.color.normal_color)); + binding.navBarGroup.navBarIcon4.setImageResource(R.mipmap.icon_improve_selected); + binding.navBarGroup.navBarText4.setTextColor(getColor(R.color.selected_color)); }); replaceFragment(dataFragment); registerBroadcastReceiver(); diff --git a/app/src/main/java/com/police/policedatasystem/App.java b/app/src/main/java/com/police/policedatasystem/main/App.java similarity index 91% rename from app/src/main/java/com/police/policedatasystem/App.java rename to app/src/main/java/com/police/policedatasystem/main/App.java index 183aa22..15a2423 100644 --- a/app/src/main/java/com/police/policedatasystem/App.java +++ b/app/src/main/java/com/police/policedatasystem/main/App.java @@ -1,4 +1,4 @@ -package com.police.policedatasystem; +package com.police.policedatasystem.main; import android.app.Application; import android.os.Handler; diff --git a/app/src/main/java/com/police/policedatasystem/model/ResourceList.java b/app/src/main/java/com/police/policedatasystem/main/model/ResourceList.java similarity index 95% rename from app/src/main/java/com/police/policedatasystem/model/ResourceList.java rename to app/src/main/java/com/police/policedatasystem/main/model/ResourceList.java index cc694e0..6a011c3 100644 --- a/app/src/main/java/com/police/policedatasystem/model/ResourceList.java +++ b/app/src/main/java/com/police/policedatasystem/main/model/ResourceList.java @@ -1,4 +1,4 @@ -package com.police.policedatasystem.model; +package com.police.policedatasystem.main.model; import java.io.Serializable; diff --git a/app/src/main/java/com/police/policedatasystem/model/UserCredential.java b/app/src/main/java/com/police/policedatasystem/main/model/UserCredential.java similarity index 98% rename from app/src/main/java/com/police/policedatasystem/model/UserCredential.java rename to app/src/main/java/com/police/policedatasystem/main/model/UserCredential.java index 339d54c..4f57e26 100644 --- a/app/src/main/java/com/police/policedatasystem/model/UserCredential.java +++ b/app/src/main/java/com/police/policedatasystem/main/model/UserCredential.java @@ -1,4 +1,4 @@ -package com.police.policedatasystem.model; +package com.police.policedatasystem.main.model; import java.io.Serializable; diff --git a/app/src/main/java/com/police/policedatasystem/viewmodel/IndexViewModel.java b/app/src/main/java/com/police/policedatasystem/main/viewmodel/IndexViewModel.java similarity index 82% rename from app/src/main/java/com/police/policedatasystem/viewmodel/IndexViewModel.java rename to app/src/main/java/com/police/policedatasystem/main/viewmodel/IndexViewModel.java index ea4c2c2..1e285ff 100644 --- a/app/src/main/java/com/police/policedatasystem/viewmodel/IndexViewModel.java +++ b/app/src/main/java/com/police/policedatasystem/main/viewmodel/IndexViewModel.java @@ -1,4 +1,4 @@ -package com.police.policedatasystem.viewmodel; +package com.police.policedatasystem.main.viewmodel; import com.police.policedatasystem.indexActivity; diff --git a/app/src/main/java/com/police/policedatasystem/main/RotatedTextView.java b/app/src/main/java/com/police/policedatasystem/main/widget/RotatedTextView.java similarity index 96% rename from app/src/main/java/com/police/policedatasystem/main/RotatedTextView.java rename to app/src/main/java/com/police/policedatasystem/main/widget/RotatedTextView.java index 5b2a4cd..1a061b4 100644 --- a/app/src/main/java/com/police/policedatasystem/main/RotatedTextView.java +++ b/app/src/main/java/com/police/policedatasystem/main/widget/RotatedTextView.java @@ -1,4 +1,4 @@ -package com.police.policedatasystem.main; +package com.police.policedatasystem.main.widget; import android.content.Context; import android.graphics.Canvas; diff --git a/app/src/main/java/com/police/policedatasystem/widget/WaterMarkBg.java b/app/src/main/java/com/police/policedatasystem/main/widget/WaterMarkBg.java similarity index 98% rename from app/src/main/java/com/police/policedatasystem/widget/WaterMarkBg.java rename to app/src/main/java/com/police/policedatasystem/main/widget/WaterMarkBg.java index 91c24f5..2755706 100644 --- a/app/src/main/java/com/police/policedatasystem/widget/WaterMarkBg.java +++ b/app/src/main/java/com/police/policedatasystem/main/widget/WaterMarkBg.java @@ -1,4 +1,4 @@ -package com.police.policedatasystem.widget; +package com.police.policedatasystem.main.widget; import android.content.Context; import android.graphics.Canvas; diff --git a/app/src/main/java/com/police/policedatasystem/widget/WaterMarkInfo.java b/app/src/main/java/com/police/policedatasystem/main/widget/WaterMarkInfo.java similarity index 98% rename from app/src/main/java/com/police/policedatasystem/widget/WaterMarkInfo.java rename to app/src/main/java/com/police/policedatasystem/main/widget/WaterMarkInfo.java index bbc9e73..be68c40 100644 --- a/app/src/main/java/com/police/policedatasystem/widget/WaterMarkInfo.java +++ b/app/src/main/java/com/police/policedatasystem/main/widget/WaterMarkInfo.java @@ -1,4 +1,4 @@ -package com.police.policedatasystem.widget; +package com.police.policedatasystem.main.widget; import android.graphics.Color; import android.graphics.Paint; diff --git a/app/src/main/java/com/police/policedatasystem/widget/WaterMarkManager.java b/app/src/main/java/com/police/policedatasystem/main/widget/WaterMarkManager.java similarity index 98% rename from app/src/main/java/com/police/policedatasystem/widget/WaterMarkManager.java rename to app/src/main/java/com/police/policedatasystem/main/widget/WaterMarkManager.java index c3089c7..dd06f93 100644 --- a/app/src/main/java/com/police/policedatasystem/widget/WaterMarkManager.java +++ b/app/src/main/java/com/police/policedatasystem/main/widget/WaterMarkManager.java @@ -1,4 +1,4 @@ -package com.police.policedatasystem.widget; +package com.police.policedatasystem.main.widget; import android.annotation.SuppressLint; import android.app.Activity; diff --git a/app/src/main/java/com/police/policedatasystem/widget/WaterMarkView.java b/app/src/main/java/com/police/policedatasystem/main/widget/WaterMarkView.java similarity index 99% rename from app/src/main/java/com/police/policedatasystem/widget/WaterMarkView.java rename to app/src/main/java/com/police/policedatasystem/main/widget/WaterMarkView.java index 53e453c..341aea9 100644 --- a/app/src/main/java/com/police/policedatasystem/widget/WaterMarkView.java +++ b/app/src/main/java/com/police/policedatasystem/main/widget/WaterMarkView.java @@ -1,4 +1,4 @@ -package com.police.policedatasystem.widget; +package com.police.policedatasystem.main.widget; import android.annotation.SuppressLint; import android.content.Context; diff --git a/app/src/main/java/com/police/policedatasystem/fragment/MineFragment.java b/app/src/main/java/com/police/policedatasystem/mine/fragment/MineFragment.java similarity index 98% rename from app/src/main/java/com/police/policedatasystem/fragment/MineFragment.java rename to app/src/main/java/com/police/policedatasystem/mine/fragment/MineFragment.java index 92eff44..780f4df 100644 --- a/app/src/main/java/com/police/policedatasystem/fragment/MineFragment.java +++ b/app/src/main/java/com/police/policedatasystem/mine/fragment/MineFragment.java @@ -1,4 +1,4 @@ -package com.police.policedatasystem.fragment; +package com.police.policedatasystem.mine.fragment; import android.content.Context; import android.os.Bundle; diff --git a/app/src/main/java/com/police/policedatasystem/util/Constants.java b/app/src/main/java/com/police/policedatasystem/util/Constants.java index a0be397..7815740 100644 --- a/app/src/main/java/com/police/policedatasystem/util/Constants.java +++ b/app/src/main/java/com/police/policedatasystem/util/Constants.java @@ -1,6 +1,6 @@ package com.police.policedatasystem.util; -import com.police.policedatasystem.model.ResourceList; +import com.police.policedatasystem.main.model.ResourceList; import java.util.HashMap; diff --git a/app/src/main/java/com/police/policedatasystem/util/UiUtils.java b/app/src/main/java/com/police/policedatasystem/util/UiUtils.java index 10bf688..beaa034 100644 --- a/app/src/main/java/com/police/policedatasystem/util/UiUtils.java +++ b/app/src/main/java/com/police/policedatasystem/util/UiUtils.java @@ -3,7 +3,7 @@ package com.police.policedatasystem.util; import android.util.Base64; import android.widget.Toast; -import com.police.policedatasystem.App; +import com.police.policedatasystem.main.App; import java.util.UUID; diff --git a/app/src/main/res/layout/activity_index.xml b/app/src/main/res/layout/activity_index.xml index 17c7fcd..d9d1d48 100644 --- a/app/src/main/res/layout/activity_index.xml +++ b/app/src/main/res/layout/activity_index.xml @@ -9,14 +9,14 @@ + android:layout_height="match_parent" + android:layout_marginBottom="50dp" /> - - - + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_selector.xml b/app/src/main/res/layout/dialog_selector.xml new file mode 100644 index 0000000..db13c75 --- /dev/null +++ b/app/src/main/res/layout/dialog_selector.xml @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/app/src/main/res/layout/dropdown_layout4.xml b/app/src/main/res/layout/dropdown_layout4.xml index e49fb43..a9fdb37 100644 --- a/app/src/main/res/layout/dropdown_layout4.xml +++ b/app/src/main/res/layout/dropdown_layout4.xml @@ -4,73 +4,74 @@ android:background="@drawable/all_7_line_ccc_bg" android:paddingHorizontal="15dp" android:paddingVertical="2dp" + android:id="@+id/ll_apply_type_group" android:orientation="vertical"> - + + + + + + + + + + - + + + + + + + + + + - + + + + + + + + + + - + + + + + + + + + + - + + + + + + + + + + - - + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_apply.xml b/app/src/main/res/layout/fragment_apply.xml index 22c1c83..f8651f8 100644 --- a/app/src/main/res/layout/fragment_apply.xml +++ b/app/src/main/res/layout/fragment_apply.xml @@ -72,9 +72,9 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" - android:text="处置警情" android:textColor="@color/black" - android:textSize="16sp" /> + android:textSize="16sp" + tools:text="处置警情" /> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_dialog_selector.xml b/app/src/main/res/layout/item_dialog_selector.xml new file mode 100644 index 0000000..333cafa --- /dev/null +++ b/app/src/main/res/layout/item_dialog_selector.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/layout/view_water_mark.xml b/app/src/main/res/layout/view_water_mark.xml index 0cc4b6b..b09bbfd 100644 --- a/app/src/main/res/layout/view_water_mark.xml +++ b/app/src/main/res/layout/view_water_mark.xml @@ -1,4 +1,4 @@ - \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/icon_improve_normal.png b/app/src/main/res/mipmap-xxhdpi/icon_improve_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..5b33ddafff6224302a027d24443a48c2a22796dc GIT binary patch literal 2208 zcmai$`#;nD8^_#=1bXskOIV}|nIebm!6p2Di zSRsYFosx3i9YsznU*@>m_b>SVa9yv*NBldt1&VUFw*eKO6sG||_&C~HdtN&`mzNSTWFg+(=GYXS9u2=vQ%^U|Q=b+Z z5V@jRYVKyG{Y0-b4M9bs)XA9*qbIp=fr|B_PTw?+A-vWk=)Iz};oR(x-d7NBUa<4$ zdawb(j$-`ob@=zoO6|PHUu=Afk#A|C8z_=*kYLm!G;IDL@?jP!HY9`sEw<>)l&DJZ~%F*Vt(OM4S>G%SP>W&Y+Rav!T= zp>Z`ghtFvEX72^RAEDf3${v!Z z^S}IA-S~Wt(>(*x4udcnrTak1k2i-~rbz6m46%XG-WRAqEh(S)6f@49^wTs43_sXU@N&NLN*Dz-t zr?K_uFvrH|dgD%T>`e%yk@IU|ed`XY=H{6#cSN!lFdPTy`^oG=`)eEURhRpBSA9de zY)o1ga#N<5a51PWCaY;7f373l@Ojv?HZMs>!QUvA8M#B&@rpfu05C$`dGh_L7aAT$ zY6~S+Y=*cLOEK23?rqh1(9VQEHs6m^O=Uj5PS?e-uK zwxwj(zie9y-)K#~2wignYJh`MdAC}r8eg>=pC>0tkc%7+omZFCNv#_~vOu>V zHjD>XWqFSK2YXwBHgZ>CRL5J1Xw`(%Vb{o4@G&rKrTWXsbn{$IDj~`v2}TvdWb${i zV@H(iL;;LC%x#b3eA(0n${=+&1%g70YjI>Hks_4Un&aM2Git}k!h{_lu(R2@5_3bg zfA4T`;B1EZ9Be@A`Z!G_ZOFN*#-fHl11ZSiq0@jm>~MW0qd#Lox4@5DV{6S#M@|#q zO*O2e5I=WRV`Wt^HX(JZ*wkb(POM;XMc51pqI7CSc{z6>AGzjW5SM~GOZb+3Ip~F$ zD^D=dtq63t8V!Raz|2-X?a^jXI3*S90ZRCH?_*5>Le^?+h8U%ct>pK3$z>j4-9U0A zt=7!0eR3itAD~Ya(N2;D8L=Uj)Z_)Z=5G(NGAdfP9{>j#t2Q!RB=#wrN^32?y`Z(W zopR%;1+XV~$&{Zy`ZlW2$;6|>H+~0U_TXPq-lDs3V38{U?=yqMZjl9T?1`VgScGl{G ze12omFK*#5>U&vNcCd|vlkMg8?c=M^7Cq3KRkKYz3ay9wCAy?jY z?hq>Zc|_(d+&IdiWf-kX>&D|!e24js$KSw*4fbQ)&{v%63AFfY2p0rGQzK>3% zR*@negOKh_;vaP)zq(&@yQ~sE(Gs-q`-*YHb6*PRr0@7Ad?JKp_<0>jg{+;qDMD1K z4Fe)nt5xDmE(L^UB71te6#s=5hvsT|`-#srWh|tK!Tz!dD~DKr_Z7a5H>qXyFSSBc z9issR8i!Siz>ezBa|aK(<+lvJ%<{(^V+61EW_gvXE@L>~Uv=51@wr66(4!k>xg&il zth;G^E?C?pm}+?~iSR+;)j-3E%+8Fi7}hT~k|a)kD7KkCwfsXyN(xT!nLL<^#2Xdc zP*05<(e@_0DFc&@p*7lHBFaw}dmn8+TT9{r<`(7Iiz?N7qrda+s6*qw1dU!#+Gs3U zUfX2|Ju$E*kp2&+;zx57o3VQgH38YI3F>=PF|+LX59mL`SCl5tusw`xk__L$FRfFw z4tg?;57!O2hf3pxK$icoZ?3mqLR9#o+(y|+vJSYGN%0ryu8q7j=SImAeq16S=u*x{ zgFZp=3vY&!ZE1(B-Ut`sNE>DBpPH`5+~)a#Kz=bd!5j2(B!-Yw@2y>BTXPo%YYw-e zT8uUr%%a4A<2%MbrhfH6_a$wGqUoW@;_6SlO#uU*dDHAFjS@#bildb1((j^8QyGxd)h92B0_A9s?eLNzQ;qO`S@sfa86 z>e2cvV49i$V*%zKA+rkSjG3|>?}<~9CT^hPv*w8p(p3GxedbcaEZ+++m`>3DLvLV< z?N^yki{R;#9Wt*11~+9Zb)>_)1})F^b(qc6?N-cDi0qqNYLhes(d#mbJxz*d3_dE6 zpxHZR-IWsq1`9m>oZzZVH4>w@!{ij1f1`dS&NMgWyKjTY%~>ms-eB{ouroI-3-$=^ zM!GA^`x&|F1(>_Cp=z?Jm{Wdb9^fp?S1-aTXrLqYkyb5kf zdVcS(1W-j2i?&aC9asi Z#gi`5J>5Cyj%>diz|qddw!(%$`xjbA2!H?p literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/icon_improve_selected.png b/app/src/main/res/mipmap-xxhdpi/icon_improve_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..38a7374d97826e55373d2d7a090b6c60470b95e1 GIT binary patch literal 2238 zcmV;v2toIWP)Px-cu7P-RCr$Pon3O+=nDL$fgIV zj?tOe<_=}cm2FuBKtduV_|YSg5dJ@c;D;y!`pd=xe|`S*`(Vxj^- z@m5FIx>mnlPana+6{E^xI$2+1qk#gz@UZkP7njQ?rudaTC;-euz0Z?V4u2f^~6&TnLMI;>}TDE~_YfV8-nxt$J5FZ6WD*$COVy9oh!oAdk z_g$_9^Uya0g5rB2I12!A2-3HXVf9;>zyG{lgcZWOn>@j zvlDae$}9nxeg1J}HrCxd#$RXQUrPLg?qD;;L9mN@B>)V=h5<^4q5tBaXu0B4UORyoytd>g`BOuC+h=5@%Ix=3P1n=q2gCnheALV z-z9(h)j-53K$E}*NMeb900DL(=Z`(rn?R&I;$T030zeM|vBeLBfbsw*U59o76!$Tg z&M6B!*o7RT*^POF`%?iRc#_ld-B63V;Zy*Evztm303-lii7(I{wC*TU01yClEq+W0 zeBF-%-~pg7@sA*2?bP;(uQ`B#_|!!kL;wQL>LNyb1)#3b^(?6 z)DyV|BL3(BV6DRsNc>R)khA!l1*UUT9;3_wRQx|Uj1B-5|1cJe4gm80xkUQ>m|?$; zz^DLF@lP{>(EyOE_!6s&ql*B!ieKNpjafG4Tr>CxKo)=Z#tg@q=k8(6GzzRPj&3Sg z#rI=8*a)EF`^6vZOrVO76Mv8ZWGlYFd;$8tgs;c2U$;MN091T_%dhUt7627LT>PxN01UZx7p0Qz$6j3w#Q@{S1RsdkcD3>q6K42Zu1_7qN<9c!uKf4?N6N=pzOsOwgHbF23 z@v{TKyL4I0@IxRNi}*PL(7G?-xFvHSfC;>qjeWv)A?~`|!hZePvdIB3t+MG0=2QqM z!sjl2RuKR*{5$sra|}FG;fEl8UI6%}e?2pNu_4Gg?C049_{RT;Pp`#-U?}2e69F*7 zHTC~ZVI5OeYj=PEjnkd_W5)?NNW21*51Hc3fEU zIRK{r7xP)b<`FTQA{U%K0KVa0WQXjF8-e)AcLAvIF9Ef-4KV zODIyky%&>o7a-jKm!i)mtM9*GzZAVI(USpb18})~iZ+x3*tYTsykI|?+><7qRy$+> z3b0UEW1hzr)+q#~4!}JacqBZKwsL~Al1~B=Cu@#2c_Zq4_VT17fV28&0cSVir+xWo z0EqRVT28YEl8*o?oU8{F09pSgU%CR2yhO4FDgd(nO}=ymAbE*o4O9SR{hNI03PAD_ z$r`8t$oe<=(iMQ@C6YBz0g&}?@}(;P$x9?_paLN4-{ecj0`SZCD%Fr)m`q-^NCsjz z-5S(c_#@g$8_EB@7lYh%Ti^h2d+sJ?uKVqJ*A-;|`ovWO3kLvpYnDQQa(}-U?ZkIm z?fh>@TbPrNU2`XM!vaI0`u~H#>b&t?a}DXTSg4 z2tX|{bm#KiDG1pj<(<511)zHDqtm%ulBkJddQ5C5<#umPW6wtTA8Qvb?6y`q=l}o! M07*qoM6N<$f~Q#wpa1{> literal 0 HcmV?d00001