From 67516c02caa4191d74403a1ad253f8ae6af3d108 Mon Sep 17 00:00:00 2001 From: lianlilong <409813353@qq.com> Date: Thu, 11 Apr 2024 23:21:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E4=BA=8C=E6=9C=9F=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 5 +- app/src/main/AndroidManifest.xml | 28 +- .../apply/activity/SuccessActivity.java | 30 + .../apply/fragment/ApplyFragment.java | 366 ++++++++++-- .../apply/model/ApplyDept.java | 9 + .../apply/model/DetailQueryResult.java | 15 + .../apply/viewmodel/ApplyViewModel.java | 58 +- .../PoliceEmergencyDetailActivity.java | 193 ++++++- .../data/fragment/DataFragment.java | 15 +- .../data/model/PoliceEmergencyDetail.java | 1 - .../http/BaseRequestClient.java | 64 +-- .../policedatasystem/http/RequestClient.java | 232 +++++++- .../policedatasystem/indexActivity.java | 98 ++-- .../com/police/policedatasystem/main/App.java | 6 + .../mine/activity/ApplyDetailActivity.java | 70 +++ .../mine/adapter/MineApplyListAdapter.java | 28 + .../mine/fragment/MineFragment.java | 180 +++++- .../policedatasystem/mine/model/Apply.java | 61 ++ .../mine/model/ApplyDetail.java | 71 +++ .../mine/viewmodel/DetailViewModel.java | 53 ++ .../mine/viewmodel/MineViewModel.java | 94 +++ .../policedatasystem/util/Constants.java | 20 +- .../police/policedatasystem/util/UiUtils.java | 2 +- app/src/main/res/drawable/all_15_fff_bg.xml | 6 + app/src/main/res/drawable/all_7_4b8e01_bg.xml | 6 + .../main/res/drawable/all_7_999_border_bg.xml | 8 + .../drawable/all_7_999_bottom_border_bg.xml | 14 + app/src/main/res/drawable/all_7_de7900_bg.xml | 6 + .../main/res/drawable/all_7_line_ccc_bg.xml | 7 +- .../res/drawable/all_7_main_border_bg.xml | 8 + .../main/res/layout/activity_apply_detail.xml | 213 +++++++ .../activity_police_emergency_detail.xml | 539 +----------------- app/src/main/res/layout/activity_success.xml | 91 +++ .../res/layout/bottom_navigation_view.xml | 42 +- .../main/res/layout/dialog_dept_selector.xml | 40 ++ app/src/main/res/layout/dialog_selector.xml | 5 +- app/src/main/res/layout/dropdown_layout5.xml | 2 +- app/src/main/res/layout/fragment_apply.xml | 7 + app/src/main/res/layout/fragment_data.xml | 5 + app/src/main/res/layout/fragment_mine.xml | 12 + ...ude_police_emergency_detail_apply_info.xml | 108 ++++ ...lude_police_emergency_detail_base_info.xml | 273 +++++++++ ...lude_police_emergency_detail_cjya_info.xml | 63 ++ ...de_police_emergency_detail_person_info.xml | 268 +++++++++ ...ude_police_emergency_detail_query_info.xml | 154 +++++ .../main/res/layout/item_apply_fragment_1.xml | 17 +- .../main/res/layout/item_dialog_selector.xml | 6 +- app/src/main/res/layout/item_mine_apply.xml | 143 +++++ app/src/main/res/layout/item_select_dept.xml | 42 ++ .../mipmap-xxhdpi/icon_apply_detail_query.png | Bin 0 -> 4491 bytes .../res/mipmap-xxhdpi/icon_apply_success.png | Bin 0 -> 4783 bytes app/src/main/res/mipmap-xxhdpi/icon_cjya.png | Bin 0 -> 6331 bytes app/src/main/res/mipmap-xxhdpi/icon_czya.png | Bin 0 -> 5042 bytes .../res/mipmap-xxhdpi/icon_down_sanjiao.png | Bin 0 -> 5880 bytes .../res/mipmap-xxhdpi/icon_right_sanjiao.png | Bin 0 -> 3225 bytes .../main/res/mipmap-xxhdpi/icon_selected.png | Bin 0 -> 3732 bytes .../res/mipmap-xxhdpi/icon_unselected.png | Bin 0 -> 3157 bytes app/src/main/res/values/colors.xml | 5 + app/src/main/res/values/themes.xml | 4 + 59 files changed, 3074 insertions(+), 719 deletions(-) create mode 100644 app/src/main/java/com/police/policedatasystem/apply/activity/SuccessActivity.java create mode 100644 app/src/main/java/com/police/policedatasystem/apply/model/DetailQueryResult.java create mode 100644 app/src/main/java/com/police/policedatasystem/mine/activity/ApplyDetailActivity.java create mode 100644 app/src/main/java/com/police/policedatasystem/mine/adapter/MineApplyListAdapter.java create mode 100644 app/src/main/java/com/police/policedatasystem/mine/model/Apply.java create mode 100644 app/src/main/java/com/police/policedatasystem/mine/model/ApplyDetail.java create mode 100644 app/src/main/java/com/police/policedatasystem/mine/viewmodel/DetailViewModel.java create mode 100644 app/src/main/java/com/police/policedatasystem/mine/viewmodel/MineViewModel.java create mode 100644 app/src/main/res/drawable/all_15_fff_bg.xml create mode 100644 app/src/main/res/drawable/all_7_4b8e01_bg.xml create mode 100644 app/src/main/res/drawable/all_7_999_border_bg.xml create mode 100644 app/src/main/res/drawable/all_7_999_bottom_border_bg.xml create mode 100644 app/src/main/res/drawable/all_7_de7900_bg.xml create mode 100644 app/src/main/res/drawable/all_7_main_border_bg.xml create mode 100644 app/src/main/res/layout/activity_apply_detail.xml create mode 100644 app/src/main/res/layout/activity_success.xml create mode 100644 app/src/main/res/layout/dialog_dept_selector.xml create mode 100644 app/src/main/res/layout/include_police_emergency_detail_apply_info.xml create mode 100644 app/src/main/res/layout/include_police_emergency_detail_base_info.xml create mode 100644 app/src/main/res/layout/include_police_emergency_detail_cjya_info.xml create mode 100644 app/src/main/res/layout/include_police_emergency_detail_person_info.xml create mode 100644 app/src/main/res/layout/include_police_emergency_detail_query_info.xml create mode 100644 app/src/main/res/layout/item_mine_apply.xml create mode 100644 app/src/main/res/layout/item_select_dept.xml create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_apply_detail_query.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_apply_success.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_cjya.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_czya.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_down_sanjiao.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_right_sanjiao.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_selected.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_unselected.png diff --git a/app/build.gradle b/app/build.gradle index 3a70d2d..8ba7264 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,8 +13,8 @@ android { applicationId "com.police.policedatasystem" minSdk 24 targetSdk 33 - versionCode 10019 - versionName "1.0.19" + versionCode 10026 + versionName "1.0.26" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { @@ -72,4 +72,5 @@ dependencies { implementation 'com.squareup.okhttp3:okhttp:4.8.1' // OkHttp库 implementation 'com.github.bumptech.glide:glide:4.16.0' implementation 'com.google.android.material:material:1.8.0' + implementation 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ac81e78..7546b9c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,10 +3,21 @@ xmlns:tools="http://schemas.android.com/tools" android:versionCode="1"> + + + + + @@ -26,7 +37,14 @@ android:roundIcon="@mipmap/jinghui" android:supportsRtl="true" android:theme="@style/Theme.PoliceDataSystem" + tools:ignore="MissingTvBanner" tools:targetApi="31"> + + + @@ -53,8 +72,13 @@ android:theme="@style/Theme.PoliceDataSystem"> - - + + + + diff --git a/app/src/main/java/com/police/policedatasystem/apply/activity/SuccessActivity.java b/app/src/main/java/com/police/policedatasystem/apply/activity/SuccessActivity.java new file mode 100644 index 0000000..4f3eaa2 --- /dev/null +++ b/app/src/main/java/com/police/policedatasystem/apply/activity/SuccessActivity.java @@ -0,0 +1,30 @@ +package com.police.policedatasystem.apply.activity; + +import android.os.Bundle; + +import androidx.appcompat.app.AppCompatActivity; + +import com.police.policedatasystem.databinding.ActivitySuccessBinding; +import com.police.policedatasystem.main.App; + +public class SuccessActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ActivitySuccessBinding binding = ActivitySuccessBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + binding.ivBack.setOnClickListener(view -> { + App.mainIndex = 1; + finish(); + }); + binding.tvApplyBtn.setOnClickListener(view -> { + App.mainIndex = 1; + finish(); + }); + binding.tvMineBtn.setOnClickListener(view -> { + App.mainIndex = 2; + finish(); + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/policedatasystem/apply/fragment/ApplyFragment.java b/app/src/main/java/com/police/policedatasystem/apply/fragment/ApplyFragment.java index 96d4c26..93db8fa 100644 --- a/app/src/main/java/com/police/policedatasystem/apply/fragment/ApplyFragment.java +++ b/app/src/main/java/com/police/policedatasystem/apply/fragment/ApplyFragment.java @@ -1,5 +1,6 @@ package com.police.policedatasystem.apply.fragment; +import android.content.Intent; import android.os.Bundle; import android.view.Gravity; import android.view.LayoutInflater; @@ -8,6 +9,7 @@ import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.TextView; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -19,24 +21,33 @@ import androidx.recyclerview.widget.RecyclerView; import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.viewholder.BaseViewHolder; import com.police.policedatasystem.R; +import com.police.policedatasystem.apply.activity.SuccessActivity; 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.apply.viewmodel.ApplyViewModel; +import com.police.policedatasystem.databinding.DialogDeptSelectorBinding; import com.police.policedatasystem.databinding.DialogSelectorBinding; import com.police.policedatasystem.databinding.DropdownLayout4Binding; import com.police.policedatasystem.databinding.FragmentApplyBinding; import com.police.policedatasystem.indexActivity; +import com.police.policedatasystem.main.App; import com.police.policedatasystem.util.UiUtils; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; public class ApplyFragment extends Fragment { private FragmentApplyBinding binding; private ApplyViewModel viewModel; + public List applyTypes; public List applyDept; public List applyPeople; + public List applyXXLY; + public List applyJWLX; + private String dictValue; @Nullable @Override @@ -48,17 +59,44 @@ public class ApplyFragment extends Fragment { private void initView() { viewModel = new ApplyViewModel(this, (indexActivity) this.getActivity()); + binding.includeApply.tvCommitBtn.setOnClickListener(view -> addApply()); + binding.rlLoading.setOnClickListener(view -> { + }); + binding.vLock.setOnClickListener(view -> { + }); + viewModel.getApplyType(); + viewModel.getApplyDept(); + viewModel.getApplyXXLY(); + viewModel.getApplyJWLX(); + binding.includeApply.tvQueryOrg.setOnClickListener(view -> showDept(applyDept)); + } + + @Override + public void onResume() { + super.onResume(); + if (App.isLock) { + binding.includeApply.etSearchTitle.setText(App.jqbh); + binding.vLock.setVisibility(View.VISIBLE); + } else { + binding.vLock.setVisibility(View.INVISIBLE); + } } @Override public void onStart() { super.onStart(); - viewModel.getApplyType(); - viewModel.getApplyDept(); - viewModel.getApplyPerson(); } + /** + * 设置申请事由下拉框 + * + * @param applyTypes 申请事由集合 + */ public void setPopupWindow(List applyTypes) { + if (applyTypes.isEmpty()) { + Toast.makeText(this.getContext(), "用户未在大数据实战赋能系统登记,无法进行赋能", Toast.LENGTH_SHORT).show(); + return; + } // 初始化 PopupWindow PopupWindow popupWindow = new PopupWindow(getContext()); // 加载自定义布局 @@ -70,7 +108,9 @@ public class ApplyFragment extends Fragment { popupWindow.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT); // 设置 PopupWindow 显示的位置(相对于按钮) popupWindow.showAtLocation(binding.typeGroup, Gravity.NO_GRAVITY, 0, 0); + this.applyTypes = applyTypes; binding.tvApplySearchTitle.setText(applyTypes.get(0).getDictLabel()); + this.dictValue = applyTypes.get(0).getDictValue(); for (ApplyType item : applyTypes) { TextView textView = new TextView(getContext()); textView.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); @@ -83,6 +123,7 @@ public class ApplyFragment extends Fragment { textView.setOnClickListener(view -> { // 处理菜单项 1 的点击事件 binding.tvApplySearchTitle.setText(item.getDictLabel()); + changeView(item.getDictValue()); popupWindow.dismiss(); // 关闭 PopupWindow }); } @@ -95,22 +136,299 @@ public class ApplyFragment extends Fragment { popupWindow.setWidth(binding.typeGroup.getWidth()); popupWindow.showAsDropDown(binding.typeGroup); }); - binding.includeApply.tvQueryName.setOnClickListener(view -> { - setPopupWindow2(applyDept); - }); - binding.includeApply.tvQueryOrg.setOnClickListener(view -> { - setPopupWindow3(applyPeople); + binding.includeApply.tvQueryOrg.setOnClickListener(view -> showDeptDialog((TextView) view, "选择部门", applyDept)); + binding.includeApply.tvQueryName.setOnClickListener(view -> showPerson(applyPeople)); + binding.includeApply.tvSearchTitle.setOnClickListener(view -> { + if ("2".equals(dictValue)) { + showXXLY(applyXXLY); + } + if ("3".equals(dictValue)) { + showJWLX(applyJWLX); + } }); } - public void setPopupWindow2(List applyDept) { - List names = applyDept.stream().map(ApplyDept::getName).collect(Collectors.toList()); - showDialog(names); + /** + * 根据申请事由,改变输入选项title + * + * @param dictValue 申请事由类型 + */ + private void changeView(String dictValue) { + this.dictValue = dictValue; + binding.includeApply.etSearchTitle.setText(""); + binding.includeApply.tvSearchTitle.setText(""); + switch (dictValue) { + case "0": + binding.includeApply.etSearchTitle.setVisibility(View.VISIBLE); + binding.includeApply.tvSearchTitle.setVisibility(View.INVISIBLE); + binding.includeApply.tvMyKeyPerson.setText("警情编号:"); + break; + case "1": + case "6": + binding.includeApply.etSearchTitle.setVisibility(View.VISIBLE); + binding.includeApply.tvSearchTitle.setVisibility(View.INVISIBLE); + binding.includeApply.tvMyKeyPerson.setText("身份证号码:"); + break; + case "2": + binding.includeApply.etSearchTitle.setVisibility(View.INVISIBLE); + binding.includeApply.tvSearchTitle.setVisibility(View.VISIBLE); + binding.includeApply.tvMyKeyPerson.setText("线索来源:"); + break; + case "3": + binding.includeApply.etSearchTitle.setVisibility(View.INVISIBLE); + binding.includeApply.tvSearchTitle.setVisibility(View.VISIBLE); + binding.includeApply.tvMyKeyPerson.setText("警务类型:"); + break; + case "5": + binding.includeApply.etSearchTitle.setVisibility(View.VISIBLE); + binding.includeApply.tvSearchTitle.setVisibility(View.INVISIBLE); + binding.includeApply.tvMyKeyPerson.setText("事由详情:"); + break; + case "7": + binding.includeApply.etSearchTitle.setVisibility(View.VISIBLE); + binding.includeApply.tvSearchTitle.setVisibility(View.INVISIBLE); + binding.includeApply.tvMyKeyPerson.setText("案件编号:"); + break; + default: + } } - public void setPopupWindow3(List applyPeople) { + public void showDept(List applyDept) { + if (applyDept == null || applyDept.isEmpty()) return; + showDeptDialog(binding.includeApply.tvQueryOrg, "选择归属部门", applyDept); + } + + public void showPerson(List applyPeople) { + if (applyPeople == null || applyPeople.isEmpty()) { + return; + } List names = applyPeople.stream().map(ApplyPerson::getUserName).collect(Collectors.toList()); - showDialog(names); + showDialog(binding.includeApply.tvQueryName, "选择审批人", names); + } + + public void showXXLY(List applyPeople) { + if (applyPeople == null || applyPeople.isEmpty()) return; + List names = applyPeople.stream().map(ApplyType::getDictLabel).collect(Collectors.toList()); + showDialog(binding.includeApply.tvSearchTitle, "选择消息来源", names); + } + + public void showJWLX(List applyPeople) { + if (applyPeople == null || applyPeople.isEmpty()) return; + List names = applyPeople.stream().map(ApplyType::getDictLabel).collect(Collectors.toList()); + showDialog(binding.includeApply.tvSearchTitle, "选择警务类型", names); + } + + /** + * 提交 + */ + private void addApply() { + if (applyTypes == null) { + Toast.makeText(this.getContext(), "用户未在大数据实战赋能系统登记,无法进行赋能", Toast.LENGTH_SHORT).show(); + return; + } + HashMap params = new HashMap<>(); + for (ApplyType item : applyTypes) { + if (item.getDictLabel().equals(binding.tvApplySearchTitle.getText().toString())) { + dictValue = item.getDictValue(); + break; + } + } + if (dictValue == null) { + return; + } + switch (dictValue) { + case "0": + case "1": + case "5": + case "7": + params.put("jqbh", binding.includeApply.etSearchTitle.getText().toString()); + break; + case "2": + params.put("xsly", binding.includeApply.tvSearchTitle.getText().toString()); + break; + case "3": + params.put("jwlx", binding.includeApply.tvSearchTitle.getText().toString()); + break; + case "6": + params.put("syBz", binding.includeApply.etSearchTitle.getText().toString()); + break; + default: + return; + } + params.put("sy", dictValue); + params.put("sqnr", binding.includeApply.etQueryBody.getText().toString()); + params.put("shrName", binding.includeApply.tvQueryName.getText().toString()); + for (ApplyPerson item : applyPeople) { + if (item.getUserName().equals(binding.includeApply.tvQueryName.getText().toString())) { + params.put("shrSfhm", item.getLoginName()); + break; + } + } + viewModel.addApply(params); + } + + /** + * 发送成功,跳转到成功页面 + */ + public void sendSuccess() { + if (getActivity() == null) return; + getActivity().startActivity(new Intent(getActivity(), SuccessActivity.class)); + } + + public void showDialog(TextView textView, String title, List items) { + if (getContext() == null) return; + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + DialogSelectorBinding selectorBinding = DialogSelectorBinding.inflate(getLayoutInflater()); + View dialogView = selectorBinding.getRoot(); + selectorBinding.tvDialogTitle.setText(title); + RecyclerView recyclerView = selectorBinding.rcv; + recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); + 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); + builder.setView(dialogView); + AlertDialog dialog = builder.create(); + adapter.setOnItemClickListener((adapter1, view, position) -> { + textView.setText(items.get(position)); + dialog.dismiss(); + }); + dialog.show(); + } + + public void showDeptDialog(TextView textView, String title, List items) { + if (getContext() == null) return; + AlertDialog.Builder builder = new AlertDialog.Builder(getContext(), R.style.TransparentAlertDialog); + DialogDeptSelectorBinding selectorBinding = DialogDeptSelectorBinding.inflate(getLayoutInflater()); + View dialogView = selectorBinding.getRoot(); + selectorBinding.tvDialogTitle.setText(title); + RecyclerView recyclerView = selectorBinding.rcv; + recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); + List data = new ArrayList<>(); + for (ApplyDept item : items) { + if ("0".equals(item.getpId())) { + data.add(item); + break; + } + } + BaseQuickAdapter adapter = new BaseQuickAdapter(R.layout.item_select_dept, data) { + @Override + protected void convert(@NonNull BaseViewHolder baseViewHolder, ApplyDept s) { + baseViewHolder.setText(R.id.tv_title, s.getName()); + boolean hasChild = false; + for (ApplyDept item : items) { + if (s.getId().equals(item.getpId())) { + hasChild = true; + break; + } + } + baseViewHolder.setVisible(R.id.iv_sanjiao, hasChild); + if (s.isOpen()) { + baseViewHolder.setImageResource(R.id.iv_sanjiao, R.mipmap.icon_down_sanjiao); + baseViewHolder.setImageResource(R.id.iv_box, R.mipmap.icon_selected); + baseViewHolder.setTextColor(R.id.tv_title, getResources().getColor(R.color.main_color)); + baseViewHolder.setBackgroundColor(R.id.tv_title, getResources().getColor(R.color.selected_bg_color)); + } else { + baseViewHolder.setImageResource(R.id.iv_sanjiao, R.mipmap.icon_right_sanjiao); + baseViewHolder.setImageResource(R.id.iv_box, R.mipmap.icon_unselected); + baseViewHolder.setTextColor(R.id.tv_title, getResources().getColor(R.color.color_666)); + baseViewHolder.setBackgroundColor(R.id.tv_title, getResources().getColor(R.color.white)); + } + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < s.getLevel(); i++) { + sb.append(" "); + } + baseViewHolder.setText(R.id.v_level, sb); + } + }; + recyclerView.setAdapter(adapter); + builder.setView(dialogView); + AlertDialog dialog = builder.create(); + adapter.setOnItemClickListener((adapter1, view, position) -> { + ApplyDept dept = data.get(position); + boolean open = dept.isOpen(); + int addCount = 1; + for (ApplyDept item : items) { + if (item.getpId().equals(dept.getId())) { + if (open) { + removeItem(data, item); + } else { + item.setLevel(dept.getLevel() + 1); + data.add(position + addCount, item); + addCount += 1; + } + } + } + if (open) { + cancelSelected(dept); + } else { + enterSelected(data, dept); + } + adapter.setList(data); + selectorBinding.tvEnter.setOnClickListener(view1 -> { + long selectId = -1; + ApplyDept selectDept = null; + for (ApplyDept item : applyDept) { + if (item.isOpen()) { + item.setOpen(false); + if (selectId < Long.parseLong(item.getId())) { + selectId = Long.parseLong(item.getId()); + selectDept = item; + } + } + } + if (selectId >= 0) { + textView.setText(selectDept.getTitle()); + viewModel.getApplyPerson(selectId + ""); + dialog.dismiss(); + } else { + Toast.makeText(getContext(), "请选择一个归属部门", Toast.LENGTH_SHORT).show(); + } + + }); + }); + dialog.show(); + } + + private void removeItem(List data, ApplyDept dept) { + data.remove(dept); + for (int i = 0; i < data.size(); i++) { + if (data.get(i).getpId().equals(dept.getId())) { + removeItem(data, data.get(i)); + } + } + } + + /** + * 取消勾选 + */ + private void cancelSelected(ApplyDept dept) { + dept.setOpen(false); + for (ApplyDept item : applyDept) { + if (item.getpId().equals(dept.getId())) { + cancelSelected(item); + } + } + } + + /** + * 选择勾选 + */ + private void enterSelected(List data, ApplyDept dept) { + for (ApplyDept item : applyDept) { + if (item.getpId().equals(dept.getpId()) && !item.equals(dept)) { + cancelSelected(item); + for (ApplyDept i : applyDept) { + if (i.getpId().equals(item.getId())) { + removeItem(data, i); + } + } + } + } + dept.setOpen(true); } public void loadingShow() { @@ -124,26 +442,4 @@ public class ApplyFragment extends Fragment { getActivity().runOnUiThread(() -> binding.rlLoading.setVisibility(View.GONE)); } } - - public void showDialog(List items) { - 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())); - 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 index f1a1e01..c19dab5 100644 --- a/app/src/main/java/com/police/policedatasystem/apply/model/ApplyDept.java +++ b/app/src/main/java/com/police/policedatasystem/apply/model/ApplyDept.java @@ -11,6 +11,7 @@ public class ApplyDept implements Serializable { private String name; private String pId; private String title; + private int level = 0; private boolean open; private boolean nocheck; @@ -34,6 +35,14 @@ public class ApplyDept implements Serializable { return name; } + public int getLevel() { + return level; + } + + public void setLevel(int level) { + this.level = level; + } + public void setName(String name) { this.name = name; } diff --git a/app/src/main/java/com/police/policedatasystem/apply/model/DetailQueryResult.java b/app/src/main/java/com/police/policedatasystem/apply/model/DetailQueryResult.java new file mode 100644 index 0000000..0b85cba --- /dev/null +++ b/app/src/main/java/com/police/policedatasystem/apply/model/DetailQueryResult.java @@ -0,0 +1,15 @@ +package com.police.policedatasystem.apply.model; + +import java.io.Serializable; + +public class DetailQueryResult implements Serializable { + private String GOBACK; + + public String getGOBACK() { + return GOBACK; + } + + public void setGOBACK(String GOBACK) { + this.GOBACK = GOBACK; + } +} 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 index 84e74ba..0a55dcb 100644 --- a/app/src/main/java/com/police/policedatasystem/apply/viewmodel/ApplyViewModel.java +++ b/app/src/main/java/com/police/policedatasystem/apply/viewmodel/ApplyViewModel.java @@ -11,6 +11,7 @@ import com.police.policedatasystem.indexActivity; import com.police.policedatasystem.util.UiUtils; import java.util.Comparator; +import java.util.HashMap; import java.util.List; import okhttp3.Call; @@ -53,16 +54,15 @@ public class ApplyViewModel { @Override public void onSuccess(List value) { -// value.sort(Comparator.comparing(ApplyDept::getDictSort)); fragment.applyDept = value; fragment.loadingNone(); } }); } - public void getApplyPerson() { + public void getApplyPerson(String deptId) { fragment.loadingShow(); - activity.requestClient.getApplyPerson(new CustomCallBack>() { + activity.requestClient.getApplyPerson(deptId,new CustomCallBack>() { @Override public void onError(@NonNull Call call, @NonNull Exception e) { UiUtils.toast(e.getMessage()); @@ -71,10 +71,60 @@ public class ApplyViewModel { @Override public void onSuccess(List value) { -// value.sort(Comparator.comparing(ApplyDept::getDictSort)); fragment.applyPeople = value; fragment.loadingNone(); } }); } + + public void getApplyJWLX() { + fragment.loadingShow(); + activity.requestClient.getApplyJWLX(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.applyJWLX = value; + fragment.loadingNone(); + } + }); + } + + public void getApplyXXLY() { + fragment.loadingShow(); + activity.requestClient.getApplyXXLY(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.applyXXLY = value; + fragment.loadingNone(); + } + }); + } + + public void addApply(HashMap map) { + fragment.loadingShow(); + activity.requestClient.addApply(map, new CustomCallBack() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + UiUtils.toast(e.getMessage()); + fragment.loadingNone(); + } + + @Override + public void onSuccess(Object value) { + fragment.sendSuccess(); + fragment.loadingNone(); + } + }); + } } 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 e2085b4..e625f5e 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 @@ -1,19 +1,37 @@ package com.police.policedatasystem.data.activity; +import android.Manifest; import android.app.Activity; import android.content.Context; import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; import android.os.Bundle; import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; import com.bumptech.glide.Glide; import com.google.gson.Gson; -import com.police.policedatasystem.main.App; -import com.police.policedatasystem.databinding.ActivityPoliceEmergencyDetailBinding; +import com.police.policedatasystem.R; +import com.police.policedatasystem.apply.model.ApplyType; +import com.police.policedatasystem.apply.model.DetailQueryResult; import com.police.policedatasystem.data.model.PoliceEmergencyDetail; +import com.police.policedatasystem.databinding.ActivityPoliceEmergencyDetailBinding; +import com.police.policedatasystem.http.CustomCallBack; +import com.police.policedatasystem.http.RequestClient; +import com.police.policedatasystem.main.App; +import com.police.policedatasystem.mine.activity.ApplyDetailActivity; import com.police.policedatasystem.util.Constants; import com.police.policedatasystem.util.UiUtils; +import java.util.List; + +import okhttp3.Call; + /** * 警情详情页面 */ @@ -31,28 +49,157 @@ public class PoliceEmergencyDetailActivity extends Activity { binding.ivBack.setOnClickListener(view -> finish()); PoliceEmergencyDetail detail = new Gson().fromJson(getIntent().getStringExtra("param"), PoliceEmergencyDetail.class); if (UiUtils.isNotEmpty(detail.getZp())) { - Glide.with(App.getApp()).asBitmap().load(detail.getZp()).into(binding.ivZp); + Glide.with(App.getApp()).asBitmap().load(detail.getZp()).into(binding.includePersonInfo.ivZp); } - setText(binding.tvJcjbh, detail.getJcjbh());//报警编号 - setText(binding.tvBjjyqk, detail.getBjjyqk());//报警内容 - setText(binding.tvBjrlxdh, detail.getBjrlxdh());//报警电话 - setText(binding.tvJjsj, UiUtils.formatTime(detail.getJjsj()));//报警时间 - setText(binding.tvAsjfsdddzmc, detail.getAsjfsdddzmc());//报警位置 - setText(binding.tvCjdwgajgjgdm, detail.getCjdwgajgjgdm());//出警单位 - setText(binding.tvCjrxm, detail.getCjrxm());//出警民警 - setText(binding.tvBq, detail.getBq());//标签 - setText(binding.tvJg, detail.getJg());//籍贯 - setText(binding.tvXm, detail.getXm());//姓名 - setText(binding.tvXb, detail.getXb());//性别 - setText(binding.tvMz, detail.getMz());//民族 - setText(binding.tvHyzk, detail.getHyzk());//婚姻状况 - setText(binding.tvSfzh, detail.getBjrzjhm());//身份证号 - setText(binding.tvNl, detail.getNl());//年龄 - setText(binding.tvFwcs, detail.getFwcs());//服务场所 - setText(binding.tvLsbjcs, detail.getLsbjcs());//历史报警次数 - setText(binding.tvJqlb, detail.getJqlb());//警情类别 - setText(binding.tvCllb, detail.getCllx());//处理类型 - setText(binding.tvCljg, detail.getCljg());//处理结果 + setText(binding.includeBaseInfo.tvJcjbh, detail.getJcjbh());//报警编号 + setText(binding.includeBaseInfo.tvBjjyqk, detail.getBjjyqk());//报警内容 + setText(binding.includeBaseInfo.tvBjrlxdh, detail.getBjrlxdh());//报警电话 + setText(binding.includeBaseInfo.tvJjsj, UiUtils.formatTime(detail.getJjsj()));//报警时间 + setText(binding.includeBaseInfo.tvAsjfsdddzmc, detail.getAsjfsdddzmc());//报警位置 + setText(binding.includeBaseInfo.tvCjdwgajgjgdm, detail.getCjdwgajgjgdm());//出警单位 + setText(binding.includeBaseInfo.tvCjrxm, detail.getCjrxm());//出警民警 + setText(binding.includeBaseInfo.tvJqlb, detail.getJqlb());//警情类别 + setText(binding.includeBaseInfo.tvCllb, detail.getCllx());//处理类型 + setText(binding.includeBaseInfo.tvCljg, detail.getCljg());//处理结果 + + setText(binding.includePersonInfo.tvBq, detail.getBq());//标签 + setText(binding.includePersonInfo.tvJg, detail.getJg());//籍贯 + setText(binding.includePersonInfo.tvXm, detail.getXm());//姓名 + setText(binding.includePersonInfo.tvXb, detail.getXb());//性别 + setText(binding.includePersonInfo.tvMz, detail.getMz());//民族 + setText(binding.includePersonInfo.tvHyzk, detail.getHyzk());//婚姻状况 + setText(binding.includePersonInfo.tvSfzh, detail.getBjrzjhm());//身份证号 + setText(binding.includePersonInfo.tvNl, detail.getNl());//年龄 + setText(binding.includePersonInfo.tvFwcs, detail.getFwcs());//服务场所 + setText(binding.includePersonInfo.tvLsbjcs, detail.getLsbjcs());//历史报警次数 + + setText(binding.includeCjyaInfo.tvContent, detail.getLsbjcs());//todo 处警预案 + + binding.includeQueryInfo.tvQueryType1.setOnClickListener(view -> { + queryType = 1; + changeView(); + }); + binding.includeQueryInfo.tvQueryType2.setOnClickListener(view -> { + queryType = 2; + changeView(); + }); + binding.includeQueryInfo.tvQueryType3.setOnClickListener(view -> { + queryType = 3; + changeView(); + }); + binding.includeQueryInfo.tvQueryBtn.setOnClickListener(view -> { + sendQuery(); + }); + binding.includeApplyInfo.tvQueryResult.setOnClickListener(view -> { + //跳转到赋能详情 + jumpApplyDetail(detail.getJcjbh()); + }); + binding.includeApplyInfo.tvGoApply.setOnClickListener(view -> { + jumpApplyFragment(detail.getJcjbh()); + }); + binding.includeApplyInfo.tvMakeCall.setOnClickListener(view -> { + //拨打电话660110 + makeCall(); + }); + } + + private void jumpApplyFragment(String jqbh) { + RequestClient.instance().getApplyType(new CustomCallBack>() { + @Override + public void onError(Call call, @NonNull Exception e) { + + } + + @Override + public void onSuccess(List value) { + if (value.isEmpty()) { + Toast.makeText(PoliceEmergencyDetailActivity.this, "用户未在大数据实战赋能系统登记,无法填写工单", Toast.LENGTH_SHORT).show(); + } else { + App.mainIndex = 1; + App.isLock = true; + App.jqbh = jqbh; + finish(); + } + } + }); + + } + + private void jumpApplyDetail(String jqbh) { + RequestClient.instance().getApplyType(new CustomCallBack>() { + @Override + public void onError(Call call, @NonNull Exception e) { + + } + + @Override + public void onSuccess(List value) { + if (value.isEmpty()) { + Toast.makeText(PoliceEmergencyDetailActivity.this, "用户未在大数据实战赋能系统登记,无法查看结果", Toast.LENGTH_SHORT).show(); + } else { + Intent intent = new Intent(PoliceEmergencyDetailActivity.this, ApplyDetailActivity.class); + intent.putExtra("jqbh", jqbh); + startActivity(intent); + } + } + }); + } + + private void makeCall() { + if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) + != PackageManager.PERMISSION_GRANTED) { + // 权限尚未被授予 + ActivityCompat.requestPermissions(this, + new String[]{Manifest.permission.CALL_PHONE}, + 500); + } else { + // 权限已经被授予,可以拨打电话 + Intent intent = new Intent(Intent.ACTION_CALL); + intent.setData(Uri.parse("tel:660110")); + if (intent.resolveActivity(getPackageManager()) != null) { + startActivity(intent); + } + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { + if (requestCode == 500) { + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + // 权限被授予,可以拨打电话 + makeCall(); + } + } + } + + private void sendQuery() { + String str = binding.includeQueryInfo.etInput.getText().toString(); + if (str.isEmpty()) { + Toast.makeText(this, "请输入查询内容", Toast.LENGTH_SHORT).show(); + return; + } + RequestClient.instance().policeEmergencyDetailQuery(queryType, str, new CustomCallBack() { + @Override + public void onError(Call call, @NonNull Exception e) { + Toast.makeText(PoliceEmergencyDetailActivity.this, "查询失败", Toast.LENGTH_SHORT).show(); + } + + @Override + public void onSuccess(DetailQueryResult value) { + binding.includeQueryInfo.tvQueryResult.setText(value.getGOBACK()); + } + }); + } + + private int queryType = 1; + + private void changeView() { + binding.includeQueryInfo.tvQueryType1.setTextColor(queryType == 1 ? getColor(R.color.white) : getColor(R.color.color_999)); + binding.includeQueryInfo.tvQueryType2.setTextColor(queryType == 2 ? getColor(R.color.white) : getColor(R.color.color_999)); + binding.includeQueryInfo.tvQueryType3.setTextColor(queryType == 3 ? getColor(R.color.white) : getColor(R.color.color_999)); + binding.includeQueryInfo.tvQueryType1.setBackgroundResource(queryType == 1 ? R.drawable.all_7_main_bg : R.drawable.all_7_999_border_bg); + binding.includeQueryInfo.tvQueryType2.setBackgroundResource(queryType == 2 ? R.drawable.all_7_main_bg : R.drawable.all_7_999_border_bg); + binding.includeQueryInfo.tvQueryType3.setBackgroundResource(queryType == 3 ? R.drawable.all_7_main_bg : R.drawable.all_7_999_border_bg); } public static void startAction(Context context, String num) { diff --git a/app/src/main/java/com/police/policedatasystem/data/fragment/DataFragment.java b/app/src/main/java/com/police/policedatasystem/data/fragment/DataFragment.java index 4a33ca6..ae0d995 100644 --- a/app/src/main/java/com/police/policedatasystem/data/fragment/DataFragment.java +++ b/app/src/main/java/com/police/policedatasystem/data/fragment/DataFragment.java @@ -21,11 +21,12 @@ import com.chad.library.adapter.base.BaseQuickAdapter; import com.police.policedatasystem.R; 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.data.model.KeyPerson; import com.police.policedatasystem.data.model.PoliceEmergency; import com.police.policedatasystem.data.viewmodel.DataViewModel; +import com.police.policedatasystem.databinding.FragmentDataBinding; +import com.police.policedatasystem.indexActivity; +import com.police.policedatasystem.main.App; import com.scwang.smart.refresh.footer.ClassicsFooter; import com.scwang.smart.refresh.header.ClassicsHeader; @@ -51,6 +52,9 @@ public class DataFragment extends Fragment { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { binding = FragmentDataBinding.inflate(inflater); initView(); + currentTabBar = 1; + currentTab = 1; + filterType = 0; Activity activity = getActivity(); if (activity instanceof indexActivity) { act = (indexActivity) activity; @@ -71,6 +75,7 @@ public class DataFragment extends Fragment { } public void initData() { + if (viewModel == null) return; viewModel.keyPersonInit(); viewModel.getKeyPersonMessageCount(); } @@ -79,7 +84,7 @@ public class DataFragment extends Fragment { public void onResume() { super.onResume(); if (!act.findAddress) { - act.requestClient.init(); + act.requestClient.init(this::initData); } else { initData(); } @@ -279,12 +284,12 @@ public class DataFragment extends Fragment { } public void loadingShow() { - getActivity().runOnUiThread(() -> binding.rlLoading.setVisibility(View.VISIBLE)); + App.getHandler().post(() -> binding.rlLoading.setVisibility(View.VISIBLE)); } public void loadingNone() { - getActivity().runOnUiThread(() -> binding.rlLoading.setVisibility(View.GONE)); + App.getHandler().post(() -> binding.rlLoading.setVisibility(View.GONE)); } private void setPopupWindow() { diff --git a/app/src/main/java/com/police/policedatasystem/data/model/PoliceEmergencyDetail.java b/app/src/main/java/com/police/policedatasystem/data/model/PoliceEmergencyDetail.java index 5d4fccf..0249fe7 100644 --- a/app/src/main/java/com/police/policedatasystem/data/model/PoliceEmergencyDetail.java +++ b/app/src/main/java/com/police/policedatasystem/data/model/PoliceEmergencyDetail.java @@ -1,7 +1,6 @@ package com.police.policedatasystem.data.model; import java.io.Serializable; -import java.util.List; /** * 警情详情 diff --git a/app/src/main/java/com/police/policedatasystem/http/BaseRequestClient.java b/app/src/main/java/com/police/policedatasystem/http/BaseRequestClient.java index 5da8ea7..3249e32 100644 --- a/app/src/main/java/com/police/policedatasystem/http/BaseRequestClient.java +++ b/app/src/main/java/com/police/policedatasystem/http/BaseRequestClient.java @@ -14,7 +14,6 @@ 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; @@ -37,11 +36,11 @@ import okhttp3.Response; import okhttp3.logging.HttpLoggingInterceptor; public class BaseRequestClient { - public final indexActivity activity; private OkHttpClient okHttpClient; + private FindAddressCallback callback; - public BaseRequestClient(indexActivity activity) { - this.activity = activity; + public interface FindAddressCallback { + void success(); } /* @@ -63,7 +62,8 @@ public class BaseRequestClient { } - public void init() { + public void init(FindAddressCallback callback) { + this.callback = callback; HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); // 设置日志级别,例如打印请求和响应的body okHttpClient = new OkHttpClient.Builder() @@ -100,9 +100,9 @@ public class BaseRequestClient { 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(); + Constants.setUserId(new Gson().fromJson(Constants.USER_CREDENTIAL, UserCredential.class).getCredential().getLoad().getUserInfo().getJh()); + Constants.setSFZH(new Gson().fromJson(Constants.USER_CREDENTIAL, UserCredential.class).getCredential().getLoad().getUserInfo().getSfzh()); + Constants.setORG_ID(new Gson().fromJson(Constants.USER_CREDENTIAL, UserCredential.class).getCredential().getLoad().getUserInfo().getOrgId()); //根据票据寻址 findAddress(); } else { @@ -144,7 +144,9 @@ public class BaseRequestClient { Constants.resourceListsMap.put(item.getResourceId(), item); } //2.发起请求,获取重点人数据 - activity.initData(); + if (callback != null) { + callback.success(); + } } else { if (UiUtils.isEmpty(resourceList)) { UiUtils.toast("寻址失败,错误码:" + resultCode); @@ -173,67 +175,39 @@ public class BaseRequestClient { @Override public void onFailure(@NonNull Call call, @NonNull IOException e) { // 请求失败 - activity.runOnUiThread(() -> callBack.onError(call, e)); + App.getHandler().post(() -> 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))); + App.getHandler().post(() -> callBack.onError(call, new IOException("Unexpected code " + response))); return; } try { // 请求成功,处理响应数据 if (response.body() == null) { - activity.runOnUiThread(() -> callBack.onError(call, new Exception("服务器返回数据异常"))); + App.getHandler().post(() -> 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" + -// "}"; -// } - if (urlKey.equals(Constants.APPLY_TYPE_ID)){ - responseBody="[{\"checked\":false,\"id\":\"220000000000\",\"name\":\"吉林省公安厅\",\"nocheck\":false,\"open\":false,\"pId\":\"0\",\"title\":\"吉林省公安厅\"},{\"checked\":false,\"id\":\"220100000000\",\"name\":\"吉林省长春市公安局\",\"nocheck\":false,\"open\":false,\"pId\":\"220000000000\",\"title\":\"吉林省长春市公安局\"},{\"checked\":false,\"id\":\"220197000000\",\"name\":\"吉林省长春市公安局经济技术开发区分局\",\"nocheck\":false,\"open\":false,\"pId\":\"220100000000\",\"title\":\"吉林省长春市公安局经济技术开发区分局\"},{\"checked\":false,\"id\":\"220197170000\",\"name\":\"吉林省长春市公安局经济技术开发区分局花园路派出所\",\"nocheck\":false,\"open\":false,\"pId\":\"220197000000\",\"title\":\"吉林省长春市公安局经济技术开发区分局花园路派出所\"}]"; - } ResponseParams responseParams = new Gson().fromJson(responseBody, ResponseParams.class); if (!"200".equals(responseParams.getCode())) { - activity.runOnUiThread(() -> callBack.onError(call, new Exception("服务器出错,请联系开发人员或稍后重试!"))); + App.getHandler().post(() -> callBack.onError(call, new Exception("服务器出错,请联系开发人员或稍后重试!"))); return; } if (responseParams.getData().getDataList() == null || responseParams.getData().getDataList().isEmpty()) { - activity.runOnUiThread(() -> callBack.onError(call, new Exception("服务器返回数据异常"))); + App.getHandler().post(() -> 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("服务器返回数据异常"))); + App.getHandler().post(() -> callBack.onError(call, new Exception("服务器返回数据异常"))); return; } - activity.runOnUiThread(() -> callBack.onSuccess(fieldData.getFieldValues().get(0).getValue())); + App.getHandler().post(() -> callBack.onSuccess(fieldData.getFieldValues().get(0).getValue())); } catch (Exception e) { - activity.runOnUiThread(() -> callBack.onError(call, e)); + App.getHandler().post(() -> callBack.onError(call, e)); } } }); 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 ca343c8..23c53f1 100644 --- a/app/src/main/java/com/police/policedatasystem/http/RequestClient.java +++ b/app/src/main/java/com/police/policedatasystem/http/RequestClient.java @@ -7,6 +7,7 @@ import com.google.gson.reflect.TypeToken; 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.apply.model.DetailQueryResult; import com.police.policedatasystem.data.model.DataCount; import com.police.policedatasystem.data.model.KeyPerson; import com.police.policedatasystem.data.model.KeyPersonDetail; @@ -18,7 +19,8 @@ import com.police.policedatasystem.http.requestparams.GetKeyPersonMessageCountPa 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.indexActivity; +import com.police.policedatasystem.mine.model.Apply; +import com.police.policedatasystem.mine.model.ApplyDetail; import com.police.policedatasystem.util.Constants; import java.util.HashMap; @@ -28,8 +30,15 @@ import okhttp3.Call; public class RequestClient extends BaseRequestClient { - public RequestClient(indexActivity activity) { - super(activity); + private RequestClient() { + } + + private static final class RequestClientHolder { + static final RequestClient requestClient = new RequestClient(); + } + + public static RequestClient instance() { + return RequestClientHolder.requestClient; } /** @@ -66,7 +75,7 @@ public class RequestClient extends BaseRequestClient { params.setSfhm(Constants.SFZH); params.setDept(Constants.USER_ORG_ID); params.setPageSize(Constants.PAGE_SIZE + ""); - request(Constants.KEY_PERSON_ID, new Gson().toJson(params), new CustomCallBack() { + request(Constants.ORG_KEY_PERSON_ID, new Gson().toJson(params), new CustomCallBack() { @Override public void onError(Call call, @NonNull Exception e) { callback.onError(call, e); @@ -114,7 +123,6 @@ public class RequestClient extends BaseRequestClient { */ public void getPoliceEmergency(GetPoliceEmergencyListParams params, CustomCallBack> callBack) { params.setSfhm(Constants.SFZH); -// params.setSfhm("220104198105200331"); params.setPageSize(Constants.PAGE_SIZE + ""); request(Constants.POLICE_EMERGENCY_ID, new Gson().toJson(params), new CustomCallBack() { @Override @@ -163,9 +171,9 @@ public class RequestClient extends BaseRequestClient { params.setSfhm(Constants.SFZH); params.setJybh(Constants.USER_ID); params.setDept(Constants.USER_ORG_ID); -// params.setSfhm("220104198105200331"); +// params.setSfhm("220183197210264653"); // params.setJybh("106222"); -// params.setDept(Constants.USER_ORG_ID); +// params.setDept("220183210000"); request(Constants.KEY_PERSON_MESSAGE_COUNT_ID, new Gson().toJson(params), new CustomCallBack() { @Override public void onError(Call call, @NonNull Exception e) { @@ -225,13 +233,14 @@ public class RequestClient extends BaseRequestClient { } }); } + /** * 获取申请支援审批人 */ - public void getApplyPerson(CustomCallBack> callBack) { + public void getApplyPerson(String deptId, CustomCallBack> callBack) { HashMap params = new HashMap<>(); params.put("type", "3"); - params.put("deptId", Constants.USER_ORG_ID); + params.put("deptId", deptId); params.put("sfhm", Constants.SFZH); request(Constants.APPLY_TYPE_ID, new Gson().toJson(params), new CustomCallBack() { @Override @@ -247,4 +256,209 @@ public class RequestClient extends BaseRequestClient { } }); } + + /** + * 获取申请支援-消息来源 + */ + public void getApplyXXLY(CustomCallBack> callBack) { + HashMap params = new HashMap<>(); + params.put("type", "4"); + 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 getApplyJWLX(CustomCallBack> callBack) { + HashMap params = new HashMap<>(); + params.put("type", "5"); + 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 getMineBLZT(CustomCallBack> callBack) { + HashMap params = new HashMap<>(); + params.put("type", "6"); + 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 getMineXXLY(CustomCallBack> callBack) { + HashMap params = new HashMap<>(); + params.put("type", "7"); + 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 addApply(HashMap params, CustomCallBack callBack) { + params.put("sfhm", Constants.SFZH); + request(Constants.APPLY_COMMIT_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) { + callBack.onSuccess(null); + } + }); + } + + /** + * 我的赋能-查询我申请的赋能{ + * "sfhm": "220104199208240015", + * "sqsj": "", + * "sy": "", + * "ly": "", + * "spzt": "", + * "fnbh": "" + * } + */ + public void getApplyList(HashMap params, CustomCallBack> callBack) { + params.put("sfhm", "220183197210264653"); + request(Constants.MINE_LIST_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 getApplyDetail(String fnbh, CustomCallBack callBack) { + HashMap params = new HashMap<>(); + params.put("sfhm", Constants.SFZH); + params.put("fnbh", fnbh); + params.put("deptId", Constants.USER_ORG_ID); + request(Constants.MINE_DETAIL_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) { + ApplyDetail applyDetail = new Gson().fromJson(value, ApplyDetail.class); + callBack.onSuccess(applyDetail); + } + }); + } + + /** + * 警情详情跳转到我的赋能详情 + */ + public void jumpApplyDetail(String jqbh, CustomCallBack callBack) { + HashMap params = new HashMap<>(); + params.put("sfhm", Constants.SFZH); + params.put("sfzh", Constants.SFZH); + params.put("jqbh", jqbh); + params.put("deptId", Constants.USER_ORG_ID); + request(Constants.MINE_DETAIL_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) { + ApplyDetail applyDetail = new Gson().fromJson(value, ApplyDetail.class); + callBack.onSuccess(applyDetail); + } + }); + } + + /** + * 我的赋能详情 + */ + public void policeEmergencyDetailQuery(int type, String content, CustomCallBack callBack) { + HashMap params = new HashMap<>(); + params.put("sfhm", Constants.SFZH); + params.put("type", type + ""); + params.put("condi", content); + request(Constants.SELF_QUERY_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) { + DetailQueryResult applyDetail = new Gson().fromJson(value, DetailQueryResult.class); + callBack.onSuccess(applyDetail); + } + }); + } } diff --git a/app/src/main/java/com/police/policedatasystem/indexActivity.java b/app/src/main/java/com/police/policedatasystem/indexActivity.java index 63083a9..2dbed77 100644 --- a/app/src/main/java/com/police/policedatasystem/indexActivity.java +++ b/app/src/main/java/com/police/policedatasystem/indexActivity.java @@ -18,8 +18,9 @@ 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.http.BaseRequestClient; import com.police.policedatasystem.http.RequestClient; -import com.police.policedatasystem.improve.fragment.ImproveFragment; +import com.police.policedatasystem.main.App; import com.police.policedatasystem.main.viewmodel.IndexViewModel; import com.police.policedatasystem.mine.fragment.MineFragment; import com.police.policedatasystem.util.Constants; @@ -32,7 +33,7 @@ public class indexActivity extends AppCompatActivity { private final DataFragment dataFragment = new DataFragment(); private final ApplyFragment applyFragment = new ApplyFragment(); private final MineFragment mineFragment = new MineFragment(); - private final ImproveFragment improveFragment = new ImproveFragment(); +// private final ImproveFragment improveFragment = new ImproveFragment(); @Override protected void onCreate(Bundle savedInstanceState) { @@ -41,56 +42,71 @@ public class indexActivity extends AppCompatActivity { setContentView(binding.getRoot()); initView(); viewModel = new IndexViewModel(this); - requestClient = new RequestClient(this); + requestClient = RequestClient.instance(); + requestClient.init(() -> { + initData(); + }); } private void initView() { binding.navBarGroup.navBar1.setOnClickListener(view -> { + App.mainIndex = 0; + App.isLock=false; + changeFootBar(); + }); + binding.navBarGroup.navBar2.setOnClickListener(view -> { + App.mainIndex = 1; + changeFootBar(); + }); + binding.navBarGroup.navBar3.setOnClickListener(view -> { + App.mainIndex = 2; + App.isLock=false; + changeFootBar(); + }); +// binding.navBarGroup.navBar4.setOnClickListener(view -> { +// changeFootBar(3); +// }); + registerBroadcastReceiver(); + } + + private void changeFootBar() { + 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_normal); +// binding.navBarGroup.navBarText4.setTextColor(getColor(R.color.normal_color)); + if (App.mainIndex == 0) { replaceFragment(dataFragment); binding.navBarGroup.navBarIcon1.setImageResource(R.mipmap.icon_data_selected); binding.navBarGroup.navBarText1.setTextColor(getColor(R.color.selected_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_normal); - binding.navBarGroup.navBarText4.setTextColor(getColor(R.color.normal_color)); - }); - binding.navBarGroup.navBar2.setOnClickListener(view -> { + return; + } + if (App.mainIndex == 1) { replaceFragment(applyFragment); - 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_selected); 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 -> { + return; + } + if (App.mainIndex == 2) { replaceFragment(mineFragment); - 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_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(); + return; + } + if (App.mainIndex == 3) { + //replaceFragment(improveFragment); +// binding.navBarGroup.navBarIcon4.setImageResource(R.mipmap.icon_improve_selected); +// binding.navBarGroup.navBarText4.setTextColor(getColor(R.color.selected_color)); + } + } + + @Override + protected void onResume() { + super.onResume(); + changeFootBar(); } public void initData() { @@ -134,7 +150,9 @@ public class indexActivity extends AppCompatActivity { if (action.contains(ACTION_SUFFIX_UA_LOGIN)) { //再次获取票据 if (requestClient != null) { - requestClient.init(); + requestClient.init(() -> { + initData(); + }); } return; } diff --git a/app/src/main/java/com/police/policedatasystem/main/App.java b/app/src/main/java/com/police/policedatasystem/main/App.java index 15a2423..293bcc3 100644 --- a/app/src/main/java/com/police/policedatasystem/main/App.java +++ b/app/src/main/java/com/police/policedatasystem/main/App.java @@ -6,6 +6,12 @@ import android.os.Handler; public class App extends Application { private static App app; + /** + * 首页显示fragment索引 + */ + public static int mainIndex = 0; + public static boolean isLock = false; + public static String jqbh = ""; private static Handler handler; diff --git a/app/src/main/java/com/police/policedatasystem/mine/activity/ApplyDetailActivity.java b/app/src/main/java/com/police/policedatasystem/mine/activity/ApplyDetailActivity.java new file mode 100644 index 0000000..eaf69da --- /dev/null +++ b/app/src/main/java/com/police/policedatasystem/mine/activity/ApplyDetailActivity.java @@ -0,0 +1,70 @@ +package com.police.policedatasystem.mine.activity; + +import android.os.Bundle; +import android.util.Base64; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; + +import androidx.appcompat.app.AppCompatActivity; + +import com.github.barteksc.pdfviewer.PDFView; +import com.police.policedatasystem.databinding.ActivityApplyDetailBinding; +import com.police.policedatasystem.mine.model.ApplyDetail; +import com.police.policedatasystem.mine.viewmodel.DetailViewModel; +import com.police.policedatasystem.util.UiUtils; + +public class ApplyDetailActivity extends AppCompatActivity { + + private ActivityApplyDetailBinding binding; + private DetailViewModel viewModel; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityApplyDetailBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + binding.ivBack.setOnClickListener(view -> finish()); + binding.rlLoading.setOnClickListener(view -> { + + }); + viewModel = new DetailViewModel(this); + if (getIntent().getStringExtra("applyDetail") == null) { + viewModel.jumpApplyDetail(getIntent().getStringExtra("jqbh")); + } else { + viewModel.getApplyDetail(getIntent().getStringExtra("applyDetail")); + } + + } + + public void applyDetail(ApplyDetail detail) { + binding.tvDetailFnbh.setText(detail.getBh()); + binding.tvDetailSqsy.setText(detail.getSy()); + binding.tvDetailSqsj.setText(detail.getCreateTimeStr()); + binding.tvDetailJwlx.setText(detail.getLy()); + binding.tvDetailShzt.setText(detail.getSpzt()); +// binding.tvDetailFnxq.setText(detail.getFj()); + // 加载PDF文件 +// File file = new File("/path/to/your/pdf/file.pdf"); // 替换为你的PDF文件路径 + if (detail.getFj() != null && !detail.getFj().isEmpty()) { + for (String item : detail.getFj()) { + PDFView pdfView = new PDFView(this, null); + pdfView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, UiUtils.dp2Px(500))); + pdfView.fromBytes(Base64.decode(item, Base64.DEFAULT)) + .enableSwipe(true) // 允许滑动翻页 + .enableDoubletap(true) // 允许双击缩放 + .enableAnnotationRendering(true) // 允许渲染注释 + .load(); + binding.llGroup.addView(pdfView); + } + } + } + + public void loadingShow() { + binding.rlLoading.setVisibility(View.VISIBLE); + } + + public void loadingNone() { + binding.rlLoading.setVisibility(View.GONE); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/policedatasystem/mine/adapter/MineApplyListAdapter.java b/app/src/main/java/com/police/policedatasystem/mine/adapter/MineApplyListAdapter.java new file mode 100644 index 0000000..da04f76 --- /dev/null +++ b/app/src/main/java/com/police/policedatasystem/mine/adapter/MineApplyListAdapter.java @@ -0,0 +1,28 @@ +package com.police.policedatasystem.mine.adapter; + +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.R; +import com.police.policedatasystem.data.model.KeyPerson; +import com.police.policedatasystem.main.App; +import com.police.policedatasystem.mine.model.Apply; +import com.police.policedatasystem.util.UiUtils; + +public class MineApplyListAdapter extends BaseQuickAdapter { + + public MineApplyListAdapter() { + super(R.layout.item_mine_apply); // 指定列表项的布局 + } + + @Override + protected void convert(BaseViewHolder helper, Apply item) { + helper.setText(R.id.tv_fnbh, item.getBh()); + helper.setText(R.id.tv_sqsy, item.getSy()); + helper.setText(R.id.tv_sqsj, item.getCreateTimeStr()); + helper.setText(R.id.tv_xxly, item.getLy()); + helper.setText(R.id.tv_blzt, item.getSpzt()); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/policedatasystem/mine/fragment/MineFragment.java b/app/src/main/java/com/police/policedatasystem/mine/fragment/MineFragment.java index 780f4df..fecf969 100644 --- a/app/src/main/java/com/police/policedatasystem/mine/fragment/MineFragment.java +++ b/app/src/main/java/com/police/policedatasystem/mine/fragment/MineFragment.java @@ -1,6 +1,7 @@ package com.police.policedatasystem.mine.fragment; import android.content.Context; +import android.content.Intent; import android.os.Bundle; import android.view.Gravity; import android.view.LayoutInflater; @@ -12,14 +13,36 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.viewholder.BaseViewHolder; import com.police.policedatasystem.R; +import com.police.policedatasystem.apply.model.ApplyType; +import com.police.policedatasystem.databinding.DialogSelectorBinding; import com.police.policedatasystem.databinding.FragmentMineBinding; +import com.police.policedatasystem.indexActivity; +import com.police.policedatasystem.mine.activity.ApplyDetailActivity; +import com.police.policedatasystem.mine.adapter.MineApplyListAdapter; +import com.police.policedatasystem.mine.model.Apply; +import com.police.policedatasystem.mine.viewmodel.MineViewModel; + +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; public class MineFragment extends Fragment { private FragmentMineBinding binding; private PopupWindow popupWindow; + private MineApplyListAdapter adapter; + private List applyList; + private List applyTypes; + private List applyXXLY; + private List applyBLZT; + private final MineViewModel viewModel = new MineViewModel(this, (indexActivity) getActivity()); @Nullable @Override @@ -35,8 +58,75 @@ public class MineFragment extends Fragment { popupWindow.setWidth(binding.mineTypeGroup.getWidth()); popupWindow.showAsDropDown(binding.mineTypeGroup); }); +// binding.refreshLayout.setRefreshHeader(new ClassicsHeader(getContext())); +// binding.refreshLayout.setRefreshFooter(new ClassicsFooter(getContext())); + binding.mineRvGroup.setLayoutManager(new LinearLayoutManager(getContext())); + adapter = new MineApplyListAdapter(); + binding.mineRvGroup.setAdapter(adapter); + adapter.setOnItemClickListener((adapter1, view, position) -> applyDetail(applyList.get(position).getBh())); + binding.mineTvInput.setOnClickListener(view -> { + switch (searchType) { + case "sy": + showDialog((TextView) view, "选择申请事由", applyTypes.stream() + .map(ApplyType::getDictLabel) + .collect(Collectors.toList())); + break; + case "ly": + showDialog((TextView) view, "选择信息来源", applyXXLY.stream() + .map(ApplyType::getDictLabel) + .collect(Collectors.toList())); + break; + case "spzt": + showDialog((TextView) view, "选择办理状态", applyBLZT.stream() + .map(ApplyType::getDictLabel) + .collect(Collectors.toList())); + break; + default: + } + + }); + binding.tvMineSearchBtn.setOnClickListener(view -> searchData()); + searchData(); } + private void searchData() { + String value = ""; + switch (searchType) { + case "sy": + for (ApplyType item : applyTypes) { + String str = binding.mineTvInput.getText().toString(); + if (item.getDictLabel().equals(str)) { + value = item.getDictValue(); + break; + } + } + break; + case "ly": + for (ApplyType item : applyXXLY) { + if (item.getDictLabel().equals(binding.mineTvInput.getText().toString())) { + value = item.getDictValue(); + break; + } + } + break; + case "spzt": + for (ApplyType item : applyBLZT) { + if (item.getDictLabel().equals(binding.mineTvInput.getText().toString())) { + value = item.getDictValue(); + break; + } + } + break; + default: + value = binding.mineEtInput.getText().toString(); + } + HashMap map = new HashMap<>(); + map.put(searchType, value); + viewModel.getApplyList(map); + } + + private String searchType = "fnbh"; + private void setPopupWindow() { // 初始化 PopupWindow popupWindow = new PopupWindow(getContext()); @@ -59,27 +149,56 @@ public class MineFragment extends Fragment { TextView textView5 = contentView.findViewById(R.id.textView5); // 假设这是菜单项2的ID textView1.setOnClickListener(v -> { // 处理菜单项 1 的点击事件 - binding.tvMineSearchTitle.setText("赋能编码"); + binding.tvMineSearchTitle.setText("赋能编号"); + searchType = "fnbh"; + binding.mineTvInput.setVisibility(View.INVISIBLE); + binding.mineEtInput.setText(""); + binding.mineEtInput.setVisibility(View.VISIBLE); popupWindow.dismiss(); // 关闭 PopupWindow }); textView2.setOnClickListener(v -> { // 处理菜单项 2 的点击事件 binding.tvMineSearchTitle.setText("申请事由"); + searchType = "sy"; + binding.mineTvInput.setVisibility(View.VISIBLE); + binding.mineTvInput.setText(""); + binding.mineEtInput.setVisibility(View.INVISIBLE); + if (applyTypes == null) { + viewModel.getApplyType(); + } popupWindow.dismiss(); // 关闭 PopupWindow }); textView3.setOnClickListener(v -> { // 处理菜单项 2 的点击事件 binding.tvMineSearchTitle.setText("申请时间"); + searchType = "sqsj"; + binding.mineTvInput.setVisibility(View.INVISIBLE); + binding.mineEtInput.setText(""); + binding.mineEtInput.setVisibility(View.VISIBLE); popupWindow.dismiss(); // 关闭 PopupWindow }); textView4.setOnClickListener(v -> { // 处理菜单项 2 的点击事件 binding.tvMineSearchTitle.setText("信息来源"); + searchType = "ly"; + binding.mineTvInput.setVisibility(View.VISIBLE); + binding.mineTvInput.setText(""); + binding.mineEtInput.setVisibility(View.INVISIBLE); + if (applyXXLY == null) { + viewModel.getMineXXLY(); + } popupWindow.dismiss(); // 关闭 PopupWindow }); textView5.setOnClickListener(v -> { // 处理菜单项 2 的点击事件 binding.tvMineSearchTitle.setText("办理状态"); + searchType = "spzt"; + binding.mineTvInput.setVisibility(View.VISIBLE); + binding.mineTvInput.setText(""); + binding.mineEtInput.setVisibility(View.INVISIBLE); + if (applyBLZT == null) { + viewModel.getMineBLZT(); + } popupWindow.dismiss(); // 关闭 PopupWindow }); // 将自定义布局设置为 PopupWindow 的内容视图 @@ -88,4 +207,63 @@ public class MineFragment extends Fragment { popupWindow.setFocusable(true); popupWindow.setOutsideTouchable(true); // 设置点击 PopupWindow 外部区域使其消失 } + + public void applyType(List list) { + applyTypes = list; + } + + public void applyBLZT(List list) { + applyBLZT = list; + } + + public void applyXXLY(List list) { + applyXXLY = list; + } + + public void showDialog(TextView textView, String title, List items) { + if (getContext() == null) return; + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + DialogSelectorBinding selectorBinding = DialogSelectorBinding.inflate(getLayoutInflater()); + View dialogView = selectorBinding.getRoot(); + selectorBinding.tvDialogTitle.setText(title); + RecyclerView recyclerView = selectorBinding.rcv; + recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); + 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); + builder.setView(dialogView); + AlertDialog dialog = builder.create(); + adapter.setOnItemClickListener((adapter1, view, position) -> { + textView.setText(items.get(position)); + dialog.dismiss(); + }); + dialog.show(); + } + + public void applyList(List list) { + applyList = list; + adapter.setList(list); + } + + public void applyDetail(String applyDetail) { + Intent intent = new Intent(this.getActivity(), ApplyDetailActivity.class); + intent.putExtra("applyDetail", applyDetail); + startActivity(intent); + } + + public void loadingShow() { + if (getActivity() != null) { + getActivity().runOnUiThread(() -> binding.mineRlLoading.setVisibility(View.VISIBLE)); + } + } + + public void loadingNone() { + if (getActivity() != null) { + getActivity().runOnUiThread(() -> binding.mineRlLoading.setVisibility(View.GONE)); + } + } } diff --git a/app/src/main/java/com/police/policedatasystem/mine/model/Apply.java b/app/src/main/java/com/police/policedatasystem/mine/model/Apply.java new file mode 100644 index 0000000..dfe2552 --- /dev/null +++ b/app/src/main/java/com/police/policedatasystem/mine/model/Apply.java @@ -0,0 +1,61 @@ +package com.police.policedatasystem.mine.model; + +import java.io.Serializable; + +/** + * { + * "bh": "JL0100002016", + * "createTimeStr": "2024-03-13 09:05:39.0", + * "ly": "PC", + * "params": {}, + * "spzt": "审批驳回", + * "sy": "处置警情" + * } + */ +public class Apply implements Serializable { + private String bh;//赋能编号 + private String sy;//申请事由 + private String createTimeStr;//申请时间 + private String ly;//信息来源 + private String spzt;//办理状态 + + public String getBh() { + return bh; + } + + public void setBh(String bh) { + this.bh = bh; + } + + public String getSy() { + return sy; + } + + public void setSy(String sy) { + this.sy = sy; + } + + public String getCreateTimeStr() { + return createTimeStr; + } + + public void setCreateTimeStr(String createTimeStr) { + this.createTimeStr = createTimeStr; + } + + public String getLy() { + return ly; + } + + public void setLy(String ly) { + this.ly = ly; + } + + public String getSpzt() { + return spzt; + } + + public void setSpzt(String spzt) { + this.spzt = spzt; + } +} diff --git a/app/src/main/java/com/police/policedatasystem/mine/model/ApplyDetail.java b/app/src/main/java/com/police/policedatasystem/mine/model/ApplyDetail.java new file mode 100644 index 0000000..2dfe2fd --- /dev/null +++ b/app/src/main/java/com/police/policedatasystem/mine/model/ApplyDetail.java @@ -0,0 +1,71 @@ +package com.police.policedatasystem.mine.model; + +import java.io.Serializable; +import java.util.List; + +/** + * { + * "bh": "JL0100002016", + * "createTimeStr": "2024-03-13 09:05:39.0", + * "ly": "PC", + * "params": {}, + * "spzt": "审批驳回", + * "sy": "处置警情" + * } + */ +public class ApplyDetail implements Serializable { + private String bh;//赋能编号 + private String sy;//申请事由 + private String createTimeStr;//申请时间 + private String ly;//信息来源 + private String spzt;//办理状态 + private List fj;//附件 + + public List getFj() { + return fj; + } + + public void setFj(List fj) { + this.fj = fj; + } + + public String getBh() { + return bh; + } + + public void setBh(String bh) { + this.bh = bh; + } + + public String getSy() { + return sy; + } + + public void setSy(String sy) { + this.sy = sy; + } + + public String getCreateTimeStr() { + return createTimeStr; + } + + public void setCreateTimeStr(String createTimeStr) { + this.createTimeStr = createTimeStr; + } + + public String getLy() { + return ly; + } + + public void setLy(String ly) { + this.ly = ly; + } + + public String getSpzt() { + return spzt; + } + + public void setSpzt(String spzt) { + this.spzt = spzt; + } +} diff --git a/app/src/main/java/com/police/policedatasystem/mine/viewmodel/DetailViewModel.java b/app/src/main/java/com/police/policedatasystem/mine/viewmodel/DetailViewModel.java new file mode 100644 index 0000000..4fbb33c --- /dev/null +++ b/app/src/main/java/com/police/policedatasystem/mine/viewmodel/DetailViewModel.java @@ -0,0 +1,53 @@ +package com.police.policedatasystem.mine.viewmodel; + +import androidx.annotation.NonNull; + +import com.police.policedatasystem.http.CustomCallBack; +import com.police.policedatasystem.http.RequestClient; +import com.police.policedatasystem.mine.activity.ApplyDetailActivity; +import com.police.policedatasystem.mine.model.ApplyDetail; +import com.police.policedatasystem.util.UiUtils; + +import okhttp3.Call; + +public class DetailViewModel { + public ApplyDetailActivity activity; + public RequestClient requestClient = RequestClient.instance(); + + public DetailViewModel(ApplyDetailActivity activity) { + this.activity = activity; + } + + public void getApplyDetail(String fnbh) { + activity.loadingShow(); + requestClient.getApplyDetail(fnbh, new CustomCallBack() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + UiUtils.toast(e.getMessage()); + activity.loadingNone(); + } + + @Override + public void onSuccess(ApplyDetail value) { + activity.applyDetail(value); + activity.loadingNone(); + } + }); + } + public void jumpApplyDetail(String fnbh) { + activity.loadingShow(); + requestClient.jumpApplyDetail(fnbh, new CustomCallBack() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + UiUtils.toast(e.getMessage()); + activity.loadingNone(); + } + + @Override + public void onSuccess(ApplyDetail value) { + activity.applyDetail(value); + activity.loadingNone(); + } + }); + } +} diff --git a/app/src/main/java/com/police/policedatasystem/mine/viewmodel/MineViewModel.java b/app/src/main/java/com/police/policedatasystem/mine/viewmodel/MineViewModel.java new file mode 100644 index 0000000..10fa936 --- /dev/null +++ b/app/src/main/java/com/police/policedatasystem/mine/viewmodel/MineViewModel.java @@ -0,0 +1,94 @@ +package com.police.policedatasystem.mine.viewmodel; + +import androidx.annotation.NonNull; + +import com.police.policedatasystem.apply.model.ApplyType; +import com.police.policedatasystem.http.CustomCallBack; +import com.police.policedatasystem.http.RequestClient; +import com.police.policedatasystem.indexActivity; +import com.police.policedatasystem.mine.fragment.MineFragment; +import com.police.policedatasystem.mine.model.Apply; +import com.police.policedatasystem.util.UiUtils; + +import java.util.HashMap; +import java.util.List; + +import okhttp3.Call; + +public class MineViewModel { + private final MineFragment fragment; + public indexActivity activity; + + public MineViewModel(MineFragment fragment, indexActivity activity) { + this.fragment = fragment; + this.activity = activity; + } + + public void getApplyList(HashMap params) { + fragment.loadingShow(); + RequestClient.instance().getApplyList(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.applyList(value); + fragment.loadingNone(); + } + }); + } + + public void getApplyType() { + fragment.loadingShow(); + RequestClient.instance().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) { + fragment.applyType(value); + fragment.loadingNone(); + } + }); + } + + public void getMineBLZT() { + fragment.loadingShow(); + RequestClient.instance().getMineBLZT(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.applyBLZT(value); + fragment.loadingNone(); + } + }); + } + + public void getMineXXLY() { + fragment.loadingShow(); + RequestClient.instance().getMineXXLY(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.applyXXLY(value); + fragment.loadingNone(); + } + }); + } +} 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 7815740..69dae0e 100644 --- a/app/src/main/java/com/police/policedatasystem/util/Constants.java +++ b/app/src/main/java/com/police/policedatasystem/util/Constants.java @@ -45,6 +45,10 @@ public final class Constants { * 赋能详情查询 */ public static final String MINE_DETAIL_ID = "220000000000-3-0100-8c3e36bb5bdb4ee8b55b4ad0c4a83d13"; + /** + * 自助查询 + */ + public static final String SELF_QUERY_ID = "220000000000-3-0100-dec70ae1354e4281b6eeced50dc2a7be"; /** * 组织机构id */ @@ -62,12 +66,24 @@ public final class Constants { /** * 当前用户身份证号 */ - public static String SFZH = "100307"; + public static String SFZH = "220183197210264653"; + + public static void setUserId(String str) { + USER_ID = str; + } + + public static void setSFZH(String str) { +// SFZH = str; + } + + public static void setORG_ID(String str) { +// USER_ORG_ID = str; + } /** * 当前用户警员组织代码 */ - public static String USER_ORG_ID = "22018421000";//22018421000//220106290000 + public static String USER_ORG_ID = "220183210000";//22018421000//220106290000 /** * 寻址后得到的数据-接口列表 */ 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 beaa034..25618de 100644 --- a/app/src/main/java/com/police/policedatasystem/util/UiUtils.java +++ b/app/src/main/java/com/police/policedatasystem/util/UiUtils.java @@ -23,7 +23,7 @@ public class UiUtils { } public static void toast(String str) { - App.getApp().getHandler().post(() -> Toast.makeText(App.getApp(), str, Toast.LENGTH_LONG).show()); + App.getHandler().post(() -> Toast.makeText(App.getApp(), str, Toast.LENGTH_LONG).show()); } public static boolean isEmpty(String str) { diff --git a/app/src/main/res/drawable/all_15_fff_bg.xml b/app/src/main/res/drawable/all_15_fff_bg.xml new file mode 100644 index 0000000..f1400b6 --- /dev/null +++ b/app/src/main/res/drawable/all_15_fff_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/all_7_4b8e01_bg.xml b/app/src/main/res/drawable/all_7_4b8e01_bg.xml new file mode 100644 index 0000000..3a05311 --- /dev/null +++ b/app/src/main/res/drawable/all_7_4b8e01_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/all_7_999_border_bg.xml b/app/src/main/res/drawable/all_7_999_border_bg.xml new file mode 100644 index 0000000..b45947a --- /dev/null +++ b/app/src/main/res/drawable/all_7_999_border_bg.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/all_7_999_bottom_border_bg.xml b/app/src/main/res/drawable/all_7_999_bottom_border_bg.xml new file mode 100644 index 0000000..bfae86a --- /dev/null +++ b/app/src/main/res/drawable/all_7_999_bottom_border_bg.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/all_7_de7900_bg.xml b/app/src/main/res/drawable/all_7_de7900_bg.xml new file mode 100644 index 0000000..f5329ff --- /dev/null +++ b/app/src/main/res/drawable/all_7_de7900_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/all_7_line_ccc_bg.xml b/app/src/main/res/drawable/all_7_line_ccc_bg.xml index f7fd2cb..8c730b3 100644 --- a/app/src/main/res/drawable/all_7_line_ccc_bg.xml +++ b/app/src/main/res/drawable/all_7_line_ccc_bg.xml @@ -1,6 +1,9 @@ - - + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/all_7_main_border_bg.xml b/app/src/main/res/drawable/all_7_main_border_bg.xml new file mode 100644 index 0000000..3457491 --- /dev/null +++ b/app/src/main/res/drawable/all_7_main_border_bg.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_apply_detail.xml b/app/src/main/res/layout/activity_apply_detail.xml new file mode 100644 index 0000000..3d9e8b8 --- /dev/null +++ b/app/src/main/res/layout/activity_apply_detail.xml @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_police_emergency_detail.xml b/app/src/main/res/layout/activity_police_emergency_detail.xml index 7ff43c0..0cddfba 100644 --- a/app/src/main/res/layout/activity_police_emergency_detail.xml +++ b/app/src/main/res/layout/activity_police_emergency_detail.xml @@ -36,531 +36,32 @@ android:layout_marginTop="50dp" android:scrollbars="none"> - + android:layout_height="wrap_content" + android:orientation="vertical"> - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_navigation_view.xml b/app/src/main/res/layout/bottom_navigation_view.xml index f39cef6..2d441a8 100644 --- a/app/src/main/res/layout/bottom_navigation_view.xml +++ b/app/src/main/res/layout/bottom_navigation_view.xml @@ -77,27 +77,27 @@ android:textColor="@color/normal_color" /> - + + + + + + + - + + + + + + - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_dept_selector.xml b/app/src/main/res/layout/dialog_dept_selector.xml new file mode 100644 index 0000000..ff86b68 --- /dev/null +++ b/app/src/main/res/layout/dialog_dept_selector.xml @@ -0,0 +1,40 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_selector.xml b/app/src/main/res/layout/dialog_selector.xml index db13c75..b1e9c58 100644 --- a/app/src/main/res/layout/dialog_selector.xml +++ b/app/src/main/res/layout/dialog_selector.xml @@ -2,10 +2,11 @@ - diff --git a/app/src/main/res/layout/dropdown_layout5.xml b/app/src/main/res/layout/dropdown_layout5.xml index 7148c5c..aa500cf 100644 --- a/app/src/main/res/layout/dropdown_layout5.xml +++ b/app/src/main/res/layout/dropdown_layout5.xml @@ -14,7 +14,7 @@ android:clickable="true" android:focusable="true" android:gravity="center_vertical" - android:text="赋能编码" + android:text="赋能编号" android:textSize="16sp" /> + + @@ -128,6 +129,7 @@ android:layout_marginLeft="45dp" android:background="@drawable/all_7_main_bg" android:paddingHorizontal="5dp" + android:visibility="invisible" android:textColor="@color/white" android:textSize="10sp" tools:text="99+" /> @@ -171,6 +173,7 @@ android:layout_marginLeft="45dp" android:background="@drawable/all_7_main_bg" android:paddingHorizontal="5dp" + android:visibility="invisible" android:textColor="@color/white" android:textSize="10sp" tools:text="99+" /> @@ -287,6 +290,7 @@ android:background="@drawable/all_7_main_bg" android:paddingHorizontal="5dp" android:textColor="@color/white" + android:visibility="invisible" android:textSize="10sp" tools:text="99+" /> @@ -325,6 +329,7 @@ android:layout_toRightOf="@id/tv_area_key_person" android:background="@drawable/all_7_main_bg" android:paddingHorizontal="5dp" + android:visibility="invisible" android:textColor="@color/white" android:textSize="10sp" tools:text="99+" /> diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index 2fb3edf..76f3e97 100644 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -98,6 +98,18 @@ android:textColor="#333" android:textSize="13sp" /> + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_police_emergency_detail_base_info.xml b/app/src/main/res/layout/include_police_emergency_detail_base_info.xml new file mode 100644 index 0000000..273de01 --- /dev/null +++ b/app/src/main/res/layout/include_police_emergency_detail_base_info.xml @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_police_emergency_detail_cjya_info.xml b/app/src/main/res/layout/include_police_emergency_detail_cjya_info.xml new file mode 100644 index 0000000..3d59f1e --- /dev/null +++ b/app/src/main/res/layout/include_police_emergency_detail_cjya_info.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_police_emergency_detail_person_info.xml b/app/src/main/res/layout/include_police_emergency_detail_person_info.xml new file mode 100644 index 0000000..28e6399 --- /dev/null +++ b/app/src/main/res/layout/include_police_emergency_detail_person_info.xml @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/include_police_emergency_detail_query_info.xml b/app/src/main/res/layout/include_police_emergency_detail_query_info.xml new file mode 100644 index 0000000..ef1a27b --- /dev/null +++ b/app/src/main/res/layout/include_police_emergency_detail_query_info.xml @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_apply_fragment_1.xml b/app/src/main/res/layout/item_apply_fragment_1.xml index c30c755..718ea9b 100644 --- a/app/src/main/res/layout/item_apply_fragment_1.xml +++ b/app/src/main/res/layout/item_apply_fragment_1.xml @@ -13,13 +13,26 @@ android:layout_width="wrap_content" android:layout_height="40dp" android:gravity="center" - android:text="警员编号:" + android:text="警情编号:" android:textColor="@color/normal_color" android:textSize="16sp" /> + + android:paddingHorizontal="10dp" + android:paddingVertical="3dp"> diff --git a/app/src/main/res/layout/item_mine_apply.xml b/app/src/main/res/layout/item_mine_apply.xml new file mode 100644 index 0000000..693fd53 --- /dev/null +++ b/app/src/main/res/layout/item_mine_apply.xml @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_select_dept.xml b/app/src/main/res/layout/item_select_dept.xml new file mode 100644 index 0000000..80e1c6b --- /dev/null +++ b/app/src/main/res/layout/item_select_dept.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/icon_apply_detail_query.png b/app/src/main/res/mipmap-xxhdpi/icon_apply_detail_query.png new file mode 100644 index 0000000000000000000000000000000000000000..5fcffc74e6b0901a8967cc569a1ec93285939584 GIT binary patch literal 4491 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/icon_cjya.png b/app/src/main/res/mipmap-xxhdpi/icon_cjya.png new file mode 100644 index 0000000000000000000000000000000000000000..064029d373f5c335368f4b2f8a977c8789f05297 GIT binary patch literal 6331 zcmcgw`8!l^*niHpYVbO)s>Lv)U{C|$Yorl);@!;qkC6}tcmuR}B0xJi&$-OQ00p@I zU);4b+t>EPuQyHlHchTfQ%6^$k0bltD+|t1;G|i&|ABhi4_;l$&Qg2Wm&O%08NDnX zNwgF8&)U9`oT`#q-@yP+Jj$WbhhLKHV5hkgnxWl4AIR=W=sYM!yHVdBD@H)QhFGXq9O;bjzp+AO@~e}6t`T8A#7{?@6u2-hj{ zH=a-V1TG)svtipbkaiN=du)y+5DMt)omSa6De`@e*18q3tL;J4_>a#NQeVWgiy}E{;z23H%zs=)PqRbY9 zC)P_I);&-_`JQcWF&y6#`n4&nSUgkpsYmNsa4~MT7(;T5_&kQ2y0+w6M$v6)toHe9 z$LqR|G5IvuHE)=(j;dKxZu_EhcD(XPzF?u07{&ONPp2p1zA3kD7H%8} zm(*Q7?e)1-Vr8MK>U=-mQKhAXxyfh$qc+s5ql+h6bWn=lp0yp2TPbN7D~g8ca$uk^ zTDP`eiAp&i5?R*#miInk=YtKM@+oVVq5jSE zu+xw7Q!~k;7zuZ;%H7`b;d%0-U?k;%@V9Cj^-}}=smR0sROZH)j5*MSvoodBcTwxh zt@{=y4@2cMT8@8xYM4E^X3*76h&(L`scNx$_$@xm5C`p zO{*aF+HVmjZ5@5xpoL{r7cBUNQ%E$0(ZKBHbnv+c9nE2!s6yy(J#EG^LR=T*F;AC& zm9A{KEAmGJFeyZ!XH>`Xa*t9+-xe6xpSg@7DimFsjR0RqH+PFtKkU$aosM~Q_?8b3 zFhnuL@l$E!Xz39jH9WYyNwN65j3x0YUnDE%%qfveV{p-z{U zuPuAC-4cPrht=B*ZEV!k_mt$vkQU-=e}qNs)=$Lyc8u7Ne+LSZ3I2t@j@GIq)thlB zbfINK?>dgVcJoJvaQM=|OP>9NW78v`js zfSZUzLVheaoJ9JcN!xKGm4_nl! zut)=G4Sg6sgdi<5ssFq5M|1wb$G^HCJRpLc9Ij#+3_uDzB5d)f*eCxkOM1yy`fmnI zsE<1Q)dlG3^3t&BIAEECfPqhM(li5_c;7;sELDwKPeT)P!$(8_%Gg;;(n14B)*KP! z2aa}m*^{Z{qn|?8AQb+sp~;@lwmJrcJtD3e*{x9LKBR~yUFQEat}cO`Z*(CLNBki? za12N{q=P=l93Q@Qc3+Bzh6qsahe|}yB$l7g#wjom)1i{o1BUczp?N=-;Sj}rDQ+r> zBW9=`jV95pdel)mOaPkHHMM1`0YaAZhg~^C4A9T(`AHo#jr9i3vC+r3G*aCZiA}60vXH7rL#k4TW3$k#umQW*W8d4C9umN0#5z50>k{vB z5{S5G*ijk?4ef{DXc`ayP8BUYbG9rV57=tN&s*xNS>%W_IDLyjlREsfWnplk@Q%dx zjma~6{RR7V)Dp_4X!tLv*JV0rVW3H3>_0HH&HcAZz05Ux9u!F@TWwjt?x@M~Ur^U? zw@5k7`qC4@*w4{&JbH$`kW8*C9%50qQC8MnxoQm?BKOvs%wvz#&nZ!h55sk9cMSwb z2f5)4CYKuqHt#}49%X>9N=kjpQwitVYE~t7BDpu%T&oCl7}%Fzu}NJTB9WPro?@x) zj6v=MFKNVIy{P1ul4nhHV7@qxa*y4;jhqBS>ZuG=;ed=eD15jWu`Q43;FgA$H=hE; zJ$LaaEOglbe(|@Ur7Lp&euWg3tXN(Zlwt<1T`$wHW?hzkvMgi_WB_~xyAR=lQ z_sinKHHtc8$B|3aJ#cHiNlZbS`aHL{le~+C6c?TuEYF|-Yx$?6{ciGZo0=IloK}t_ z--YlX1#VzFIPr0&?>vT>`ni)ps@TKLWL;xc+uU(x#z=Oxvb50bbQ0)snSC^^w6Nj9W)HuNi8nMNh13d9bexJAZ z6$GGHsfkFwoOmOhIJLw4+IRA1xQ6&*o%V{=>Vx%ikKdx+Z<3x@6~3wchWvCY&yf}S zC|I7`#H;}t90UZ2-+f*}^dJ?MO$(b|aCjrtaK_Ap($nZ8Rk{~hp2234F|m0N)`%va z2W?5qscH|BQIVLN)&}4J%T9)uF^$M1F`F`&~qa<+Z&Gp1!n$AhD(gTBS+yjH!Gm_6KGFu$QY!8D_i+h(Uvh#hiIkkv-|494Z0L8aPVl&fgT{nO${M?I&XI<*DA zVFwB8$Q4xU<2N$KVy$hnsN~jovP*|n8kp58a!@p!O=gAkm>vE45qg?R^!W~M*0hTw zFEj1(@QWU)ht!b_9=O<;k6>=M{Squ5iS|sAkP||(MV4OJy z5BUC0>1b8zXSi=RYT?m^osw+r0Uduhj}uYj zdMG@3DgX_qT`rfFO0Rgw*iv}6i}`x%z|&e27BAxYRc{C)}xTVdrC-VO6+8QfrjNS>mwET^dg2MOy<2c=YI&pemL&V4ggk?uR#|I>! z&#j?q{4%2{#jTX^#>{V7APxw`DN9bq+S2-Um?v$@eV&;;P$EbRMf(q6qBb8}eJ3 z?(v6PA^vH_FJ|YSTS{=N>@pxf718K!)68?>FO^-qpM`$AY^rY1Ugu76y*%}bQvTBF zQfYGIL0BLnMPSwHagOvszz|z-RSsiT(c{(!Yole6PQQhFap@9ErJ~N)BQJ`!Wte&e zQ`zE3bV3nUo}s`nq$4c!a#D7RJcVxeEoKGi|Vh_83Ey3ea{tJq{TPo49w zKTgU!6g*B|C%0E_eWQo5ElC)fR=2Dq=HK;x{zhDD_ee_Ed4>JDIe&P;+WjOVMF?q4 ze&k>RRsc$0CuIC57gq5&2;L5^<&|0&pEJ?`@vcs@BE+wq#j&qSYU^W1Uu+oa@HC&? z7MD)WjX|w66!d4bUCGuRn3aaONXpE~=5Du{(k2vAK(twIH zMOnptEwMGg*IhE|m){@y>%k8ey!);Myc6eBu*zsUPi$y4?3c3Nzf}7tI66cWVca{) z>ViGRT3hF#$4Vd>9Gv#PTTzq6)^T)GLX98NJC(^MX_TM2<`o^2WXKx+$@50bczBB- ziLWx9o3ZGEd>`)JwQ5|Ro!nOJoK~%e=euow+ikt_OYD#UtDnoxo8<4wt_clcZrc82 zwGxx>8FiElEZj)odt2w|_Rh3$^pgEz-FXUi3(g)rvD^2MxWEaC6oW>r^JUVzxCYJf zxG7imG_KO849YJ)G8cNZU8RQ~&bf)b`YiJ;|2=EHkN&7*%gWhzV(kN4XOtm5wtgeD zs7HFCn!I<@Saek`#_E?=jJ9uM6nr^8C4cit^>^>d?bKrPS)`&!bEfl>{=>h=B_yVF z7Q}BYqVcC4a5TmWXEynHXS^SO{;u8sbQpX4>L3kNtWzcoB=!RaXhr6@p88tL5PqFl zMPtj0=C8O)RBD1xwo!UzpR9Fq?0Lqohiuy~9(+;_$4zF$-g%zUh=R<;X-f2kQixIt zH4ogY0#}vo!WViluq^s%)C(50o5i=1!bgMgmwxbVNiAJbKoph|w;CM>M+?(DyK`(_ zMc=ykT;R&!#ueI3acw|WDqW-Z+<>s^V=@(OUb&9NE`$EQ=F$U)4#_~&-O~g;v7j7Q zH|E9@`+iqp@^w-4+68>I0m!k3KE3kH0`%t1@!hA{mhLRh`acdI?M*`&r}B*o(A09L zY!Yw%ymT%zbX<7HKx=X1ap&_|aY!I)a2cDB9?8~|JU04cNV#e=L2~DU{pE%^xn(ue z%fevA6gEWQIu=|w!)(~*to_-=zV_PvBn|KfNnQl8rNqE%#;tOG(w2ReuDrqClNIwR z1JI?5@52{@C?-`s$6;+XAmF5nsSvPxcPh!SdS3&u$Jk@wuo@zV8G@~~pNd$nU#+0B%CUwT6#@@MA$c7Y*n1`z+PrEPT-JdodrE}j@LN- z>17`*&uF89Pgkz{oo$1LcflQZpKp$;WbbMK*;o3hMEBe4uSYYcL;_c>y>4fD7J7|d zl54;D?0&_w2VAlVoOSX9qHxGFJ6{`4wLHJ#a;MI+b3YtvM|5vlG^rEj)6}8>gC}PS zxcgd)wUoPu8OMa#wMbI#J5Uf7{&v7vjD)1&3IQlxIuK8grf(K&bd}kZ^FGH8LDFwz z@eviR@T&WqrC>mP#TB9C0{1(8wqeaf*}F80NC-`;P?X5FmEnt+6_{Xuh~jr=JIsGw zY<$ofqHi;IQr!KBmBij21)>W%wGksrKg_h?IL+>irqGJ?+%h}ei%)p_tA|z4Fl0A( z@|$hBmqNgkdqh_E`k?uXs3*w-eR<;I%f$wf4>JdYnvS4KiCJ|hD978Yt;>Y%hlxdnKh5(Ki zqUb_XpP0#j{C=S%hWQn(oR!mWJoY&H_J)N=Xb4ZD9>N@G5*!yJ;Ky>+@qxS4WTS=0 z$iR8S!_X6KFR>q;N2`^_0=Sv`x4Fh7{DBUhhq3j{!%Xc4zxScGG7Y{y@i%NYZf!QB6rtTcwi*wtG z)N<5M?{DWv_|g7-c&lq%{;X|KVYvoHdMUVGT?^#BQP)Q17tr$)3f-V3pV#$a`f_cb zJ$ia2vGhe9&aWcS_>@KNM#gHL2jrOtb{bLRYO(uI4AbF7t`}l>qLY`hBBAf~=+erj zryS?4zAYicR437#3S~U8aM4?yzllS2bXUUIvJpZUBR*G5khI`nhL^A1#ti7>nve(% ztyf4a01 zQ|!|%+n)at`iDJvNhfL|pV~TC8DzrS>eK2i(tNZ}kR$?|Lhh2Jub(67BA_pdcz_@( zfrz_U0Et(IGM=LHosh7TGqu%zOpNzD9Rd%=0LF@g+Dq=}?)n%3(BKR}ozwxSnwkxn gz<=&c|NrhY;q76gotZJ4hk$zNYa3}j*K~^fA5=&1HUIzs literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/icon_czya.png b/app/src/main/res/mipmap-xxhdpi/icon_czya.png new file mode 100644 index 0000000000000000000000000000000000000000..7d551f6a5a0e261e17fe7b133d3dc974c1ec0988 GIT binary patch literal 5042 zcmb_g`9DsI8$BeHeffI+hwo44d|t25_I{u3^Eq+Wmc{~j2|NHmz|@3c0|2x+g#gO8 zIh+b8@%&E;v@zBPPdc|v03hsZ$~bIy#d#_xA&p!|iaD7=k$oD6>?KvDT-isWk__Z$ zMN2HEC)uoegUn_j0!g)%yvebEIE`QJ-t4hRxrJLfz}RwSHj?w7UMSWs^VsVIwF>hY>eYUVZow2d@ z>DNU9Y*1eoZv-4uRPFpT$IZuw#OCp7;Z>RZqFc&{eabRW$-8G>7N>JnrJB#w%X~1B zy-IP+DKZ2)TJ2??;vI8=N>oJqx5T(1kdUOGjNmTr`KRq~=UaNwEaS)7)i{X4_8JU3 z@oBnd*oBlj_1akb%o|a+jn3;J$hY97&bk)uis#D;cmA-W=Ma|0%2vXUVuE{UvVNJq zG{S<|6GojaeTCfV_~V zmr$;eRj6Ybimirt_WVkX$XyxCh)^M+8v%>59bp>&zw7tqqcZGd1uH!50YKJ?Z!1>8ApT&d5Z zFxMzm+dQ6xI{ak^^!YP7cSX%tIF%5eiOosjvr@5G<|^^xB5~b$RqBQ;e1Z66S}ONw zxJ}o{(=5_{yurNIxf3wE@sfoUvz10gh$xMk5G_+J%M!&1 z%Nx&8hO{s&Cv0uS>$V9v>P!Y}N}0I$BYTAv@{I!h%7RUKAT;POy+)Kp0* zljEg;96_mIyTcAL>`tI>9xCCoXbcA-Y()9GzUx*PWm7KYrxDa>7|3*eV2vgo1`y@7 zWi<)jju3!wDH+dH-*n*KA9qZj9SvaDt7-Z)H9iP&-Fl$M49(p1d8EQd33*G!K;mgd zM;s&!qZsZO{`&tvsSd}bYQKBozeb&^M6I7HY=XG`lkK6WJuW>zA2w}>tRF`CYPo-k z$37MJ~DJQ`>`^6lG(pA&Bg;GN~fz$pqEnyoAZOsus3(GX+@&KIN zb>R_7_rSRH^r4i6b(eh1+cyauac^DaZ#b|lQv@@hrP8n+5X5aENmUOA{nm>GN9p{0 z%H0UU0&m3Qt#7U~AdSrBUJdGh(WjVpNf&ly)nJ<4Iioh8zIsbY&BuG(iyd-6@{OYM zv8Rb)?;R1>oqu*Ri0e$)n1_0kuCYhNWNJzkXL-O-{^Es;E=f{vj!uP@1-(<=F7n* zn?LtuENtUo&D3W{Hl2Hmt{90(u041-7&b_*uDfd}fMUG8oo%~xmaF8t8)~Na2|<+4 z;kcVoAp=&y70R_<`Iv*7Q=u_`t1lytvffNP3Lz(h*~}nc<|&s z6*%2}U8`PHpm!82n@Kb?28rzXW2H;nC<3^IgjTIj%~Qc}|IWt`?Ehn6mt+km5md9B z8#>Qzn$SJk#*W_rBN~%UNLq@y9&a&^xvu?M~gX@3;l* zTAZ3IC;K7-vyPCH4a&`&5f*-IZbj5*f0i6$BY^6=+}i zR)l)XrRvN3zaCUYZBa=kHgl$QweplEx0$9z#e|M(j67GP66W91!KC=v-e2SZbK?xb z-CM$52mdC+r+-u!<4K1mqZC6;pwL4?uyvA0fN5C&?u|7XZFOhP!Mpv_Cu5UfS`W{M zg#9HbeOr0yN89MB6Ua`_rcCG9{gd#~ry^gEUk8*dlUJ8P%Z-X;N|boVHJ|iPgeH za6l;RWI#`sf3NSNZ*b3&zoVU&lZP0!(U=NPOvaBC&JDH10`g4dz;(`ybBJnG+}z6B zT?Glnb9u4`z>+wsNJnPHjWX!t$7u$@E^}6x1}|;3SBP$m)Shkov=Qirvb77`b`Y3u zO66jV@mqX}fFak`hM^-f&+p#r%tJ&WlUL~(rp{YLf9={jc5zj2Uyh!*Je-`kTXlHc zZy=Y*JQ#a>Q?Z2rab9I)h!Z)(b(bRtf0~cSg2F20+jrz%$5BG6REb~y^+oB##E|P$ zIAxW)n!-M>Xbj@-w=1JW>)C=i<--%VX+X!)-i8J%W`^W7*UQL)mXtA(l07EQBJN{F zbNBi!M*Uw1c)eQpyuY*Hqo2*dXYQ)!s(n)o$ed|Dp;k`h*9?lZ9X9|+X2wLCUZCAe zbK6W(Bq3}1xwJDA3w+#F`!9k}$yM#f+X{wQXWmb>6m24A;;M36RT2I&c(S8|fSoIu z+v#YA)ORR$osbQX1H=kPMJJ=pi~ih`7+`1MR3zKrYWGt(b9uZmL%C7cVl6r1;5NAX zhSbM02R9!AWW8c=ULT=mxOS{|YWLnR&GM@(X$w;=Xl6jGzBnqV4R1?N0;!{>-r>^W z@-mA*v%~akuGtQ>YGZZ*Jxj45Kc%J(1J&+&J{>5Vp6)bOHGFFMXooWKztof+jR2Ci zFgPw(5G@Qpa#HAR)tK8Gcs4Ac^H65rdsE(R{CoFBhnmHK%mID-mo~>^Xkcd^$Fy)> z5ux%2HoQ1@E$wlolj)|~*>YX`M&swSFr$O^vDb zekW6Vj1=Fl08i0G{6;|$I4y;FV>hSl!fN;0_o<3NYVOh^>%}Pe0C)zDt4+B&>Tzujz>P8O8Cxtt`h6^~Iv~QuUca9s*QtnC<2&F6k-$s}y&-%gHym zeAq=)?y@lFbM&W=0NP)by*yMUn4+)+9K}A<&*BP%{If+UzH+pt(%v^gtL{DTmt;1p zgat_R*g=asFBa=EvXub?D&DJOVZC|?dsXl_yo}pWO}Maa@uR9Hu9E-OE{KZn?&oS+ zs6%Sf_J-)0cP!3$8v(Oz-fy0KXxW@sVUvK5x9oUV4`z5$WRS>H-` zwc#oS$wRX4Pt!Ksa}0|C4PVlrDE0DIA%T)bpXq5{B!46Da{hdOc((gSE$QYB41(_T z4A}tra1mmrN}^VUilP3uRQmkgjgwmBJa}6^5aiGKoQ4qgE4c1mzGnz_p}7*9VmC=? zzOugt-yw@tP)*1zEsY84uXJoFBBcl>Ft9C*i+-p)Ay#{PuJvlyE-eJ(eQEb^vcCts zeIPP}-ocAKWVh>v31DsId?^966%*xb5X$l!^jd=%$BBl?3zA{irIG8jHP9 zzp@nZtaoeYoW84~_3!jNN@=eg)_Cz0p6I^)z2y%TKv|ji5qlf5<+ExtWn`N_(cQmQ$Z8R6Z#J@AyXxSr0z#c)o{u zUUV%c7R(z}YFK}=c-VQBemo)400$26h_0L56~P77arfne3JvQX_lJ)t%%2CE4|>=6 z0I`3eSh{+1Aq$Vha93ZW^h`Vz7CD%)vl6%U!_o~BMulfvPA_$%s)8OXJ9sGsZb13Q zV4$EnZ+)g973Rw|Px*wz{JZ+v5Im22B@Q{$I_FQ|l^Cv^PQ6kPJpmR_@~m_GU$WHV z73u6imnt*w)R6ie?3N%v^cvZ3w{nNwofE}Hu?gT*q0an%V1o>^gIE{$IaDq0(Am(0 zF|_p47Rf`wb^h}Yeo;aNzRfZl7kr6DSD=t;B*tl~`447`qsJlysO-R<-7#!y#noz| zy*dBwnf{8uc}$9FY98Zx=LEjBZbs~`-|O9p9vN6F76r0Qjpnf-5hOP|P$)j=_4c~~ z_zMaW$zri1Ts1w^3l|h|=hi%}^SufU&?J&=uZ2f&+vOH7)4HdmA|G^AC2p=UmJw?f z)^l*wB9LwDbNc~8jRgbIj?)gxUq2>9)E#Na1{M43kCh+Oo%)>+fwFm_=|*4S)_+(G zWc6=_iuUl0thkIskVIVse^nleYFN^RFTCz+T&Pr2dX9Y2s*jQ8j7kN>8DGx(@#tpM z66(q?U4*z0n4fn$G&U*BFVxr(u{s}~Z4&Q8yRJ;6=T2+zTI=k}NZNV$=AFdkjhM1n zaK3!Y1!vc6!N~Fl(W{raRG?`2v+=B%S`ne5wY)+SW?^r3GhrJS)AWPA8E!B_H@$hy zz|4B;&eLwO(>w?jPM7y!s*xNTM|S;Is4xN~)9YItnOiT6R_^(6 zwvqw%Kmj5l+u6S-6PG6@*Sq2X88gweM)RLgjx7df+dU)zk?l^hm+(Q^B-^LudFW5) zy$BoZ9OsKS7}a#SSlEnbY!>J--Y+A+qvhho7d=x{Z{E`pgIPvt>B)w#HoRasK*rRgA;^%~i*)m7v(9xf%ITVOvL~)^K zigHBGoHBXl_kJcXCveZu`0={{wiaJ}`mCjozwmWitkpYz?lqKduo%{xP$pEt?qhaM zST@Ma^+eM1nlz4ob7h$HePXjL#m0OEEly)V2_dc{R)Tktz9 zY3N~;IxqK&+KoTZ#A*Q!l8Pd1$ikF2);tWPGD~$JBzpPUVydPvMBzBxC}99)x(q~(NmTZi2{>~Z&ZEJZoY)(&^d!-f+tfWH_3k%U@TomKDl{#@ z5!CM#l|8*)sH=~tHJpBZ0**sD=dB*LAM*+&7mU4q3?()(|8lBxDaBuyB%) zSj2@t64Fu-Sr+AX3jSIY>SVQ70%=@3C?TQr=AgwM=d<3!oi>P96-}zUWb>^>J7Z5t z>Dv+*9z&V8iB2oKOTRDwx>1^UD0WQxpXC-qDlFTfyiZ4Lq%AbLGR)P|H6@$uSvL;+ zq^X@xU3m3s@}0cs*&lAk=i;-A_!%N%Bf8A|d5*G4B&V*7t zGs-VU=6HYcBCW;$J4X01TbAmL#y=4j(?w^@$%kcHbBd6;4LMh8m&mJ=Vn`HfD~(<@ z_TJohX2hPps#J7>wG8c@ZHTA0(RiuTd8Lp9eO60`nGc6G-AFSl9RGe|GDwCi>@_c= z4^PaVX`M_z-siXj!y5IiElK+1 z%P7HoaBkoOpTbw8UD^)~)k*3MHZmgIy&&SMH4!H}%Z(#PyRI(|M+n1 zr+FmoaGGi1Li|-F?_K10xg37vXaypOM~Mk^tV#^&B*Q$_taNg&PGXBH^Mh2YS;Ta4 zV5{tU1=0F{6(}{1iWKA@Bd8gW@X3(IcaJiod{ZXGiuZezVzRgxag zrysQxMo&{!58WiLeVvz#aVIG6+KL*54Ex5q!0~qRac%eR3vfJFOOD&Kt&p=k#2@oQ z#!g1v7=7bZDmY+qtzrVp(+0!$RC=OVRCik|-TNM@QYbhbOWWm)1pn3byAp}&EDGvN zd%KL=LxoDw;!4zgjE^&AH%%JN$nhV5j0aT@a|csTz5%`78FUjPGhLZK6}}+!?$iI* z6aA9^U}y9U$y4S_>l70vIN}auk8U=GRY{e(^v%e!eR57pIm z+x2P1@7B?b^sr(dEBo}$b30LPkg%YZnnZm6UzK5djEwRUTY&H#*+Gt1sev99;vV-7 zQWKzu3s(h`GwQWixNq|JHiK|UE{g@h+Y322f04y<#1rc8gAN~tVrc~r0nXLma9*%G z0sXkqYUT$?VBCIO%ovY9*@VhI10yi=#b{4g9(>3PmO(;BX3 zdF40%5NT#As^X{@$^zgM%^2`Lg|F%WgYtu_dL@y#*7s>Hc=6O>YSuje(&>+}G;Iqc zI5QQSXNDI;4~V>~kmEjD1^tpeuzs47hM@i>*X`u^3wDb=Ds{qNAj(g&JKT^ZqZ#F^soEI_U_g!PZ&) zuNuDM=w;Gnh!*)R7KnU~02FV`){HgyEA{Agw##lZ=Fb4EYOS)i0cy0tZHlU@lSEuQ zn2)j3cFpJmF+CQr^~vOmx!E!}!0nWs4EGUu{$`%IUTbK{)c%-Up}x%}V-jS%Q9irZ2IOiJ%hf8`-h^JC=%7Z~ zVZlLh5D|p&$kcQ!Rjpi!;(%PJP&_u}>Y(S#M-$xXCdAi`b{A<fD5tv`5ifycmYlBUSG9Wj7#!gsaCl06|gA*lE0!fcn`oeI0 zQ_hcsIb=@#!f%f&9(aJN3_dT9xSR|Ug}zCaU?fZG!$fBNSP9Lyh^Dw21y}{8>NHfv z7b!P(vOz`7Jn1nu!eu1pU>T{EoM(Gm^=c~M0OU!%o@;1Pj zkK)GY1J4b}K88s|(;Y8{rRB-CB+-ceJ1GGU35ioC{cIwG+C29SHt(W}$ark8liRgKG&+i*!4gOX<4EI3bx1~6IGDM5-{1D8o zVG_0L6ulRh^74zUdU0&Fu6rCgkveR zPAcz`H!^BDnxK(L0$O=?hGe6OyTteFOP?&+sRID!D%UVorbx(WrEIV%BM-);)NCJ{ z8>3mRxFur=Ldu9{ES!lM{sN3)vCG88hU9z+pD~q8E1I1KDUo> z!|}~U5)Ehmuv81pFG5Pfj>P7E6Vkl2+zQ5|ip&_TAbZ}=wK80(S?%9-Nv$<#K%e3& zrru5`BzUQp^S%&}W!O|AHaE#z7#cShR2)5(@I)>hrw>y~k6O6vtKJ9~r z?4abxaw|P_+zMV_)Oqd;X9MzDsR68*DeU2cgU}|8uRYnQafYxb5<+YAJpMJ0bhi$h4ixlc&FZ(oYDo9O*U% z(&H1e!`8Cg%#yprhwpyYdRu|)#*J}lM_Eek_Y4pXx3jV*e2xRwlNG2_ zrRiV`W#M~I*{@<@-NBUUdnA2OwPuakV@fOy@AOO~ByI=IGy604RWmvrv^X}mB<&D# z02w{LSEWxLKs;&c(UIkDb5D@#BMf|ht0M=<&foJ)&XM8jrkZ6O5`QW;#X?6JuQZ1z z<;IJ0X6#|2{G*bUP_(k)P1F(ANx|87-h~{;?E)1TO-FF3k8T4sb@|(t>^?$%yE`oo z^t)J~ztxbuBi!7fn9?JW{Ip?7H5!0Cy{dGawWYR$`z<7{W9YeGB}7#Rj<*mO#kTlM zFR4~scE+7j2Hj`R7eq)(35NP6)xeCRb+4#*AnItVRH8>^MXXp1sb-fNtdd~avojsz zygyU*-fcIaz;z(&6;f3Ixdr#PdMj@um&6~$g~Vz7oGCB`rTQl`i&R!KTXLE2;W@n} zM=Nk8I6%c{yrK;!m34Rf)fh^T`>KF9sZe0}M~X=s6)>wPZgM-j@oZJ&dYIU<{pa7W zgtBon_&!3DkMHvqAd6V0ep8P%u*+)Q?2L>WHy*lw5Nu$Zn0L;LO`TkKQaO=mYVuN6 z875FH@k(zBdd0IYv0GBA(kFT2K}v0%&+wY?#YmO@KE6~^##Qe4_CvBjXyxrHR zn1~9_Ftw;G#3xm>sgN_6&UTd;qvzkUk3h;Fy!+{y1mAt)%)^0Nw4rS(JIj!qFC=ls z`w3d7XAL##P+sNk1-NKuwOETl8`s8n^y9B_;E{7|2k=Pwm>D3U!PQ7k4-<2!kFh@SLvR11LayBt^tyx9*!OR`%o_T zb>)aZ%do4vz4kVd;#rkfk~7Z_SV)b|izy#Eu~G|OX$8qEBi7H9#TjZY@#d7 z3OOf!Ji(5PNd3w^9kCtmtTB_wzhcUbaW%JwVa!23hrid1(U%5X z^Dj|=*X(Z);9zg-ydP2h@a?3PX)+J9b#24PYdj3}d*HypxItzen^=`SD?U)OCz3K?B?C(eOxF4@gu41k(?jkpY#HIMYnCGALxL+(EYY>j6yo8rGFZ&Ma z8IE>}>|iCYp0Xq%!MRu{KtP$-g;4P+D+nc(Ksl+&&R!%93{08a%;C`8(Io>Okx+PZO@zsjA^;OI9&I&qsQ(0G)oyMl`>^w4fyt zCnbnX4%2afif8O@qMj5R%BjFbv9v(PIYn%k_mbgaeWtkO4YVoBL`tq=Mh_su%R?|S zL6el>(n?bE9zn_M(S9^gW27?xFT)M!Of9+zv6h~G6gebhXG31LN%wpUHn4qL&~R0s z=XYR7l3Q08dF+9A$UoI%bY-nD(o4V%SAWh4NZdL^M8h4uQcbc$-MmIqbxzPcEw>cT7E7JkID{T9mw z{9F@eDJI>S<74!yKi!k;+0=&CP{kYaiNwg&x90hEf6dRm2UJ~MS@R0ul>uB0I{7@F zEeR_$u%{abp`d@N(aEYfc0Y*TZ|S-TK2!5`f50s<-*jQD3b6D(WY$94v;3%;viqp~ zi`^TjEX#My24bSATfqp@x%*t?1g&dvMhLDK5dCy@)l@!^Lexc#X6oFco!QjuSKQM* z)IAZ{{x3~lKNrKI!?RmAhm=e?GE;VrUr_t}w+T|6)%RdonL(aypP|&?#jpc9&B4Dz z9&O{&tC-`v+BII1{0li_^xI~~Pc-RJS&g;6Z?EBo`v`St!*q0uDcs`5WiM4%5OyYF zAbN^j#`J-jJ`!f9?ck4$nxRu|pY82M1LI{Hr&De%sfS569`gH8k5l}H)tINYlwJZ` zNoU!8CO9W!HHK|mrY}H^3k7+HbQ}&M!F*a7uoh%xdN~;~D!^M6rve_jXG~*+?x#O* zS613aR+h?(@@6=N#`UA$qHgOPwqjGgs@gUml(eo>6o&KE?9)1n?!Hs4)nr|PZt#`X zU%K)R)@^*B^PC@a^ZT-_Ru}9Aiqy+F3}=CESs^C6Z`tr`im3cKK}~N*xPC`gD*FK> zKWJ~X-Wt4689P^8diZDAnO`>!+5;qCmI zD7@p;-Hd_RoPPE3QjlzEU_w^^ie2h%WKmG5&*OhMU;>UxU&IU^hjks_EvM)PUqjdC zO>XsC!R}bs$e_IylhAc?qSo&Al85P-fNlSA2s{B@PsoPyC^#RnGbZuQo{wV6J&t^) z{CSsMhjlHSMcN~vL&W)kZ(^b literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/icon_right_sanjiao.png b/app/src/main/res/mipmap-xxhdpi/icon_right_sanjiao.png new file mode 100644 index 0000000000000000000000000000000000000000..678deb7628ee2d37c1fe1e224578837d546d7886 GIT binary patch literal 3225 zcmX9>dmvP48-LGn)ETK}2DxW6QHz@1Sc>{p5$6g0J&zK|9frbpfR$Ah)E29>r>G$UN=m&HNiYyeO#-F5|QAm+q44hio)%D`)t{*;6c%HFMaXahXXQo)Q=P_ACI`F(=qi=m17Nd% zqkQ1Yr^%(7Z_COuNJG>^Y3OOG_aJ|6YB(x3_Dk`8)wl%mI(AEq9E+MCd2{-6|5((y zA8ZQwhqn6naEDCde^s0s8@J_Wky5F2ut5={&gGLz=-lZM@tCYZNPckS{RfGwul*MV zAQ}{FK8BM{L*4|bj*8_wi7#|3`kd}r8cdse%j zLgjcA_(uk_UgJH__CqI?G;b?&`b@~XgsborjP7*>aRmpCHtN|Cfa|^(l_=yfPCACe zxqmj>w$SDzQ7!)K1RS=yA*F^ZP>RX6gy-~^dv@gi^Zf?JB-s)8+j!j!Qf1{7Ek~^F-StZAU=$z|h8kXGbe82=@QT}nw;|k*Pe!P5Et` zO4Nk6=PpEb*mok3`B3YS3aPbYvhJpkr(WxsiZi_Yl2pT3+p#aX_7tA-#7waUrOPp9 zQW58M_&s>>*h!-Jw&-U%Sv2RdK7!?>*}t$yg>(qWs812{Skm($G>&a;_vA@do1Qr` z+Bx-FTZ59}DtZ-%mJlItBC#}Vhra?c+Ri@qlq<-r^kb(0Sf1Ph?P>%kxADBn^+*M*eoUT+Mr!{XMi5Cu$>Kw4L`RvSc7OnLw(Cvv2 zJSO#dER7{ooM#& z3LdY&RBi<0%;~TY7n$hrjRHbQfXDvnYE?9!?^zP0{bRvEhAGdg_HkMAFOs;eDK#RNIBo(_AHlF|TQOeJc&^cy-;`D?quW0xD zHu3K@G%Q5dKkoB#08*d6^5n(RVg7)zE_6_P1zTjU*o^T7^#-g9UjKldo&?uF&DKK#5Yq3vYaG)FxGziq9aG#WTArgQabKxVAb+7 zJE$C8+tRfx(O7ws8<N^n}G80{Q7$#u8UcIJp}aVta_mF9*+xBl%lpHqOZ zu-a`K!sc&lezh7GY2+#D!fAGL2JRXlCyPdZj)0B>l8C-sU>P9$&srF7y{Gsii`a6c zF~XiB9!w0J-GsTPOI8>_M}z9m{C&&Ue|Qy)SYONm(_8W?H?a8+CeR;l%rh9)Vy8@!d)arcM{MRw>*%`~+uRO}; zKk~GE;sCT6^P>SUix=e=K-9$9&{^L_`)R8k1t6d27ooylVhL49mR&|&Vm4p(jrjzX z)adXixIR|6;lJgZ?7)Yhz7g*75)|I;1<3A;eu8YoJpBN*P28Q{x*Vn{PV#x|qh9Nzi&$ zJQj&ZU%rF$E;ID*!=%#-QX}_*KiZ<$bG@>rnCVv!tRi2^t-Qy6)BX2>w0W(}Ua}if z(cK5jpoy`U*dK(Axlwp`XKLhE6#M4C#w40kZPFS!^LXc}bx6DLMm9e~CuvXs5}A>) zqU`(7GnCCw)5$IsfHfI@V*a-vRnHBqv;pj;_$l25s26mmsGD-cZjkiL zWnh{Z(M=}Hp+1-jl*rbucz>@H;vt2@dKFjAn^ej$3m}NjN0>sm-N9IjdZN(6@SG}dl zcJc6eer1TBb?GZAgOHh4%OR_AX96e*{+6kevg1lnPO%NyOO~#U&RhblU+V(P1Jj>n zzyUoMzAV6{?&~`FQ#yGA!-vj0_%1pYW~>cnaKPZLlCi?!pa(66C^oeX2DlY6a^nzA zB_~)l@~ZmKPsUInSy}lmUN;&U$-{4Nf;;I_{`_zX<+cf6^QS#3d0cd(5+wY{zVC_; zV+U2>t?RL<3_XaJ;?Vkb)pzA4=tcKt{zb zf8bmH6?lDkd>n=|{DV!nB29QKiCtWLlsRR4Y`5s5QmIxB{MP_`_qaNg?dA#o2dJ-p AKL7v# literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/icon_selected.png b/app/src/main/res/mipmap-xxhdpi/icon_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..192e6a914339e3a2b5934d1f927b24687e840539 GIT binary patch literal 3732 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/icon_unselected.png b/app/src/main/res/mipmap-xxhdpi/icon_unselected.png new file mode 100644 index 0000000000000000000000000000000000000000..185a316057193c2c5462307ea2080eac0922a1a2 GIT binary patch literal 3157 zcmeH~>sM1(7QpX4CNwW0D356k5FayfwSiDYMT#U^TxcuEvW$R64bxU;iUWzDWQruY zI)&w$0UT|sRUphbpa??5RuL?@h!C=5k|ilcl$gYb5d$RQVQ$Fd&YchQU-0QX_Bm_s z^ZT-Y=WJ$1+H%@^Gzfy0@7|TV4}xG~3PY42Vh|p`e)NB<;(cj5pf(+A5`q{ZyHmGk zNe@qtS4o})MUX@d=ZoJzYlL&RPkl0#^@nTVUuOotOUwyMHnOst;cD`h58S12j40NiPa*DsSV+W1X>>hk9P z;JUetIBWBiX(YbcU*GMife_`2OZ2=r#9>G%FMIUw>`2u2AV%Y|x()?mHS^m@l<~u& zxHCnD1b^W2V2BcC05lX3noD zo30`^Guf&h^wZypPwl}bT}SuQ%-Hp!lm))~1zs|J^_vBGN!mJrd7XH&+31p?eH@B1 z3>|J(m&$NSD3(tZu17fTWzjUz?XgqIDYIpP3tg}9{4a|Rg1*Ky%4V1WXy)-c zyg$Ekl=Wnk$#%Nw!p^Wn;nNrz@#-06`x_(f2+;?T3RkPd5n}0?7+&ofU&p+w_aOJn zAQ;#wTqFHb3{^)K&&-?Z@Dm-9FwjD&Eqlo4Kj$BW>b>pf&z@oCq>C)YaH)02M(h{U zSC12!$bIxdBT=(V8gK-OQkZFMRTKI^<8#iQHT#$!+vkIZHrwWr18q&yt zb~eZAt1l$*x>paJUW zXMa;34bTniE!I*2O9Yk(ED=~DutWf9MGNTWzJ&DBvG4Y9 z1fp2vQ?he3p5ch*b(kFC=mBkFFcMB8gh(S{sZ&1s#ouWx#90*<|80OJq#N#rzdcR? zr2WjC^@?r@(chy8FCs!4(hZIerY4vqN-LXCiIf^EHZf-RJrhEFUvE6aO*H3=|G)aA z@UAUxA%yIdu{53yW-ZSR@88wGn$o&XWh`{t4qJ=i`>QmP!b%(2yg}3`W>pCGi7boq zC(|dbi80uCmEa<*-8J+(RXsX9i6^8hgUMpc1~eD_dh6B|$Q3&GXRpKU?Yq$P89a0m zo-0>yl+) zjzmvI#LM@+)>fW=#e3>-$B|`8!OJME9FaV^v>mw+48uG z&*laR$-P1u;>~*8@;2#XWia+)VzD1cvp}&S+0*jZEuMccRtwl`#P?J2`C(@y-JD>? zBo@6bh2tFF?%N837OF6LLf+FqLUz7BCJNa5ibI86Gda`OPOt$f7!-AVh~EIxlFjjI z%(j;i_#FF6200EE #FF3700B3 #FF03DAC5 + #052eba #FF018786 #FF000000 #FFFFFFFF #666 + #333 + #999 + #ccc #101010 #052EBA + #33052EBA #00000000 #55cccccc \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 9b31648..125210e 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -16,4 +16,8 @@ + + \ No newline at end of file