From 8fa28066f6510a496eb785d794e4a3a618c9d3ef Mon Sep 17 00:00:00 2001 From: lianlilong <409813353@qq.com> Date: Mon, 29 Apr 2024 21:39:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E6=A1=86=E6=9E=B6=E6=90=AD?= =?UTF-8?q?=E5=BB=BA=EF=BC=8C=E5=8E=9FAPP=E6=95=B0=E6=8D=AE=E5=A5=97?= =?UTF-8?q?=E9=A4=90=E6=A8=A1=E5=9D=97=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 16 + app/.gitignore | 1 + app/build.gradle | 59 ++ app/proguard-rules.pro | 21 + app/src/main/AndroidManifest.xml | 58 ++ .../java/com/police/union/MainActivity.java | 118 +++ .../java/com/police/union/RequestClient.java | 466 +++++++++ .../union/chat/fragment/ChatFragment.java | 23 + .../union/home/activity/ApplyActivity.java | 293 ++++++ .../home/activity/ApplyDetailActivity.java | 71 ++ .../union/home/activity/DataActivity.java | 382 ++++++++ .../activity/KeyPersonDetailActivity.java | 173 ++++ .../PoliceEmergencyDetailActivity.java | 217 +++++ .../activity/QueryApplyResultActivity.java | 58 ++ .../union/home/adapter/KeyPersonAdapter.java | 35 + .../home/adapter/MineApplyListAdapter.java | 22 + .../home/adapter/PoliceEmergencyAdapter.java | 23 + .../union/home/fragment/HomeFragment.java | 31 + .../com/police/union/home/model/Apply.java | 61 ++ .../police/union/home/model/ApplyDept.java | 81 ++ .../police/union/home/model/ApplyDetail.java | 71 ++ .../police/union/home/model/ApplyPerson.java | 24 + .../police/union/home/model/ApplyType.java | 33 + .../police/union/home/model/DataCount.java | 49 + .../union/home/model/DetailQueryResult.java | 15 + .../police/union/home/model/KeyPerson.java | 86 ++ .../union/home/model/KeyPersonDetail.java | 289 ++++++ .../union/home/model/PoliceEmergency.java | 56 ++ .../home/model/PoliceEmergencyDetail.java | 267 ++++++ .../home/viewmodel/ApplyPostViewModel.java | 109 +++ .../home/viewmodel/ApplyResultViewModel.java | 43 + .../union/home/viewmodel/ApplyViewModel.java | 127 +++ .../union/home/viewmodel/DataViewModel.java | 357 +++++++ .../union/home/viewmodel/DetailViewModel.java | 54 ++ .../union/personal/fragment/MineFragment.java | 33 + .../police/union/widget/WaterMarkInfo.java | 208 ++++ .../police/union/widget/WaterMarkManager.java | 188 ++++ .../police/union/widget/WaterMarkView.java | 335 +++++++ app/src/main/res/drawable/all_10_ccc_bg.xml | 6 + app/src/main/res/drawable/all_15_fff_bg.xml | 6 + app/src/main/res/drawable/all_2_4b8e01_bg.xml | 6 + app/src/main/res/drawable/all_2_de7900_bg.xml | 6 + .../main/res/drawable/all_2_selected_bg.xml | 6 + app/src/main/res/drawable/all_3_ccc_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 + app/src/main/res/drawable/all_7_fff_bg.xml | 6 + .../main/res/drawable/all_7_line_ccc_bg.xml | 6 + app/src/main/res/drawable/all_7_main_bg.xml | 6 + app/src/main/res/drawable/b6f7e9_10_bg.xml | 7 + .../main/res/drawable/border_f7933b_6_bg.xml | 9 + app/src/main/res/drawable/f7eab6_10_bg.xml | 7 + .../main/res/drawable/f7f7f7_top_20_bg.xml | 8 + app/src/main/res/drawable/f9e2e2_10_bg.xml | 7 + app/src/main/res/drawable/fbe5ca_10_bg.xml | 7 + .../main/res/drawable/right_7_052eba_bg.xml | 7 + app/src/main/res/drawable/top_10_f7_bg.xml | 7 + app/src/main/res/drawable/white_round_bg.xml | 5 + app/src/main/res/drawable/white_top_20_bg.xml | 8 + app/src/main/res/layout/activity_apply.xml | 95 ++ .../main/res/layout/activity_apply_detail.xml | 213 +++++ app/src/main/res/layout/activity_data.xml | 365 +++++++ .../res/layout/activity_key_person_detail.xml | 896 ++++++++++++++++++ app/src/main/res/layout/activity_main.xml | 154 +++ .../activity_police_emergency_detail.xml | 82 ++ .../layout/activity_query_apply_result.xml | 49 + .../main/res/layout/dialog_dept_selector.xml | 40 + app/src/main/res/layout/dialog_selector.xml | 25 + app/src/main/res/layout/dropdown_layout.xml | 31 + app/src/main/res/layout/dropdown_layout2.xml | 41 + app/src/main/res/layout/dropdown_layout3.xml | 52 + app/src/main/res/layout/dropdown_layout4.xml | 77 ++ app/src/main/res/layout/dropdown_layout5.xml | 66 ++ app/src/main/res/layout/fragment_chat.xml | 16 + app/src/main/res/layout/fragment_home.xml | 289 ++++++ app/src/main/res/layout/fragment_mine.xml | 149 +++ ...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 | 148 +++ .../main/res/layout/item_apply_fragment_2.xml | 185 ++++ .../main/res/layout/item_dialog_selector.xml | 18 + app/src/main/res/layout/item_key_person.xml | 131 +++ app/src/main/res/layout/item_mine_apply.xml | 143 +++ .../main/res/layout/item_police_emergency.xml | 142 +++ app/src/main/res/layout/item_select_dept.xml | 42 + app/src/main/res/layout/view_water_mark.xml | 4 + app/src/main/res/mipmap-xxhdpi/back.png | Bin 0 -> 688 bytes app/src/main/res/mipmap-xxhdpi/baojing.png | Bin 0 -> 604 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 23065 bytes app/src/main/res/mipmap-xxhdpi/icon_14.png | Bin 0 -> 598 bytes app/src/main/res/mipmap-xxhdpi/icon_aj.png | Bin 0 -> 1677 bytes .../mipmap-xxhdpi/icon_apply_detail_query.png | Bin 0 -> 4491 bytes .../res/mipmap-xxhdpi/icon_chat_normal.png | Bin 0 -> 1276 bytes .../res/mipmap-xxhdpi/icon_chat_selected.png | Bin 0 -> 949 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 app/src/main/res/mipmap-xxhdpi/icon_fnsq.png | Bin 0 -> 627 bytes .../res/mipmap-xxhdpi/icon_home_normal.png | Bin 0 -> 4825 bytes .../res/mipmap-xxhdpi/icon_home_selected.png | Bin 0 -> 3849 bytes app/src/main/res/mipmap-xxhdpi/icon_jq.png | Bin 0 -> 1482 bytes .../main/res/mipmap-xxhdpi/icon_jq_normal.png | Bin 0 -> 1705 bytes .../res/mipmap-xxhdpi/icon_jq_selected.png | Bin 0 -> 1684 bytes .../main/res/mipmap-xxhdpi/icon_main_bg.png | Bin 0 -> 459347 bytes .../mipmap-xxhdpi/icon_personal_normal.png | Bin 0 -> 2165 bytes .../mipmap-xxhdpi/icon_personal_selected.png | Bin 0 -> 1237 bytes app/src/main/res/mipmap-xxhdpi/icon_query.png | Bin 0 -> 6314 bytes .../res/mipmap-xxhdpi/icon_right_sanjiao.png | Bin 0 -> 3225 bytes .../main/res/mipmap-xxhdpi/icon_selected.png | Bin 0 -> 3732 bytes app/src/main/res/mipmap-xxhdpi/icon_sjtc.png | Bin 0 -> 1184 bytes .../res/mipmap-xxhdpi/icon_unselected.png | Bin 0 -> 3157 bytes app/src/main/res/mipmap-xxhdpi/icon_wdfn.png | Bin 0 -> 1393 bytes app/src/main/res/mipmap-xxhdpi/icon_xjxc.png | Bin 0 -> 1362 bytes app/src/main/res/mipmap-xxhdpi/icon_xssp.png | Bin 0 -> 2222 bytes app/src/main/res/mipmap-xxhdpi/icon_ycyj.png | Bin 0 -> 1513 bytes app/src/main/res/mipmap-xxhdpi/icon_yj.png | Bin 0 -> 1833 bytes app/src/main/res/mipmap-xxhdpi/icon_yq.png | Bin 0 -> 1177 bytes app/src/main/res/mipmap-xxhdpi/jaintou.png | Bin 0 -> 344 bytes .../mipmap-xxhdpi/key_person_icon_normal.png | Bin 0 -> 1834 bytes .../key_person_icon_selected.png | Bin 0 -> 1834 bytes app/src/main/res/mipmap-xxhdpi/person.png | Bin 0 -> 695 bytes app/src/main/res/mipmap-xxhdpi/photo.png | Bin 0 -> 23229 bytes app/src/main/res/mipmap-xxhdpi/search.png | Bin 0 -> 1039 bytes app/src/main/res/mipmap-xxhdpi/wenjianjia.png | Bin 0 -> 865 bytes .../res/mipmap-xxhdpi/wenjianjia_icon.png | Bin 0 -> 863 bytes app/src/main/res/values-night/themes.xml | 20 + app/src/main/res/values/attrs.xml | 19 + app/src/main/res/values/colors.xml | 26 + app/src/main/res/values/strings.xml | 3 + app/src/main/res/values/themes.xml | 20 + app/src/main/res/xml/backup_rules.xml | 13 + .../main/res/xml/data_extraction_rules.xml | 19 + .../main/res/xml/network_security_config.xml | 8 + base/.gitignore | 1 + base/build.gradle | 32 + base/src/main/AndroidManifest.xml | 4 + base/src/main/java/com/police/base/App.java | 26 + .../java/com/police/base/BaseActivity.java | 15 + .../java/com/police/base/BaseFragment.java | 6 + build.gradle | 5 + gradle.properties | 22 + gradle/libs.versions.toml | 23 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 185 ++++ gradlew.bat | 89 ++ network/.gitignore | 1 + network/build.gradle | 35 + network/src/main/AndroidManifest.xml | 4 + .../com/police/network/BaseRequestClient.java | 244 +++++ .../java/com/police/network/Constants.java | 99 ++ .../com/police/network/CustomCallBack.java | 12 + .../com/police/network/UaCredentialApi.java | 307 ++++++ .../police/network/model/ResourceList.java | 42 + .../police/network/model/ThirdAppInfo.java | 65 ++ .../police/network/model/UserCredential.java | 174 ++++ .../GetKeyPersonDetailParams.java | 45 + .../requestparams/GetKeyPersonListParams.java | 89 ++ .../GetKeyPersonMessageCountParams.java | 80 ++ .../GetOrgKeyPersonListParams.java | 81 ++ .../GetPoliceEmergencyDetailParams.java | 45 + .../GetPoliceEmergencyListParams.java | 81 ++ .../network/requestparams/RequestParams.java | 156 +++ .../network/requestparams/ResponseParams.java | 96 ++ settings.gradle | 43 + utils/.gitignore | 1 + utils/build.gradle | 33 + utils/src/main/AndroidManifest.xml | 4 + .../main/java/com/police/utils/UiUtils.java | 110 +++ 173 files changed, 11421 insertions(+) create mode 100644 .gitignore create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/police/union/MainActivity.java create mode 100644 app/src/main/java/com/police/union/RequestClient.java create mode 100644 app/src/main/java/com/police/union/chat/fragment/ChatFragment.java create mode 100644 app/src/main/java/com/police/union/home/activity/ApplyActivity.java create mode 100644 app/src/main/java/com/police/union/home/activity/ApplyDetailActivity.java create mode 100644 app/src/main/java/com/police/union/home/activity/DataActivity.java create mode 100644 app/src/main/java/com/police/union/home/activity/KeyPersonDetailActivity.java create mode 100644 app/src/main/java/com/police/union/home/activity/PoliceEmergencyDetailActivity.java create mode 100644 app/src/main/java/com/police/union/home/activity/QueryApplyResultActivity.java create mode 100644 app/src/main/java/com/police/union/home/adapter/KeyPersonAdapter.java create mode 100644 app/src/main/java/com/police/union/home/adapter/MineApplyListAdapter.java create mode 100644 app/src/main/java/com/police/union/home/adapter/PoliceEmergencyAdapter.java create mode 100644 app/src/main/java/com/police/union/home/fragment/HomeFragment.java create mode 100644 app/src/main/java/com/police/union/home/model/Apply.java create mode 100644 app/src/main/java/com/police/union/home/model/ApplyDept.java create mode 100644 app/src/main/java/com/police/union/home/model/ApplyDetail.java create mode 100644 app/src/main/java/com/police/union/home/model/ApplyPerson.java create mode 100644 app/src/main/java/com/police/union/home/model/ApplyType.java create mode 100644 app/src/main/java/com/police/union/home/model/DataCount.java create mode 100644 app/src/main/java/com/police/union/home/model/DetailQueryResult.java create mode 100644 app/src/main/java/com/police/union/home/model/KeyPerson.java create mode 100644 app/src/main/java/com/police/union/home/model/KeyPersonDetail.java create mode 100644 app/src/main/java/com/police/union/home/model/PoliceEmergency.java create mode 100644 app/src/main/java/com/police/union/home/model/PoliceEmergencyDetail.java create mode 100644 app/src/main/java/com/police/union/home/viewmodel/ApplyPostViewModel.java create mode 100644 app/src/main/java/com/police/union/home/viewmodel/ApplyResultViewModel.java create mode 100644 app/src/main/java/com/police/union/home/viewmodel/ApplyViewModel.java create mode 100644 app/src/main/java/com/police/union/home/viewmodel/DataViewModel.java create mode 100644 app/src/main/java/com/police/union/home/viewmodel/DetailViewModel.java create mode 100644 app/src/main/java/com/police/union/personal/fragment/MineFragment.java create mode 100644 app/src/main/java/com/police/union/widget/WaterMarkInfo.java create mode 100644 app/src/main/java/com/police/union/widget/WaterMarkManager.java create mode 100644 app/src/main/java/com/police/union/widget/WaterMarkView.java create mode 100644 app/src/main/res/drawable/all_10_ccc_bg.xml create mode 100644 app/src/main/res/drawable/all_15_fff_bg.xml create mode 100644 app/src/main/res/drawable/all_2_4b8e01_bg.xml create mode 100644 app/src/main/res/drawable/all_2_de7900_bg.xml create mode 100644 app/src/main/res/drawable/all_2_selected_bg.xml create mode 100644 app/src/main/res/drawable/all_3_ccc_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_fff_bg.xml create mode 100644 app/src/main/res/drawable/all_7_line_ccc_bg.xml create mode 100644 app/src/main/res/drawable/all_7_main_bg.xml create mode 100644 app/src/main/res/drawable/b6f7e9_10_bg.xml create mode 100644 app/src/main/res/drawable/border_f7933b_6_bg.xml create mode 100644 app/src/main/res/drawable/f7eab6_10_bg.xml create mode 100644 app/src/main/res/drawable/f7f7f7_top_20_bg.xml create mode 100644 app/src/main/res/drawable/f9e2e2_10_bg.xml create mode 100644 app/src/main/res/drawable/fbe5ca_10_bg.xml create mode 100644 app/src/main/res/drawable/right_7_052eba_bg.xml create mode 100644 app/src/main/res/drawable/top_10_f7_bg.xml create mode 100644 app/src/main/res/drawable/white_round_bg.xml create mode 100644 app/src/main/res/drawable/white_top_20_bg.xml create mode 100644 app/src/main/res/layout/activity_apply.xml create mode 100644 app/src/main/res/layout/activity_apply_detail.xml create mode 100644 app/src/main/res/layout/activity_data.xml create mode 100644 app/src/main/res/layout/activity_key_person_detail.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/activity_police_emergency_detail.xml create mode 100644 app/src/main/res/layout/activity_query_apply_result.xml create mode 100644 app/src/main/res/layout/dialog_dept_selector.xml create mode 100644 app/src/main/res/layout/dialog_selector.xml create mode 100644 app/src/main/res/layout/dropdown_layout.xml create mode 100644 app/src/main/res/layout/dropdown_layout2.xml create mode 100644 app/src/main/res/layout/dropdown_layout3.xml create mode 100644 app/src/main/res/layout/dropdown_layout4.xml create mode 100644 app/src/main/res/layout/dropdown_layout5.xml create mode 100644 app/src/main/res/layout/fragment_chat.xml create mode 100644 app/src/main/res/layout/fragment_home.xml create mode 100644 app/src/main/res/layout/fragment_mine.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_apply_fragment_1.xml create mode 100644 app/src/main/res/layout/item_apply_fragment_2.xml create mode 100644 app/src/main/res/layout/item_dialog_selector.xml create mode 100644 app/src/main/res/layout/item_key_person.xml create mode 100644 app/src/main/res/layout/item_mine_apply.xml create mode 100644 app/src/main/res/layout/item_police_emergency.xml create mode 100644 app/src/main/res/layout/item_select_dept.xml create mode 100644 app/src/main/res/layout/view_water_mark.xml create mode 100644 app/src/main/res/mipmap-xxhdpi/back.png create mode 100644 app/src/main/res/mipmap-xxhdpi/baojing.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_14.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_aj.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_apply_detail_query.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_chat_normal.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_chat_selected.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_fnsq.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_home_normal.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_home_selected.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_jq.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_jq_normal.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_jq_selected.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_main_bg.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_personal_normal.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_personal_selected.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_query.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_sjtc.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_unselected.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_wdfn.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_xjxc.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_xssp.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_ycyj.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_yj.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_yq.png create mode 100644 app/src/main/res/mipmap-xxhdpi/jaintou.png create mode 100644 app/src/main/res/mipmap-xxhdpi/key_person_icon_normal.png create mode 100644 app/src/main/res/mipmap-xxhdpi/key_person_icon_selected.png create mode 100644 app/src/main/res/mipmap-xxhdpi/person.png create mode 100644 app/src/main/res/mipmap-xxhdpi/photo.png create mode 100644 app/src/main/res/mipmap-xxhdpi/search.png create mode 100644 app/src/main/res/mipmap-xxhdpi/wenjianjia.png create mode 100644 app/src/main/res/mipmap-xxhdpi/wenjianjia_icon.png create mode 100644 app/src/main/res/values-night/themes.xml create mode 100644 app/src/main/res/values/attrs.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/themes.xml create mode 100644 app/src/main/res/xml/backup_rules.xml create mode 100644 app/src/main/res/xml/data_extraction_rules.xml create mode 100644 app/src/main/res/xml/network_security_config.xml create mode 100644 base/.gitignore create mode 100644 base/build.gradle create mode 100644 base/src/main/AndroidManifest.xml create mode 100644 base/src/main/java/com/police/base/App.java create mode 100644 base/src/main/java/com/police/base/BaseActivity.java create mode 100644 base/src/main/java/com/police/base/BaseFragment.java create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/libs.versions.toml create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 network/.gitignore create mode 100644 network/build.gradle create mode 100644 network/src/main/AndroidManifest.xml create mode 100644 network/src/main/java/com/police/network/BaseRequestClient.java create mode 100644 network/src/main/java/com/police/network/Constants.java create mode 100644 network/src/main/java/com/police/network/CustomCallBack.java create mode 100644 network/src/main/java/com/police/network/UaCredentialApi.java create mode 100644 network/src/main/java/com/police/network/model/ResourceList.java create mode 100644 network/src/main/java/com/police/network/model/ThirdAppInfo.java create mode 100644 network/src/main/java/com/police/network/model/UserCredential.java create mode 100644 network/src/main/java/com/police/network/requestparams/GetKeyPersonDetailParams.java create mode 100644 network/src/main/java/com/police/network/requestparams/GetKeyPersonListParams.java create mode 100644 network/src/main/java/com/police/network/requestparams/GetKeyPersonMessageCountParams.java create mode 100644 network/src/main/java/com/police/network/requestparams/GetOrgKeyPersonListParams.java create mode 100644 network/src/main/java/com/police/network/requestparams/GetPoliceEmergencyDetailParams.java create mode 100644 network/src/main/java/com/police/network/requestparams/GetPoliceEmergencyListParams.java create mode 100644 network/src/main/java/com/police/network/requestparams/RequestParams.java create mode 100644 network/src/main/java/com/police/network/requestparams/ResponseParams.java create mode 100644 settings.gradle create mode 100644 utils/.gitignore create mode 100644 utils/build.gradle create mode 100644 utils/src/main/AndroidManifest.xml create mode 100644 utils/src/main/java/com/police/utils/UiUtils.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d4c3a57 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties +/.idea/ diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..2c18264 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,59 @@ +plugins { + alias(libs.plugins.androidApplication) +} + +android { + namespace 'com.police.union' + compileSdk 34 + + defaultConfig { + applicationId "com.police.policedatasystem" + minSdk 24 + targetSdk 34 + versionCode 10000 + versionName "1.0" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + buildFeatures { + compose true + viewBinding true + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + + implementation 'androidx.appcompat:appcompat:1.0.0' + implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4' + implementation 'androidx.recyclerview:recyclerview:1.3.2' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' +// implementation 'com.squareup.retrofit2:adapter-okhttp3:2.9.0' // OkHttp适配器 + implementation 'com.scwang.smart:refresh-layout-kernel:2.0.3' + implementation 'com.scwang.smart:refresh-footer-classics:2.0.3'//经典刷新脚部局 + implementation 'com.scwang.smart:refresh-header-classics:2.0.3'//经典刷新头布局 +// implementation 'io.reactivex:rxjava:1.3.8' +// implementation 'io.reactivex:rxandroid:1.2.1' + implementation 'com.squareup.retrofit2:retrofit:2.9.0' // 根据需要选择合适的版本 + implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // 如果你使用 Gson 进行 JSON 转换 + implementation 'com.squareup.okhttp3:logging-interceptor:4.7.2' +// 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 'androidx.navigation:navigation-fragment:2.5.3' + implementation 'androidx.navigation:navigation-ui:2.5.3' + implementation 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1' + implementation libs.activity + implementation project(':base') + implementation project(':network') + implementation project(':utils') +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..cec13f4 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/police/union/MainActivity.java b/app/src/main/java/com/police/union/MainActivity.java new file mode 100644 index 0000000..79c7131 --- /dev/null +++ b/app/src/main/java/com/police/union/MainActivity.java @@ -0,0 +1,118 @@ +package com.police.union; + +import static com.police.network.UaCredentialApi.ACTION_SUFFIX_UA_LOGIN; +import static com.police.network.UaCredentialApi.ACTION_UA_LOGOUT; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Bundle; +import android.text.TextUtils; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentTransaction; + +import com.police.base.BaseActivity; +import com.police.network.Constants; +import com.police.union.chat.fragment.ChatFragment; +import com.police.union.databinding.ActivityMainBinding; +import com.police.union.home.fragment.HomeFragment; +import com.police.union.personal.fragment.MineFragment; + +public class MainActivity extends BaseActivity { + private ActivityMainBinding binding; + + private final Fragment[] fragments = {new ChatFragment(), new HomeFragment(), new MineFragment()}; + private RequestClient requestClient; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityMainBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + initView(); + requestClient = RequestClient.instance(); + registerBroadcastReceiver(); + requestClient.init(() -> { + binding.wmWm.setTextSize(50); + binding.wmWm.setText(Constants.SFZH); + }); + } + + private void initView() { + changeFragment(fragments[0]); + binding.llChat.setOnClickListener(view -> { + changeSelectView(0); + changeFragment(fragments[0]); + }); + binding.llHome.setOnClickListener(view -> { + changeSelectView(1); + changeFragment(fragments[1]); + }); + binding.llPerson.setOnClickListener(view -> { + changeSelectView(2); + changeFragment(fragments[2]); + }); + } + + private void changeSelectView(int index) { + binding.ivChat.setImageResource(index == 0 ? R.mipmap.icon_chat_selected : R.mipmap.icon_chat_normal); + binding.tvChat.setTextColor(getColor(index == 0 ? R.color.main_color : R.color.normal_color)); + binding.ivHome.setImageResource(index == 1 ? R.mipmap.icon_home_selected : R.mipmap.icon_home_normal); + binding.tvHome.setTextColor(getColor(index == 1 ? R.color.main_color : R.color.normal_color)); + binding.ivPerson.setImageResource(index == 2 ? R.mipmap.icon_personal_selected : R.mipmap.icon_personal_normal); + binding.tvPerson.setTextColor(getColor(index == 2 ? R.color.main_color : R.color.normal_color)); + } + + private void changeFragment(Fragment newFragment) { + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + transaction.replace(binding.fcView.getId(), newFragment); + transaction.commit(); + } + + private void registerBroadcastReceiver() { + IntentFilter intentFilter = new IntentFilter(); + String pkgName = getPackageName(); + /**添加登录成功事件监听 + * 当第一次登录,调用【IF-UA-SDK-01】接口可能返回"票据不存在",此时需要注册监听此事件, + * 当登录成功后,接收到此事件即可重新调用【IF-UA-SDK-01】获取相关票据 + * */ + intentFilter.addAction(pkgName + ACTION_SUFFIX_UA_LOGIN); + + /**增加登出事件监听 + * 当UA主动账户退出时会发送该事件,此时已经登录应用可以根据自身业务实施退出 + * */ + intentFilter.addAction(pkgName + ACTION_UA_LOGOUT); + registerReceiver(uaLoginInReceiver, intentFilter); + } + + private final BroadcastReceiver uaLoginInReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (TextUtils.isEmpty(action)) { + return; + } + if (action.contains(ACTION_SUFFIX_UA_LOGIN)) { + //再次获取票据 + if (requestClient != null) { + requestClient.init(() -> { + }); + } + return; + } + if (action.contains(ACTION_UA_LOGOUT)) { + //程序退出 + startActivity(new Intent(MainActivity.this, MainActivity.class)); + finish(); + } + } + }; + + @Override + protected void onDestroy() { + super.onDestroy(); + unregisterReceiver(uaLoginInReceiver); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/union/RequestClient.java b/app/src/main/java/com/police/union/RequestClient.java new file mode 100644 index 0000000..b40262c --- /dev/null +++ b/app/src/main/java/com/police/union/RequestClient.java @@ -0,0 +1,466 @@ +package com.police.union; + +import androidx.annotation.NonNull; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.police.network.BaseRequestClient; +import com.police.network.Constants; +import com.police.network.CustomCallBack; +import com.police.network.requestparams.GetKeyPersonDetailParams; +import com.police.network.requestparams.GetKeyPersonListParams; +import com.police.network.requestparams.GetKeyPersonMessageCountParams; +import com.police.network.requestparams.GetOrgKeyPersonListParams; +import com.police.network.requestparams.GetPoliceEmergencyDetailParams; +import com.police.network.requestparams.GetPoliceEmergencyListParams; +import com.police.union.home.model.Apply; +import com.police.union.home.model.ApplyDept; +import com.police.union.home.model.ApplyDetail; +import com.police.union.home.model.ApplyPerson; +import com.police.union.home.model.ApplyType; +import com.police.union.home.model.DataCount; +import com.police.union.home.model.DetailQueryResult; +import com.police.union.home.model.KeyPerson; +import com.police.union.home.model.KeyPersonDetail; +import com.police.union.home.model.PoliceEmergency; +import com.police.union.home.model.PoliceEmergencyDetail; + +import java.util.HashMap; +import java.util.List; + +import okhttp3.Call; + +public class RequestClient extends BaseRequestClient { + + private RequestClient() { + } + + private static final class RequestClientHolder { + static final RequestClient requestClient = new RequestClient(); + } + + public static RequestClient instance() { + return RequestClientHolder.requestClient; + } + + /** + * 获取重点人 + * + * @param params 参数对象 + * @param callback 回调函数 + */ + public void getKeyPerson(GetKeyPersonListParams params, CustomCallBack> callback) { + params.setJybh(Constants.USER_ID); + params.setSfhm(Constants.SFZH); + params.setPageSize(Constants.PAGE_SIZE + ""); + request(Constants.KEY_PERSON_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 keyPersonList = new Gson().fromJson(value, new TypeToken>() { + }.getType()); + callback.onSuccess(keyPersonList); + } + }); + } + + /** + * 获取组织重点人数据 + * + * @param params 搜索关键字姓名 + */ + public void getOrgKeyPerson(GetOrgKeyPersonListParams params, CustomCallBack> callback) { + params.setSfhm(Constants.SFZH); + params.setDept(Constants.USER_ORG_ID); + params.setPageSize(Constants.PAGE_SIZE + ""); + 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); + } + + @Override + public void onSuccess(String value) { + List keyPersonList = new Gson().fromJson(value, new TypeToken>() { + }.getType()); + callback.onSuccess(keyPersonList); + } + }); + } + + + /** + * 获取重点人详情数据 + * + * @param str 身份证号 + */ + public void keyPersonDetail(String str, CustomCallBack callBack) { + GetKeyPersonDetailParams params = new GetKeyPersonDetailParams(); + params.setSfzh(str);// params.setSfzh("220104197307276911"); + params.setSfhm(Constants.SFZH); + request(Constants.KEY_PERSON_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) { + KeyPersonDetail keyPersonList = new Gson().fromJson(value, new TypeToken() { + }.getType()); + callBack.onSuccess(keyPersonList); + } + }); + } + + /** + * 获取警情列表数据 + * + * @param params 参数 + * @param callBack 回调函数 + */ + public void getPoliceEmergency(GetPoliceEmergencyListParams params, CustomCallBack> callBack) { + params.setSfhm(Constants.SFZH); + params.setPageSize(Constants.PAGE_SIZE + ""); + request(Constants.POLICE_EMERGENCY_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 keyPersonList = new Gson().fromJson(value, new TypeToken>() { + }.getType()); + callBack.onSuccess(keyPersonList); + } + }); + } + + + /** + * 获取重点人详情数据 + * + * @param str 身份证号 + */ + public void getPoliceEmergencyDetail(String str, CustomCallBack callBack) { + GetPoliceEmergencyDetailParams params = new GetPoliceEmergencyDetailParams(); + params.setJcjbh(str);// params.setSfzh("220104197307276911"); + params.setSfhm(Constants.SFZH); + request(Constants.POLICE_EMERGENCY_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) { + PoliceEmergencyDetail keyPersonDetail = new Gson().fromJson(value, PoliceEmergencyDetail.class); + callBack.onSuccess(keyPersonDetail); + } + }); + } + + /** + * 获取重点人数据统计 + */ + public void getKeyPersonMessageCount(CustomCallBack callBack) { + GetKeyPersonMessageCountParams params = new GetKeyPersonMessageCountParams(); + params.setSfhm(Constants.SFZH); + params.setJybh(Constants.USER_ID); + params.setDept(Constants.USER_ORG_ID); +// params.setSfhm("220183197210264653"); +// params.setJybh("106222"); +// 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) { + callBack.onError(call, e); + } + + @Override + public void onSuccess(String value) { + DataCount dataCount = new Gson().fromJson(value, DataCount.class); + callBack.onSuccess(dataCount); + } + }); + } + + /** + * 获取申请支援类型 + */ + public void getApplyType(CustomCallBack> callBack) { + HashMap params = new HashMap<>(); + params.put("type", "1"); + params.put("deptId", Constants.USER_ORG_ID); + params.put("sfhm", Constants.SFZH); + request(Constants.APPLY_TYPE_ID, new Gson().toJson(params), new CustomCallBack() { + @Override + public void onError(Call call, @NonNull Exception e) { + callBack.onError(call, e); + } + + @Override + public void onSuccess(String value) { + List applyTypes = new Gson().fromJson(value, new TypeToken>() { + }.getType()); + callBack.onSuccess(applyTypes); + } + }); + } + + /** + * 获取申请部门 + */ + public void getApplyDept(CustomCallBack> callBack) { + HashMap params = new HashMap<>(); + params.put("type", "2"); + params.put("deptId", Constants.USER_ORG_ID); + params.put("sfhm", Constants.SFZH); + request(Constants.APPLY_TYPE_ID, new Gson().toJson(params), new CustomCallBack() { + @Override + public void onError(Call call, @NonNull Exception e) { + callBack.onError(call, e); + } + + @Override + public void onSuccess(String value) { + List applyTypes = new Gson().fromJson(value, new TypeToken>() { + }.getType()); + callBack.onSuccess(applyTypes); + } + }); + } + + /** + * 获取申请支援审批人 + */ + public void getApplyPerson(String deptId, CustomCallBack> callBack) { + HashMap params = new HashMap<>(); + params.put("type", "3"); + params.put("deptId", deptId); + 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 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/union/chat/fragment/ChatFragment.java b/app/src/main/java/com/police/union/chat/fragment/ChatFragment.java new file mode 100644 index 0000000..c65c50d --- /dev/null +++ b/app/src/main/java/com/police/union/chat/fragment/ChatFragment.java @@ -0,0 +1,23 @@ +package com.police.union.chat.fragment; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.police.base.BaseFragment; +import com.police.union.databinding.FragmentChatBinding; + +public class ChatFragment extends BaseFragment { + private FragmentChatBinding binding; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + binding = FragmentChatBinding.inflate(inflater); + return binding.getRoot(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/union/home/activity/ApplyActivity.java b/app/src/main/java/com/police/union/home/activity/ApplyActivity.java new file mode 100644 index 0000000..1516c74 --- /dev/null +++ b/app/src/main/java/com/police/union/home/activity/ApplyActivity.java @@ -0,0 +1,293 @@ +package com.police.union.home.activity; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +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.base.BaseActivity; +import com.police.union.R; +import com.police.union.RequestClient; +import com.police.union.databinding.ActivityApplyBinding; +import com.police.union.databinding.DialogDeptSelectorBinding; +import com.police.union.databinding.DialogSelectorBinding; +import com.police.union.home.model.ApplyDept; +import com.police.union.home.model.ApplyPerson; +import com.police.union.home.viewmodel.ApplyPostViewModel; +import com.police.utils.UiUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +public class ApplyActivity extends BaseActivity { + + private ApplyPostViewModel viewModel; + public List applyDept; + public List applyPeople; + public RequestClient requestClient; + + private ActivityApplyBinding binding; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityApplyBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + requestClient = RequestClient.instance(); + binding.ivBack.setOnClickListener(view -> finish()); + initView(); + } + + private void initView() { + viewModel = new ApplyPostViewModel(this); + binding.includeApply.tvCommitBtn.setOnClickListener(view -> addApply()); + binding.rlLoading.setOnClickListener(view -> { + }); + binding.includeApply.tvQueryOrg.setOnClickListener(view -> showDeptDialog((TextView) view, "选择部门", applyDept)); + binding.includeApply.tvQueryName.setOnClickListener(view -> showPerson(applyPeople)); + viewModel.getApplyDept(); + binding.includeApply.tvQueryOrg.setOnClickListener(view -> showDept(applyDept)); + binding.includeApply.etSearchTitle.setText(getIntent().getStringExtra("jqbh")); +// binding.includeApply.tvQueryName2.setOnClickListener(view -> { +// //打开相册选择一张图片 +// openAlbum(); +// }); + } + + + private void openAlbum() { + Intent intent = new Intent(Intent.ACTION_GET_CONTENT); + intent.setType("image/*"); + startActivityForResult(intent, 250); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + //相册 + if (requestCode == 250 && resultCode == RESULT_OK && data != null) { + nrFj = UiUtils.uriToBase64(this, data.getData()); +// binding.includeApply.tvQueryName2.setText(data.getData().toString()); + } + } + + private String nrFj = ""; + + public void showDept(List applyDept) { + if (applyDept == null || applyDept.isEmpty()) { + Toast.makeText(this, "暂无归属部门", Toast.LENGTH_SHORT).show(); + return; + } + showDeptDialog(binding.includeApply.tvQueryOrg, "选择归属部门", applyDept); + } + + public void showPerson(List applyPeople) { + if (applyPeople == null || applyPeople.isEmpty()) { + Toast.makeText(this, "暂无审批人", Toast.LENGTH_SHORT).show(); + return; + } + List names = applyPeople.stream().map(ApplyPerson::getUserName).collect(Collectors.toList()); + showDialog(binding.includeApply.tvQueryName, "选择审批人", names); + } + + public void showDialog(TextView textView, String title, List items) { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + DialogSelectorBinding selectorBinding = DialogSelectorBinding.inflate(getLayoutInflater()); + View dialogView = selectorBinding.getRoot(); + selectorBinding.tvDialogTitle.setText(title); + RecyclerView recyclerView = selectorBinding.rcv; + recyclerView.setLayoutManager(new LinearLayoutManager(this)); + 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) { + AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.TransparentAlertDialog); + DialogDeptSelectorBinding selectorBinding = DialogDeptSelectorBinding.inflate(getLayoutInflater()); + View dialogView = selectorBinding.getRoot(); + selectorBinding.tvDialogTitle.setText(title); + RecyclerView recyclerView = selectorBinding.rcv; + recyclerView.setLayoutManager(new LinearLayoutManager(this)); + 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(this, "请选择一个归属部门", 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)); + } + } + } + + /** + * 发送成功,跳转到成功页面 + */ + public void sendSuccess() { + Toast.makeText(this, "提交成功!", Toast.LENGTH_SHORT).show(); + finish(); + } + + /** + * 取消勾选 + */ + 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); + } + + /** + * 提交 + */ + private void addApply() { + HashMap params = new HashMap<>(); + params.put("jqbh", binding.includeApply.etSearchTitle.getText().toString()); + params.put("sy", "7"); + params.put("sqnr", binding.includeApply.etQueryBody.getText().toString()); + params.put("nrFj", nrFj); + 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 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/union/home/activity/ApplyDetailActivity.java b/app/src/main/java/com/police/union/home/activity/ApplyDetailActivity.java new file mode 100644 index 0000000..3470e7e --- /dev/null +++ b/app/src/main/java/com/police/union/home/activity/ApplyDetailActivity.java @@ -0,0 +1,71 @@ +package com.police.union.home.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.union.databinding.ActivityApplyDetailBinding; +import com.police.union.home.model.ApplyDetail; +import com.police.union.home.viewmodel.DetailViewModel; +import com.police.utils.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/union/home/activity/DataActivity.java b/app/src/main/java/com/police/union/home/activity/DataActivity.java new file mode 100644 index 0000000..c431e9f --- /dev/null +++ b/app/src/main/java/com/police/union/home/activity/DataActivity.java @@ -0,0 +1,382 @@ +package com.police.union.home.activity; + +import android.content.Context; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.recyclerview.widget.LinearLayoutManager; + +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.police.base.App; +import com.police.base.BaseActivity; +import com.police.union.R; +import com.police.union.RequestClient; +import com.police.union.databinding.ActivityDataBinding; +import com.police.union.home.adapter.KeyPersonAdapter; +import com.police.union.home.adapter.PoliceEmergencyAdapter; +import com.police.union.home.model.KeyPerson; +import com.police.union.home.model.PoliceEmergency; +import com.police.union.home.viewmodel.DataViewModel; +import com.scwang.smart.refresh.footer.ClassicsFooter; +import com.scwang.smart.refresh.header.ClassicsHeader; + +import java.util.ArrayList; +import java.util.List; + +public class DataActivity extends BaseActivity { + + public ActivityDataBinding binding; + private DataViewModel viewModel; + private PopupWindow popupWindow; + private PopupWindow popupWindow2; + private PopupWindow popupWindow3; + public final List personList = new ArrayList<>(); + public final List policeList = new ArrayList<>(); + public BaseQuickAdapter adapter; + private int currentTabBar = 1; + private int currentTab = 1; + public int filterType = 0; + public RequestClient requestClient; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityDataBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + requestClient = RequestClient.instance(); + viewModel = new DataViewModel(this); + initView(); + initData(); + } + + private void initView() { + binding.refreshLayout.setRefreshHeader(new ClassicsHeader(this)); + binding.refreshLayout.setRefreshFooter(new ClassicsFooter(this)); + binding.rvGroup.setLayoutManager(new LinearLayoutManager(this)); + keyPersonInitAdapter(); + setPopupWindow(); + setPopupWindow2(); + setPopupWindow3(); + } + + private void initData() { + viewModel.keyPersonInit(); +// viewModel.getKeyPersonMessageCount(); + initListener(); + } + + private void initListener() { + //重点人,案情,案件,点击事件 + binding.llKeyPerson.setOnClickListener(view -> tabBarOnClick(1)); + binding.llPoliceEmergency.setOnClickListener(view -> tabBarOnClick(2)); + binding.llCaseDetails.setOnClickListener(view -> tabBarOnClick(3)); + //搜索按钮添加点击事件 + binding.tvSearchBtn.setOnClickListener(view -> { + if (!App.getApp().findAddress) return; + if (currentTabBar == 1) { + if (currentTab == 1) { + viewModel.keyPersonInit(); + } else { + viewModel.orgKeyPersonInit(); + } + } else if (currentTabBar == 2) { + viewModel.policeEmergencyInit(); + } + }); + //我的重点人与区域重点人tab点击切换事件 + binding.llMyKeyPerson.setOnClickListener(view -> tabOnClick(1)); + binding.llAreaKeyPerson.setOnClickListener(view -> tabOnClick(2)); + //loading视图设置空的点击事件 + binding.rlLoading.setOnClickListener(view -> { + }); + //筛选文字下拉菜单按钮点击事件 + binding.typeGroup.setOnClickListener(view -> { + if (!App.getApp().findAddress) return; + if (currentTabBar == 1) { + popupWindow.showAsDropDown(binding.typeGroup); + } else if (currentTabBar == 2) { + popupWindow2.showAsDropDown(binding.typeGroup); + } else { + popupWindow3.showAsDropDown(binding.typeGroup); + } + + }); + //重点人列表条目点击事件 + adapter.setOnItemClickListener((adapter1, view, position) -> viewModel.keyPersonDetail(personList.get(position).getSfzh())); + //刷新列表 + binding.refreshLayout.setOnRefreshListener(refreshlayout -> { + if (currentTabBar == 1) { + if (currentTab == 1) { + viewModel.keyPersonRefresh(); + } else { + viewModel.orgKeyPersonRefresh(); + } + return; + } + if (currentTabBar == 2) { + viewModel.policeEmergencyRefresh(); + return; + } + if (currentTabBar == 3) { + if (currentTab == 1) { + viewModel.keyPersonRefresh(); + } else { + viewModel.orgKeyPersonRefresh(); + } + } + }); + //加载更多 + binding.refreshLayout.setOnLoadMoreListener(refreshlayout -> { + if (currentTabBar == 1) { + if (currentTab == 1) { + viewModel.keyPersonLoadMore(); + } else { + viewModel.orgKeyPersonLoadMore(); + } + return; + } + if (currentTabBar == 2) { + viewModel.policeEmergencyLoadMore(); + } + }); + } + + private void keyPersonInitAdapter() { + adapter = new KeyPersonAdapter(); + adapter.setNewInstance(personList); + binding.rvGroup.setAdapter(adapter); + adapter.setOnItemClickListener((adapter1, view, position) -> viewModel.keyPersonDetail(personList.get(position).getSfzh())); + } + + private void policeEmergencyInitAdapter() { + adapter = new PoliceEmergencyAdapter(); + adapter.setNewInstance(policeList); + binding.rvGroup.setAdapter(adapter); + adapter.setOnItemClickListener((adapter1, view, position) -> viewModel.policeEmergencyDetail(policeList.get(position).getJcjbh())); + } + + /** + * tab按钮点击切换 + * + * @param i + */ + private void tabOnClick(int i) { + //如果点击tab与当前的一致,当前点击事件无效. + if (currentTab == i) return; + currentTab = i; + //清空搜索框内容 + binding.etInput.setText(""); + //切换效果设置 + binding.tvAreaKeyPerson.setTextColor(getResources().getColor(i != 1 ? R.color.selected_color : R.color.color_666)); + binding.selectAreaKeyPerson.setBackgroundColor(getResources().getColor(i != 1 ? R.color.selected_color : R.color.transparent_color)); + binding.tvMyKeyPerson.setTextColor(getResources().getColor(i == 1 ? R.color.selected_color : R.color.color_666)); + binding.selectMyKeyPerson.setBackgroundColor(getResources().getColor(i == 1 ? R.color.selected_color : R.color.transparent_color)); + if (currentTabBar == 1) { + if (currentTab == 1) { + //加载我的重点人 + viewModel.keyPersonInit(); + } else { + viewModel.orgKeyPersonInit(); + } + } + } + + /** + * 顶部tabBar切换 + * + * @param i + */ + private void tabBarOnClick(int i) { + if (currentTabBar == i) return; + currentTabBar = i; + binding.etInput.setText(""); + binding.iconKeyPerson.setBackgroundResource(i == 1 ? R.mipmap.key_person_icon_selected : R.mipmap.key_person_icon_normal); + binding.tvKeyPerson.setTextColor(getResources().getColor(i == 1 ? R.color.selected_color : R.color.black)); + binding.selectKeyPerson.setBackgroundColor(getResources().getColor(i == 1 ? R.color.selected_color : R.color.white)); + binding.iconPoliceEmergency.setBackgroundResource(i == 2 ? R.mipmap.icon_jq_selected : R.mipmap.icon_jq_normal); + binding.tvPoliceEmergency.setTextColor(getResources().getColor(i == 2 ? R.color.selected_color : R.color.black)); + binding.selectPoliceEmergency.setBackgroundColor(getResources().getColor(i == 2 ? R.color.selected_color : R.color.white)); + binding.iconCaseDetails.setBackgroundResource(i == 3 ? R.mipmap.wenjianjia : R.mipmap.wenjianjia_icon); + binding.tvCaseDetails.setTextColor(getResources().getColor(i == 3 ? R.color.selected_color : R.color.black)); + binding.selectCaseDetails.setBackgroundColor(getResources().getColor(i == 3 ? R.color.selected_color : R.color.white)); + filterType = 0; + switch (i) { + case 1: + binding.tvSearchTitle.setText("姓名"); + keyPersonInitAdapter(); + if (currentTab == 1) { + viewModel.keyPersonInit(); + } else { + viewModel.orgKeyPersonInit(); + } + binding.tvMyKeyPerson.setText("我的重点人"); + binding.tvAreaKeyPerson.setText("辖区(警种)重点人"); + binding.tabGroup.setVisibility(View.VISIBLE); + break; + case 2: + binding.tvSearchTitle.setText("警情编号"); + policeEmergencyInitAdapter(); + viewModel.policeEmergencyInit(); + binding.tabGroup.setVisibility(View.GONE); + break; + default: + binding.tvSearchTitle.setText("案件编号"); + binding.tvMyKeyPerson.setText("在办案件"); + binding.tvAreaKeyPerson.setText("历史案件"); + binding.tabGroup.setVisibility(View.GONE); + loadCase(new ArrayList<>()); + } + } + + /** + * 加载案情布局 + */ + public void loadCase(List data) { + KeyPersonAdapter adapter = new KeyPersonAdapter(); + adapter.setNewInstance(data); + binding.rvGroup.setLayoutManager(new LinearLayoutManager(this)); + binding.rvGroup.setAdapter(adapter); + adapter.setOnItemClickListener((adapter1, view, position) -> viewModel.keyPersonDetail(data.get(position).getSfzh())); + } + + public void loadingShow() { + App.getHandler().post(() -> binding.rlLoading.setVisibility(View.VISIBLE)); + + } + + public void loadingNone() { + App.getHandler().post(() -> binding.rlLoading.setVisibility(View.GONE)); + } + + private void setPopupWindow() { + // 初始化 PopupWindow + popupWindow = new PopupWindow(this); + // 加载自定义布局 + LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); + View contentView = inflater.inflate(R.layout.dropdown_layout, null); + // 设置 PopupWindow 的宽高 + popupWindow.setWidth(LinearLayout.LayoutParams.WRAP_CONTENT); + popupWindow.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT); + // 设置 PopupWindow 的背景 + popupWindow.setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + // 设置 PopupWindow 显示的位置(相对于按钮) + popupWindow.showAtLocation(binding.typeGroup, Gravity.NO_GRAVITY, 0, 0); + // 为每个菜单项设置点击事件 + TextView textView1 = contentView.findViewById(R.id.textView1); // 假设这是菜单项1的ID + TextView textView2 = contentView.findViewById(R.id.textView2); // 假设这是菜单项2的ID + textView1.setOnClickListener(v -> { + // 处理菜单项 1 的点击事件 + binding.tvSearchTitle.setText("姓名"); + filterType = 0; + popupWindow.dismiss(); // 关闭 PopupWindow + }); + textView2.setOnClickListener(v -> { + // 处理菜单项 2 的点击事件 + binding.tvSearchTitle.setText("身份证号"); + filterType = 1; + popupWindow.dismiss(); // 关闭 PopupWindow + }); + // 将自定义布局设置为 PopupWindow 的内容视图 + popupWindow.setContentView(contentView); + // 设置 PopupWindow 的焦点 + popupWindow.setFocusable(true); + popupWindow.setOutsideTouchable(true); // 设置点击 PopupWindow 外部区域使其消失 + } + + private void setPopupWindow2() { + // 初始化 PopupWindow + popupWindow2 = new PopupWindow(this); + // 加载自定义布局 + LayoutInflater inflater2 = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); + View contentView2 = inflater2.inflate(R.layout.dropdown_layout2, null); + // 设置 PopupWindow 的宽高 + popupWindow2.setWidth(LinearLayout.LayoutParams.WRAP_CONTENT); + popupWindow2.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT); + // 设置 PopupWindow 的背景 + popupWindow2.setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + // 设置 PopupWindow 显示的位置(相对于按钮) + popupWindow2.showAtLocation(binding.typeGroup, Gravity.NO_GRAVITY, 0, 0); + // 为每个菜单项设置点击事件 + TextView textView3 = contentView2.findViewById(R.id.textView3); // 假设这是菜单项1的ID + TextView textView4 = contentView2.findViewById(R.id.textView4); // 假设这是菜单项2的ID + TextView textView5 = contentView2.findViewById(R.id.textView5); // 假设这是菜单项2的ID + textView3.setOnClickListener(v -> { + // 处理菜单项 1 的点击事件 + binding.tvSearchTitle.setText("警情编号"); + filterType = 0; + popupWindow2.dismiss(); // 关闭 PopupWindow + }); + textView4.setOnClickListener(v -> { + // 处理菜单项 2 的点击事件 + binding.tvSearchTitle.setText("报警内容"); + filterType = 1; + popupWindow2.dismiss(); // 关闭 PopupWindow + }); + textView5.setOnClickListener(v -> { + // 处理菜单项 2 的点击事件 + binding.tvSearchTitle.setText("报警电话"); + filterType = 2; + popupWindow2.dismiss(); // 关闭 PopupWindow + }); + // 将自定义布局设置为 PopupWindow 的内容视图 + popupWindow2.setContentView(contentView2); + // 设置 PopupWindow 的焦点 + popupWindow2.setFocusable(true); + popupWindow2.setOutsideTouchable(true); // 设置点击 PopupWindow 外部区域使其消失 + } + + private void setPopupWindow3() { + // 初始化 PopupWindow + popupWindow3 = new PopupWindow(this); + // 加载自定义布局 + LayoutInflater inflater2 = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); + View contentView2 = inflater2.inflate(R.layout.dropdown_layout3, null); + // 设置 PopupWindow 的宽高 + popupWindow3.setWidth(LinearLayout.LayoutParams.WRAP_CONTENT); + popupWindow3.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT); + // 设置 PopupWindow 的背景 + popupWindow3.setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + // 设置 PopupWindow 显示的位置(相对于按钮) + popupWindow3.showAtLocation(binding.typeGroup, Gravity.NO_GRAVITY, 0, 0); + // 为每个菜单项设置点击事件 + TextView textView6 = contentView2.findViewById(R.id.textView6); // 假设这是菜单项1的ID + TextView textView7 = contentView2.findViewById(R.id.textView7); // 假设这是菜单项2的ID + TextView textView8 = contentView2.findViewById(R.id.textView8); // 假设这是菜单项2的ID + TextView textView9 = contentView2.findViewById(R.id.textView9); // 假设这是菜单项2的ID + textView6.setOnClickListener(v -> { + // 处理菜单项 1 的点击事件 + binding.tvSearchTitle.setText("案件编号"); + filterType = 0; + popupWindow3.dismiss(); // 关闭 PopupWindow + }); + textView7.setOnClickListener(v -> { + // 处理菜单项 2 的点击事件 + binding.tvSearchTitle.setText("案件名称"); + filterType = 1; + popupWindow3.dismiss(); // 关闭 PopupWindow + }); + textView8.setOnClickListener(v -> { + // 处理菜单项 2 的点击事件 + binding.tvSearchTitle.setText("嫌疑人姓名"); + filterType = 3; + popupWindow3.dismiss(); // 关闭 PopupWindow + }); + textView9.setOnClickListener(v -> { + // 处理菜单项 2 的点击事件 + binding.tvSearchTitle.setText("受害人姓名"); + filterType = 4; + popupWindow3.dismiss(); // 关闭 PopupWindow + }); + // 将自定义布局设置为 PopupWindow 的内容视图 + popupWindow3.setContentView(contentView2); + // 设置 PopupWindow 的焦点 + popupWindow3.setFocusable(true); + popupWindow3.setOutsideTouchable(true); // 设置点击 PopupWindow 外部区域使其消失 + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/union/home/activity/KeyPersonDetailActivity.java b/app/src/main/java/com/police/union/home/activity/KeyPersonDetailActivity.java new file mode 100644 index 0000000..18f70a2 --- /dev/null +++ b/app/src/main/java/com/police/union/home/activity/KeyPersonDetailActivity.java @@ -0,0 +1,173 @@ +package com.police.union.home.activity; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.google.gson.Gson; +import com.police.base.BaseActivity; +import com.police.network.Constants; +import com.police.union.databinding.ActivityKeyPersonDetailBinding; +import com.police.union.home.model.KeyPersonDetail; +import com.police.utils.UiUtils; + +public class KeyPersonDetailActivity extends BaseActivity { + private ActivityKeyPersonDetailBinding binding; + private KeyPersonDetail keyPersonDetail; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityKeyPersonDetailBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + initListener(); + String sfzh = getIntent().getStringExtra("sfzh"); + keyPersonDetail = new Gson().fromJson(sfzh, KeyPersonDetail.class); + binding.wm.setTextSize(50); + binding.wm.setText(Constants.SFZH); + showData(); + } + + private void showData() { + /** + * 基本信息数据显示 + */ + binding.tvName.setText(keyPersonDetail.getXm()); + binding.tvSex.setText(keyPersonDetail.getXb()); + if (UiUtils.isNotEmpty(keyPersonDetail.getHypo())) { + binding.tvMarital.setVisibility(View.VISIBLE); + binding.tvMarital.setText("已婚"); + } + if (UiUtils.isNotEmpty(keyPersonDetail.getBq())) { + binding.tvBq.setText(keyPersonDetail.getBq()); + binding.tvBq.setVisibility(View.VISIBLE); + } + setText(binding.tvNation, keyPersonDetail.getMz()); + setText(binding.detailSfzh, keyPersonDetail.getGmsfhm()); + if (UiUtils.isNotEmpty(keyPersonDetail.getJzdhhm())) { + String[] split = keyPersonDetail.getJzdhhm().split(","); + binding.detailSjh.setText(split[0]);//手机号 + } + setText(binding.detailHj, keyPersonDetail.getJg()); + setText(binding.detailGldz, keyPersonDetail.getHjdz()); + setText(binding.detailFwcs, keyPersonDetail.getFwcs()); + if (UiUtils.isNotEmpty(keyPersonDetail.getDjchphm())) { + binding.detailClxx.setText(keyPersonDetail.getDjchphm());//车辆信息 + } + + /** + * 位置信息数据显示 + */ + + if (UiUtils.isNotEmpty(keyPersonDetail.getSjgj())) { + setText(binding.tvBodyLastLocationPhone, sCountSp(keyPersonDetail.getSjgj()));//手机基站位置信息 + setText(binding.tvBodyLastLocationPhoneTime, UiUtils.formatTime(keyPersonDetail.getSjgj().split(",")[1]));//手机最后定位时间 + } + if (UiUtils.isNotEmpty(keyPersonDetail.getClzhwz())) { + setText(binding.tvBodyLastLocation, sCountSp(keyPersonDetail.getClzhwz()));//车辆最后位置 + setText(binding.tvBodyLastTime, UiUtils.formatTime(keyPersonDetail.getClzhwz().split(",")[1]));//车辆最后定位时间 + } + if (UiUtils.isNotEmpty(keyPersonDetail.getHcdp())) { + setText(binding.tvBodyTrainInfo, keyPersonDetail.getHcdp().split(",")[3] + "," + keyPersonDetail.getHcdp().split(",")[4] + " - " + keyPersonDetail.getHcdp().split(",")[5]);//火车订票 + setText(binding.tvBodyTrainTime, UiUtils.formatTime(keyPersonDetail.getHcdp().split(",")[2]));//火车发车时间 + } + if (UiUtils.isNotEmpty(keyPersonDetail.getKcdp())) { + setText(binding.tvBodyBusInfo, keyPersonDetail.getKcdp().split(",")[7] + "," + keyPersonDetail.getKcdp().split(",")[2] + " - " + keyPersonDetail.getKcdp().split(",")[6]);//客车订票、、 tCount(keyPersonDetail.getKcdp()) + setText(binding.tvBodyBusTime, UiUtils.formatTime(keyPersonDetail.getKcdp().split(",")[4]));//客车发车时间 + } + if (UiUtils.isNotEmpty(keyPersonDetail.getFjdp())) { + setText(binding.tvBodyFlyInfo, keyPersonDetail.getFjdp().split(",")[4] + "," + keyPersonDetail.getFjdp().split(",")[6] + " - " + keyPersonDetail.getFjdp().split(",")[9]);//飞机订票 + setText(binding.tvBodyFlyTime, UiUtils.formatTime(keyPersonDetail.getFjdp().split(",")[7]));//飞机起飞时间 + } + if (UiUtils.isNotEmpty(keyPersonDetail.getZjzs())) { + setText(binding.tvBodyRestInfo, tCount(keyPersonDetail.getZjzs()));//最近住宿 + } + if (keyPersonDetail.getZp() != null) { + loadBase64Image(binding.ivPhoto, keyPersonDetail.getZp()); + } + + /** + * 列控数据信息显示 + */ + if (keyPersonDetail.getLsajcs() > 0) { + setText(binding.tvBodyCtrlLevel, keyPersonDetail.getZdryLkxxList().get(0).getGklb());//管理级别 + setText(binding.tvBodyCtrlType, keyPersonDetail.getZdryLkxxList().get(0).getQtlb());//列管级别 + setText(binding.tvBodyCtrlTag, keyPersonDetail.getZdryLkxxList().get(0).getLkjz());//列控警种 + setText(binding.tvBodyCtrlTime, UiUtils.formatTime(keyPersonDetail.getZdryLkxxList().get(0).getLksj()));//列控时间 + setText(binding.tvBodyCtrlCause, keyPersonDetail.getZdryLkxxList().get(0).getLkyy());//列控原因 + setText(binding.tvBodyCtrlPerson, keyPersonDetail.getZdryLkxxList().get(0).getZrdw());//责任单位 + setText(binding.tvBodyCtrlPolice, keyPersonDetail.getZdryLkxxList().get(0).getZrmj());//责任民警 + } + + } + + public void loadBase64Image(ImageView imageView, String base64Str) { + Glide.with(imageView.getContext()) + .asBitmap() + .load(base64Str) + .into(imageView); + } + + /** + * 第3次索引 + * + * @param str + * @return + */ + private String tCount(String str) { + String c = ","; + int firstIndex = str.indexOf(c); + int secondIndex = str.indexOf(c, firstIndex + 1); + int thirdIndex = str.indexOf(c, secondIndex + 1); + return str.substring(thirdIndex + 1, str.length()); + } + + /** + * 第2个索引 + * + * @param str + * @return + */ + private String sCount(String str) { + String c = ","; + int firstIndex = str.indexOf(c); + int secondIndex = str.indexOf(c, firstIndex + 1); + return str.substring(secondIndex + 1, str.length()); + } + + /** + * 第2个索引 + * + * @param str + * @return + */ + private String sCountSp(String str) { + try { + return str.split(",")[3]; + } catch (Exception e) { + return ""; + } + } + + private void initListener() { + binding.ivBack.setOnClickListener(view -> finish()); + } + + public static void startAction(Context context, String num) { + Intent intent = new Intent(context, KeyPersonDetailActivity.class); + intent.putExtra("sfzh", num); + context.startActivity(intent); + } + + private void setText(TextView view, String str) { + if (UiUtils.isNotEmpty(str)) { + view.setText(str); + } else { + view.setText("无"); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/union/home/activity/PoliceEmergencyDetailActivity.java b/app/src/main/java/com/police/union/home/activity/PoliceEmergencyDetailActivity.java new file mode 100644 index 0000000..677e0cc --- /dev/null +++ b/app/src/main/java/com/police/union/home/activity/PoliceEmergencyDetailActivity.java @@ -0,0 +1,217 @@ +package com.police.union.home.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.base.App; +import com.police.network.Constants; +import com.police.network.CustomCallBack; +import com.police.union.R; +import com.police.union.RequestClient; +import com.police.union.databinding.ActivityPoliceEmergencyDetailBinding; +import com.police.union.home.model.ApplyType; +import com.police.union.home.model.DetailQueryResult; +import com.police.union.home.model.PoliceEmergencyDetail; +import com.police.utils.UiUtils; + +import java.util.List; + +import okhttp3.Call; + +/** + * 警情详情页面 + */ +public class PoliceEmergencyDetailActivity extends Activity { + + private ActivityPoliceEmergencyDetailBinding binding; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityPoliceEmergencyDetailBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + binding.wm.setTextSize(50); + binding.wm.setText(Constants.SFZH); + 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.includePersonInfo.ivZp); + } + 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 { + Intent intent = new Intent(PoliceEmergencyDetailActivity.this, ApplyActivity.class); + intent.putExtra("jqbh", jqbh); + startActivity(intent); + } + } + }); + + } + + 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, QueryApplyResultActivity.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); + UiUtils.toast("电话权限未被授予,请打开电话权限"); + } 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) { + Intent intent = new Intent(context, PoliceEmergencyDetailActivity.class); + intent.putExtra("param", num); + context.startActivity(intent); + } + + private void setText(TextView view, String str) { + if (UiUtils.isNotEmpty(str)) { + view.setText(str); + } else { + view.setText("无"); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/union/home/activity/QueryApplyResultActivity.java b/app/src/main/java/com/police/union/home/activity/QueryApplyResultActivity.java new file mode 100644 index 0000000..6d8da48 --- /dev/null +++ b/app/src/main/java/com/police/union/home/activity/QueryApplyResultActivity.java @@ -0,0 +1,58 @@ +package com.police.union.home.activity; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; + + +import com.police.union.databinding.ActivityQueryApplyResultBinding; +import com.police.union.home.adapter.MineApplyListAdapter; +import com.police.union.home.model.Apply; +import com.police.union.home.viewmodel.ApplyResultViewModel; + +import java.util.List; + +public class QueryApplyResultActivity extends AppCompatActivity { + + private ActivityQueryApplyResultBinding binding; + private MineApplyListAdapter adapter; + private List applyList; + private ApplyResultViewModel viewModel; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityQueryApplyResultBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + viewModel = new ApplyResultViewModel(this); + binding.ivBack.setOnClickListener(view -> finish()); + binding.mineRvGroup.setLayoutManager(new LinearLayoutManager(this)); + adapter = new MineApplyListAdapter(); + binding.mineRvGroup.setAdapter(adapter); + adapter.setOnItemClickListener((adapter1, view, position) -> applyDetail(applyList.get(position).getBh())); + viewModel.getApplyList(getIntent().getStringExtra("jqbh")); +// viewModel.getApplyList("22010020240411234457000018"); + } + + public void applyList(List list) { + applyList = list; + adapter.setList(list); + } + + public void applyDetail(String applyDetail) { + Intent intent = new Intent(this, ApplyDetailActivity.class); + intent.putExtra("applyDetail", applyDetail); + startActivity(intent); + } + + 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/union/home/adapter/KeyPersonAdapter.java b/app/src/main/java/com/police/union/home/adapter/KeyPersonAdapter.java new file mode 100644 index 0000000..7cdb137 --- /dev/null +++ b/app/src/main/java/com/police/union/home/adapter/KeyPersonAdapter.java @@ -0,0 +1,35 @@ +package com.police.union.home.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.base.App; +import com.police.union.R; +import com.police.union.home.model.KeyPerson; +import com.police.utils.UiUtils; + +public class KeyPersonAdapter extends BaseQuickAdapter { + + public KeyPersonAdapter() { + super(R.layout.item_key_person); // 指定列表项的布局 + } + + @Override + protected void convert(BaseViewHolder helper, KeyPerson item) { + helper.setText(R.id.item_name, item.getXm()); + helper.setText(R.id.item_sfzh, item.getSfzh()); + helper.setText(R.id.item_gklb, item.getGklb()); + helper.setText(R.id.item_qtlb, item.getQtlb()); + helper.setText(R.id.item_zrmj, item.getZrmj()); + if (UiUtils.isNotEmpty(item.getZp())) { + Glide.with(App.getApp()) + .asBitmap() + .load(item.getZp()) + .into((ImageView) helper.getView(R.id.iv_photo)); + } else { + helper.setImageResource(R.id.iv_photo, R.mipmap.photo); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/union/home/adapter/MineApplyListAdapter.java b/app/src/main/java/com/police/union/home/adapter/MineApplyListAdapter.java new file mode 100644 index 0000000..d3c661a --- /dev/null +++ b/app/src/main/java/com/police/union/home/adapter/MineApplyListAdapter.java @@ -0,0 +1,22 @@ +package com.police.union.home.adapter; + +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.viewholder.BaseViewHolder; +import com.police.union.R; +import com.police.union.home.model.Apply; + +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/union/home/adapter/PoliceEmergencyAdapter.java b/app/src/main/java/com/police/union/home/adapter/PoliceEmergencyAdapter.java new file mode 100644 index 0000000..bf1739d --- /dev/null +++ b/app/src/main/java/com/police/union/home/adapter/PoliceEmergencyAdapter.java @@ -0,0 +1,23 @@ +package com.police.union.home.adapter; + +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.viewholder.BaseViewHolder; +import com.police.union.R; +import com.police.union.home.model.PoliceEmergency; +import com.police.utils.UiUtils; + +public class PoliceEmergencyAdapter extends BaseQuickAdapter { + + public PoliceEmergencyAdapter() { + super(R.layout.item_police_emergency); // 指定列表项的布局 + } + + @Override + protected void convert(BaseViewHolder helper, PoliceEmergency item) { + helper.setText(R.id.tv_police_num_title, "警情编号:"+item.getJcjbh());//警情编号 + helper.setText(R.id.item_content, item.getBjjyqk());//报警内容 + helper.setText(R.id.tv_police_tel, item.getBjrlxdh());//报警电话 + helper.setText(R.id.tv_police_time, UiUtils.formatTime(item.getJjsj()));//报警时间 + helper.setText(R.id.tv_police_loc, item.getAsjfsdddzmc());//报警地址 + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/union/home/fragment/HomeFragment.java b/app/src/main/java/com/police/union/home/fragment/HomeFragment.java new file mode 100644 index 0000000..d510e55 --- /dev/null +++ b/app/src/main/java/com/police/union/home/fragment/HomeFragment.java @@ -0,0 +1,31 @@ +package com.police.union.home.fragment; + +import android.content.Intent; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.police.base.BaseFragment; +import com.police.union.databinding.FragmentHomeBinding; +import com.police.union.home.activity.DataActivity; + +public class HomeFragment extends BaseFragment { + private FragmentHomeBinding binding; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + binding = FragmentHomeBinding.inflate(inflater); + initView(); + return binding.getRoot(); + } + + + private void initView() { + binding.llData.setOnClickListener(view -> startActivity(new Intent(getActivity(), DataActivity.class))); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/union/home/model/Apply.java b/app/src/main/java/com/police/union/home/model/Apply.java new file mode 100644 index 0000000..f8b1ceb --- /dev/null +++ b/app/src/main/java/com/police/union/home/model/Apply.java @@ -0,0 +1,61 @@ +package com.police.union.home.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/union/home/model/ApplyDept.java b/app/src/main/java/com/police/union/home/model/ApplyDept.java new file mode 100644 index 0000000..1e82dca --- /dev/null +++ b/app/src/main/java/com/police/union/home/model/ApplyDept.java @@ -0,0 +1,81 @@ +package com.police.union.home.model; + +import java.io.Serializable; + +/** + * {\"checked\":false,\"id\":\"220000000000\",\"name\":\"吉林省公安厅\",\"nocheck\":false,\"open\":false,\"pId\":\"0\",\"title\":\"吉林省公安厅\"} + */ +public class ApplyDept implements Serializable { + private boolean checked; + private String id; + private String name; + private String pId; + private String title; + private int level = 0; + private boolean open; + private boolean nocheck; + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public int getLevel() { + return level; + } + + public void setLevel(int level) { + this.level = level; + } + + public void setName(String name) { + this.name = name; + } + + public String getpId() { + return pId; + } + + public void setpId(String pId) { + this.pId = pId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public boolean isNocheck() { + return nocheck; + } + + public void setNocheck(boolean nocheck) { + this.nocheck = nocheck; + } +} diff --git a/app/src/main/java/com/police/union/home/model/ApplyDetail.java b/app/src/main/java/com/police/union/home/model/ApplyDetail.java new file mode 100644 index 0000000..2a7c2ed --- /dev/null +++ b/app/src/main/java/com/police/union/home/model/ApplyDetail.java @@ -0,0 +1,71 @@ +package com.police.union.home.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/union/home/model/ApplyPerson.java b/app/src/main/java/com/police/union/home/model/ApplyPerson.java new file mode 100644 index 0000000..7e4dc72 --- /dev/null +++ b/app/src/main/java/com/police/union/home/model/ApplyPerson.java @@ -0,0 +1,24 @@ +package com.police.union.home.model; + +import java.io.Serializable; + +public class ApplyPerson implements Serializable { + private String loginName; + private String userName; + + public String getLoginName() { + return loginName; + } + + public void setLoginName(String loginName) { + this.loginName = loginName; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } +} diff --git a/app/src/main/java/com/police/union/home/model/ApplyType.java b/app/src/main/java/com/police/union/home/model/ApplyType.java new file mode 100644 index 0000000..0f9bbf5 --- /dev/null +++ b/app/src/main/java/com/police/union/home/model/ApplyType.java @@ -0,0 +1,33 @@ +package com.police.union.home.model; + +import java.io.Serializable; + +public class ApplyType implements Serializable { + private String dictLabel; + private String dictSort; + private String dictValue; + + public String getDictLabel() { + return dictLabel; + } + + public void setDictLabel(String dictLabel) { + this.dictLabel = dictLabel; + } + + public String getDictSort() { + return dictSort; + } + + public void setDictSort(String dictSort) { + this.dictSort = dictSort; + } + + public String getDictValue() { + return dictValue; + } + + public void setDictValue(String dictValue) { + this.dictValue = dictValue; + } +} diff --git a/app/src/main/java/com/police/union/home/model/DataCount.java b/app/src/main/java/com/police/union/home/model/DataCount.java new file mode 100644 index 0000000..129a28b --- /dev/null +++ b/app/src/main/java/com/police/union/home/model/DataCount.java @@ -0,0 +1,49 @@ +package com.police.union.home.model; + +import java.io.Serializable; + +/** + * + */ +public class DataCount implements Serializable { + //重点人 + private String zdryCount = "0"; + //警情 + private String jqCount = "0"; + //案情 + private String aqCount = "0"; + //辖区 + private String zdryDeptCount = "0"; + + public String getZdryCount() { + return zdryCount; + } + + public void setZdryCount(String zdryCount) { + this.zdryCount = zdryCount; + } + + public String getJqCount() { + return jqCount; + } + + public void setJqCount(String jqCount) { + this.jqCount = jqCount; + } + + public String getAqCount() { + return aqCount; + } + + public void setAqCount(String aqCount) { + this.aqCount = aqCount; + } + + public String getZdryDeptCount() { + return zdryDeptCount; + } + + public void setZdryDeptCount(String zdryDeptCount) { + this.zdryDeptCount = zdryDeptCount; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/union/home/model/DetailQueryResult.java b/app/src/main/java/com/police/union/home/model/DetailQueryResult.java new file mode 100644 index 0000000..25eaba1 --- /dev/null +++ b/app/src/main/java/com/police/union/home/model/DetailQueryResult.java @@ -0,0 +1,15 @@ +package com.police.union.home.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/union/home/model/KeyPerson.java b/app/src/main/java/com/police/union/home/model/KeyPerson.java new file mode 100644 index 0000000..7a0805e --- /dev/null +++ b/app/src/main/java/com/police/union/home/model/KeyPerson.java @@ -0,0 +1,86 @@ +package com.police.union.home.model; + +import java.io.Serializable; + +public class KeyPerson implements Serializable { + //姓名 + private String xm; + //管控类别 + private String gklb; + //群体列表 + private String qtlb; + //责任民警姓名 + private String zrmj; + //身份证号码 + private String sfzh; + //照片base64 + private String zp; + //有效期 + private String yxq; + public String getXm() { + return xm; + } + + public void setXm(String xm) { + this.xm = xm; + } + + public String getGklb() { + return gklb; + } + + public void setGklb(String gklb) { + this.gklb = gklb; + } + + public String getQtlb() { + return qtlb; + } + + public void setQtlb(String qtlb) { + this.qtlb = qtlb; + } + + public String getZrmj() { + return zrmj; + } + + public void setZrmj(String zrmj) { + this.zrmj = zrmj; + } + + public String getSfzh() { + return sfzh; + } + + public void setSfzh(String sfzh) { + this.sfzh = sfzh; + } + + public String getZp() { + return zp; + } + + public void setZp(String zp) { + this.zp = zp; + } + + public String getYxq() { + return yxq; + } + + public void setYxq(String yxq) { + this.yxq = yxq; + } + + @Override + public String toString() { + return "KeyPerson{" + + "xm='" + xm + '\'' + + ", gklb='" + gklb + '\'' + + ", qtlb='" + qtlb + '\'' + + ", zrmj='" + zrmj + '\'' + + ", sfzh='" + sfzh + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/union/home/model/KeyPersonDetail.java b/app/src/main/java/com/police/union/home/model/KeyPersonDetail.java new file mode 100644 index 0000000..9f2ec7a --- /dev/null +++ b/app/src/main/java/com/police/union/home/model/KeyPersonDetail.java @@ -0,0 +1,289 @@ +package com.police.union.home.model; + +import java.io.Serializable; +import java.util.List; + +/** + * 重点人详情 + */ +public class KeyPersonDetail implements Serializable { + private String fwcs;//服务场所 + private String gmsfhm;//身份证号码 + private String hcdp;//火车订票信息 + private String hjdz;//户籍地址 + private String jg;//籍贯 + private String kcdp;//客车订票信息 + private String fjdp;//飞机订票信息 + private String mz;//民族 + private String xb;//性别 + private String xm;//姓名 + private String zjzs;//最近住宿 + private String zp;//照片 + private String djchphm;//机动车牌号 + private String jzdhhm;//手机号 + private String hypo;//婚姻 + private String sjgj;//手机轨迹 + private String clzhwz;//车辆最后位置 + private String bq;//标签 + + public String getBq() { + return bq; + } + + public void setBq(String bq) { + this.bq = bq; + } + + public String getClzhwz() { + return clzhwz; + } + + public void setClzhwz(String clzhwz) { + this.clzhwz = clzhwz; + } + + public String getSjgj() { + return sjgj; + } + + public String getFjdp() { + return fjdp; + } + + public void setFjdp(String fjdp) { + this.fjdp = fjdp; + } + + public void setSjgj(String sjgj) { + this.sjgj = sjgj; + } + + public String getHypo() { + return hypo; + } + + public void setHypo(String hypo) { + this.hypo = hypo; + } + + public String getJzdhhm() { + return jzdhhm; + } + + + public void setJzdhhm(String jzdhhm) { + this.jzdhhm = jzdhhm; + } + + public String getDjchphm() { + return djchphm; + } + + public void setDjchphm(String djchphm) { + this.djchphm = djchphm; + } + + public String getZp() { + return zp; + } + + public void setZp(String zp) { + this.zp = zp; + } + + private List zdryLkxxList;//姓名 + + public String getFwcs() { + return fwcs; + } + + public void setFwcs(String fwcs) { + this.fwcs = fwcs; + } + + public String getGmsfhm() { + return gmsfhm; + } + + public void setGmsfhm(String gmsfhm) { + this.gmsfhm = gmsfhm; + } + + public String getHcdp() { + return hcdp; + } + + public void setHcdp(String hcdp) { + this.hcdp = hcdp; + } + + public String getHjdz() { + return hjdz; + } + + public void setHjdz(String hjdz) { + this.hjdz = hjdz; + } + + public String getJg() { + return jg; + } + + public void setJg(String jg) { + this.jg = jg; + } + + public String getKcdp() { + return kcdp; + } + + public void setKcdp(String kcdp) { + this.kcdp = kcdp; + } + + public String getMz() { + return mz; + } + + public void setMz(String mz) { + this.mz = mz; + } + + public String getXb() { + return xb; + } + + public void setXb(String xb) { + this.xb = xb; + } + + public String getXm() { + return xm; + } + + public void setXm(String xm) { + this.xm = xm; + } + + public String getZjzs() { + return zjzs; + } + + public void setZjzs(String zjzs) { + this.zjzs = zjzs; + } + + public List getZdryLkxxList() { + return zdryLkxxList; + } + + public void setZdryLkxxList(List zdryLkxxList) { + this.zdryLkxxList = zdryLkxxList; + } + + /** + * 历史案件次数 + * + * @return + */ + public int getLsajcs() { + if (zdryLkxxList!=null){ + return zdryLkxxList.size(); + }else{ + return 0; + } + } + + public static class Lkxx implements Serializable { + private String gklb;//管控类别 + private String qtlb;//列管级别 + private String lkjz;//列控警种 + private String lksj;//列控时间 + private String lkyy;//列控原因 + private String zrdw;//责任单位 + private String zrmj;//责任民警 + private String yxq;//有效期 + private String gkjb;//管控级别 + private String zp;//照片 + + public String getQtlb() { + return qtlb; + } + + public void setQtlb(String qtlb) { + this.qtlb = qtlb; + } + + public String getZp() { + return zp; + } + + public void setZp(String zp) { + this.zp = zp; + } + + public String getGklb() { + return gklb; + } + + public void setGklb(String gklb) { + this.gklb = gklb; + } + + public String getLkjz() { + return lkjz; + } + + public void setLkjz(String lkjz) { + this.lkjz = lkjz; + } + + public String getLksj() { + return lksj; + } + + public void setLksj(String lksj) { + this.lksj = lksj; + } + + public String getLkyy() { + return lkyy; + } + + public void setLkyy(String lkyy) { + this.lkyy = lkyy; + } + + public String getZrdw() { + return zrdw; + } + + public void setZrdw(String zrdw) { + this.zrdw = zrdw; + } + + public String getZrmj() { + return zrmj; + } + + public void setZrmj(String zrmj) { + this.zrmj = zrmj; + } + + public String getYxq() { + return yxq; + } + + public void setYxq(String yxq) { + this.yxq = yxq; + } + + public String getGkjb() { + return gkjb; + } + + public void setGkjb(String gkjb) { + this.gkjb = gkjb; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/union/home/model/PoliceEmergency.java b/app/src/main/java/com/police/union/home/model/PoliceEmergency.java new file mode 100644 index 0000000..c0041f1 --- /dev/null +++ b/app/src/main/java/com/police/union/home/model/PoliceEmergency.java @@ -0,0 +1,56 @@ +package com.police.union.home.model; + +import java.io.Serializable; + +public class PoliceEmergency implements Serializable { + //警情编号 + private String jcjbh; + //报警内容 + private String bjjyqk; + //报警电话 + private String bjrlxdh; + //报警时间 + private String jjsj; + //报警地址 + private String asjfsdddzmc; + + public String getJcjbh() { + return jcjbh; + } + + public void setJcjbh(String jcjbh) { + this.jcjbh = jcjbh; + } + + public String getBjjyqk() { + return bjjyqk; + } + + public void setBjjyqk(String bjjyqk) { + this.bjjyqk = bjjyqk; + } + + public String getBjrlxdh() { + return bjrlxdh; + } + + public void setBjrlxdh(String bjrlxdh) { + this.bjrlxdh = bjrlxdh; + } + + public String getJjsj() { + return jjsj; + } + + public void setJjsj(String jjsj) { + this.jjsj = jjsj; + } + + public String getAsjfsdddzmc() { + return asjfsdddzmc; + } + + public void setAsjfsdddzmc(String asjfsdddzmc) { + this.asjfsdddzmc = asjfsdddzmc; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/union/home/model/PoliceEmergencyDetail.java b/app/src/main/java/com/police/union/home/model/PoliceEmergencyDetail.java new file mode 100644 index 0000000..05d0475 --- /dev/null +++ b/app/src/main/java/com/police/union/home/model/PoliceEmergencyDetail.java @@ -0,0 +1,267 @@ +package com.police.union.home.model; + +import java.io.Serializable; + +/** + * 警情详情 + * "asjfsdddzmc":"绿地中央公馆c6-204", + * "bjjyqk":"报警称:有人冒充民航工作人员骗取其10000元", + * "bjrlxdh":"13944800721", + * "bjrzjhm":"220104199807011310", + * "cjrxm":"肖映辉,张方贵", + * "jcjbh":"ST220120240200000046174", + * "jjsj":"20240223165000", + * "lsbjcs":"3", + * "mz":"汉族", + * "xb":"男", + * "xm":"徐瑞", + * "zp":"" + */ +public class PoliceEmergencyDetail implements Serializable { + //警情编号 + private String jcjbh; + //报警内容 + private String bjjyqk; + /*报警时间*/ + private String jjsj; + /*报警电话*/ + private String bjrlxdh; + /*报警位置*/ + private String asjfsdddzmc; + /*出境单位*/ + private String cjdwgajgjgdm; + /*出警民警*/ + private String cjrxm; + /*报警人身份证号*/ + private String bjrzjhm; + /*照片*/ + private String zp; + /*姓名*/ + private String xm; + /*性别*/ + private String xb; + /*民族*/ + private String mz; + /*年龄*/ + private String nl; + private String jg; + /*标签*/ + private String bq; + /*刑事案件前科*/ + private String xsajqk; + /*治安(行政)案件前科*/ + private String zaajqk; + /*精神病人*/ + private String jsbr; + /*残疾人*/ + private String cjr; + /*服务场所*/ + private String fwcs; + /*婚姻状况*/ + private String hyzk; + /*历史报警次数*/ + private String lsbjcs; + private String jqlb;//警情类别 + private String cllx;//处理类型 + private String cljg;//处理结果 + + public String getJqlb() { + return jqlb; + } + + public void setJqlb(String jqlb) { + this.jqlb = jqlb; + } + + public String getCllx() { + return cllx; + } + + public void setCllx(String cllx) { + this.cllx = cllx; + } + + public String getCljg() { + return cljg; + } + + public void setCljg(String cljg) { + this.cljg = cljg; + } + + public String getJcjbh() { + return jcjbh; + } + + public String getJg() { + return jg; + } + + public void setJg(String jg) { + this.jg = jg; + } + + public void setJcjbh(String jcjbh) { + this.jcjbh = jcjbh; + } + + public String getBjjyqk() { + return bjjyqk; + } + + public void setBjjyqk(String bjjyqk) { + this.bjjyqk = bjjyqk; + } + + public String getJjsj() { + return jjsj; + } + + public void setJjsj(String jjsj) { + this.jjsj = jjsj; + } + + public String getBjrlxdh() { + return bjrlxdh; + } + + public void setBjrlxdh(String bjrlxdh) { + this.bjrlxdh = bjrlxdh; + } + + public String getAsjfsdddzmc() { + return asjfsdddzmc; + } + + public void setAsjfsdddzmc(String asjfsdddzmc) { + this.asjfsdddzmc = asjfsdddzmc; + } + + public String getCjdwgajgjgdm() { + return cjdwgajgjgdm; + } + + public void setCjdwgajgjgdm(String cjdwgajgjgdm) { + this.cjdwgajgjgdm = cjdwgajgjgdm; + } + + public String getCjrxm() { + return cjrxm; + } + + public void setCjrxm(String cjrxm) { + this.cjrxm = cjrxm; + } + + public String getBjrzjhm() { + return bjrzjhm; + } + + public void setBjrzjhm(String bjrzjhm) { + this.bjrzjhm = bjrzjhm; + } + + public String getZp() { + return zp; + } + + public void setZp(String zp) { + this.zp = zp; + } + + public String getXm() { + return xm; + } + + public void setXm(String xm) { + this.xm = xm; + } + + public String getXb() { + return xb; + } + + public void setXb(String xb) { + this.xb = xb; + } + + public String getMz() { + return mz; + } + + public void setMz(String mz) { + this.mz = mz; + } + + public String getNl() { + return nl; + } + + public void setNl(String nl) { + this.nl = nl; + } + + public String getBq() { + return bq; + } + + public void setBq(String bq) { + this.bq = bq; + } + + public String getXsajqk() { + return xsajqk; + } + + public void setXsajqk(String xsajqk) { + this.xsajqk = xsajqk; + } + + public String getZaajqk() { + return zaajqk; + } + + public void setZaajqk(String zaajqk) { + this.zaajqk = zaajqk; + } + + public String getJsbr() { + return jsbr; + } + + public void setJsbr(String jsbr) { + this.jsbr = jsbr; + } + + public String getCjr() { + return cjr; + } + + public void setCjr(String cjr) { + this.cjr = cjr; + } + + public String getFwcs() { + return fwcs; + } + + public void setFwcs(String fwcs) { + this.fwcs = fwcs; + } + + public String getHyzk() { + return hyzk; + } + + public void setHyzk(String hyzk) { + this.hyzk = hyzk; + } + + public String getLsbjcs() { + return lsbjcs; + } + + public void setLsbjcs(String lsbjcs) { + this.lsbjcs = lsbjcs; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/union/home/viewmodel/ApplyPostViewModel.java b/app/src/main/java/com/police/union/home/viewmodel/ApplyPostViewModel.java new file mode 100644 index 0000000..59dc391 --- /dev/null +++ b/app/src/main/java/com/police/union/home/viewmodel/ApplyPostViewModel.java @@ -0,0 +1,109 @@ +package com.police.union.home.viewmodel; + +import androidx.annotation.NonNull; + + +import com.police.network.CustomCallBack; +import com.police.union.home.activity.ApplyActivity; +import com.police.union.home.model.ApplyDept; +import com.police.union.home.model.ApplyPerson; +import com.police.utils.UiUtils; + +import java.util.HashMap; +import java.util.List; + +import okhttp3.Call; + +public class ApplyPostViewModel { + public ApplyActivity activity; + + public ApplyPostViewModel(ApplyActivity activity) { + this.activity = activity; + } + + + public void getApplyDept() { + activity.loadingShow(); + activity.requestClient.getApplyDept(new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + UiUtils.toast(e.getMessage()); + activity.loadingNone(); + } + + @Override + public void onSuccess(List value) { + activity.applyDept = value; + activity.loadingNone(); + } + }); + } + + public void getApplyPerson(String deptId) { + activity.loadingShow(); + activity.requestClient.getApplyPerson(deptId, new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + UiUtils.toast(e.getMessage()); + activity.loadingNone(); + } + + @Override + public void onSuccess(List value) { + activity.applyPeople = value; + activity.loadingNone(); + } + }); + } +// +// public void getApplyJWLX() { +// activity.loadingShow(); +// activity.requestClient.getApplyJWLX(new CustomCallBack>() { +// @Override +// public void onError(@NonNull Call call, @NonNull Exception e) { +// UiUtils.toast(e.getMessage()); +// activity.loadingNone(); +// } +// +// @Override +// public void onSuccess(List value) { +// activity.applyJWLX = value; +// activity.loadingNone(); +// } +// }); +// } +// +// public void getApplyXXLY() { +// activity.loadingShow(); +// activity.requestClient.getApplyXXLY(new CustomCallBack>() { +// @Override +// public void onError(@NonNull Call call, @NonNull Exception e) { +// UiUtils.toast(e.getMessage()); +// activity.loadingNone(); +// } +// +// @Override +// public void onSuccess(List value) { +// activity.applyXXLY = value; +// activity.loadingNone(); +// } +// }); +// } + + public void addApply(HashMap map) { + activity.loadingShow(); + activity.requestClient.addApply(map, new CustomCallBack() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + UiUtils.toast(e.getMessage()); + activity.loadingNone(); + } + + @Override + public void onSuccess(Object value) { + activity.sendSuccess(); + activity.loadingNone(); + } + }); + } +} diff --git a/app/src/main/java/com/police/union/home/viewmodel/ApplyResultViewModel.java b/app/src/main/java/com/police/union/home/viewmodel/ApplyResultViewModel.java new file mode 100644 index 0000000..1ca1713 --- /dev/null +++ b/app/src/main/java/com/police/union/home/viewmodel/ApplyResultViewModel.java @@ -0,0 +1,43 @@ +package com.police.union.home.viewmodel; + +import androidx.annotation.NonNull; + + +import com.police.network.CustomCallBack; +import com.police.union.RequestClient; +import com.police.union.home.activity.QueryApplyResultActivity; +import com.police.union.home.model.Apply; +import com.police.utils.UiUtils; + +import java.util.HashMap; +import java.util.List; + +import okhttp3.Call; + +public class ApplyResultViewModel { + public QueryApplyResultActivity activity; + + public ApplyResultViewModel(QueryApplyResultActivity activity) { + this.activity = activity; + } + + public void getApplyList(String fnbh) { + activity.loadingShow(); + HashMap map = new HashMap<>(); + map.put("jqbh", fnbh); +// map.put("sfhm", "220283197910023151"); + RequestClient.instance().getApplyList(map, new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + UiUtils.toast(e.getMessage()); + activity.loadingNone(); + } + + @Override + public void onSuccess(List value) { + activity.applyList(value); + activity.loadingNone(); + } + }); + } +} diff --git a/app/src/main/java/com/police/union/home/viewmodel/ApplyViewModel.java b/app/src/main/java/com/police/union/home/viewmodel/ApplyViewModel.java new file mode 100644 index 0000000..884eb09 --- /dev/null +++ b/app/src/main/java/com/police/union/home/viewmodel/ApplyViewModel.java @@ -0,0 +1,127 @@ +package com.police.union.home.viewmodel; + +import androidx.annotation.NonNull; + +import com.police.network.CustomCallBack; +import com.police.union.home.activity.ApplyActivity; +import com.police.union.home.model.ApplyDept; +import com.police.union.home.model.ApplyPerson; +import com.police.union.home.model.ApplyType; +import com.police.utils.UiUtils; + +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; + +import okhttp3.Call; + +public class ApplyViewModel { + public ApplyActivity activity; + + public ApplyViewModel( ApplyActivity activity) { + this.activity = activity; + } + + public void getApplyType() { + activity.loadingShow(); + activity.requestClient.getApplyType(new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + UiUtils.toast(e.getMessage()); + activity.loadingNone(); + } + + @Override + public void onSuccess(List value) { + value.sort(Comparator.comparing(ApplyType::getDictSort)); +// activity.setPopupWindow(value); + activity.loadingNone(); + } + }); + } + + public void getApplyDept() { + activity.loadingShow(); + activity.requestClient.getApplyDept(new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + UiUtils.toast(e.getMessage()); + activity.loadingNone(); + } + + @Override + public void onSuccess(List value) { + activity.applyDept = value; + activity.loadingNone(); + } + }); + } + + public void getApplyPerson(String deptId) { + activity.loadingShow(); + activity.requestClient.getApplyPerson(deptId,new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + UiUtils.toast(e.getMessage()); + activity.loadingNone(); + } + + @Override + public void onSuccess(List value) { + activity.applyPeople = value; + activity.loadingNone(); + } + }); + } + + public void getApplyJWLX() { + activity.loadingShow(); + activity.requestClient.getApplyJWLX(new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + UiUtils.toast(e.getMessage()); + activity.loadingNone(); + } + + @Override + public void onSuccess(List value) { +// activity.applyJWLX = value; + activity.loadingNone(); + } + }); + } + + public void getApplyXXLY() { + activity.loadingShow(); + activity.requestClient.getApplyXXLY(new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + UiUtils.toast(e.getMessage()); + activity.loadingNone(); + } + + @Override + public void onSuccess(List value) { +// activity.applyXXLY = value; + activity.loadingNone(); + } + }); + } + + public void addApply(HashMap map) { + activity.loadingShow(); + activity.requestClient.addApply(map, new CustomCallBack() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + UiUtils.toast(e.getMessage()); + activity.loadingNone(); + } + + @Override + public void onSuccess(Object value) { + activity.sendSuccess(); + activity.loadingNone(); + } + }); + } +} diff --git a/app/src/main/java/com/police/union/home/viewmodel/DataViewModel.java b/app/src/main/java/com/police/union/home/viewmodel/DataViewModel.java new file mode 100644 index 0000000..3e6038f --- /dev/null +++ b/app/src/main/java/com/police/union/home/viewmodel/DataViewModel.java @@ -0,0 +1,357 @@ +package com.police.union.home.viewmodel; + +import androidx.annotation.NonNull; + +import com.google.gson.Gson; +import com.police.network.Constants; +import com.police.network.CustomCallBack; +import com.police.network.requestparams.GetKeyPersonListParams; +import com.police.network.requestparams.GetOrgKeyPersonListParams; +import com.police.network.requestparams.GetPoliceEmergencyListParams; +import com.police.union.home.activity.DataActivity; +import com.police.union.home.activity.KeyPersonDetailActivity; +import com.police.union.home.activity.PoliceEmergencyDetailActivity; +import com.police.union.home.model.DataCount; +import com.police.union.home.model.KeyPerson; +import com.police.union.home.model.KeyPersonDetail; +import com.police.union.home.model.PoliceEmergency; +import com.police.union.home.model.PoliceEmergencyDetail; +import com.police.utils.UiUtils; + +import java.util.List; + +import okhttp3.Call; + +public class DataViewModel { + public int pageNum = 1; + public DataActivity activity; + + public DataViewModel(DataActivity activity) { + this.activity = activity; + } + + public void keyPersonInit() { + activity.loadingShow(); + pageNum = 1; + activity.personList.clear(); + //加载数据 + GetKeyPersonListParams params = new GetKeyPersonListParams(); + params.setPageNum(pageNum + ""); + if (activity.filterType == 0) { + params.setXm(activity.binding.etInput.getText().toString()); + } else { + params.setSfzh(activity.binding.etInput.getText().toString()); + } + activity.requestClient.getKeyPerson(params, new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + UiUtils.toast(e.getMessage()); + activity.loadingNone(); + } + + @Override + public void onSuccess(List value) { + activity.loadingNone(); + if (value != null) { + activity.personList.addAll(value); + } + activity.adapter.notifyDataSetChanged(); + } + }); + } + + public void orgKeyPersonInit() { + activity.loadingShow(); + pageNum = 1; + activity.personList.clear(); + //加载数据 + GetOrgKeyPersonListParams params = new GetOrgKeyPersonListParams(); + params.setPageNum(pageNum + ""); + if (activity.filterType == 0) { + params.setXm(activity.binding.etInput.getText().toString()); + } else { + params.setSfzh(activity.binding.etInput.getText().toString()); + } + activity.requestClient.getOrgKeyPerson(params, new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + activity.loadingNone(); + UiUtils.toast(e.getMessage()); + } + + @Override + public void onSuccess(List value) { + activity.loadingNone(); + if (value != null) { + activity.personList.addAll(value); + } + activity.adapter.notifyDataSetChanged(); + } + }); + } + + public void keyPersonLoadMore() { + activity.loadingShow(); + //加载数据 + GetKeyPersonListParams params = new GetKeyPersonListParams(); + pageNum++; + params.setPageNum(pageNum + ""); + activity.requestClient.getKeyPerson(params, new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + activity.loadingNone(); + activity.binding.refreshLayout.finishLoadMore(); + UiUtils.toast(e.getMessage()); + } + + @Override + public void onSuccess(List value) { + activity.loadingNone(); + if (value == null || value.size() < Constants.PAGE_SIZE) { + activity.binding.refreshLayout.setNoMoreData(true); + } + if (value != null) { + activity.personList.addAll(value); + } + activity.adapter.notifyDataSetChanged(); + activity.binding.refreshLayout.finishLoadMore(); + } + }); + } + + public void keyPersonRefresh() { + activity.loadingShow(); + activity.personList.clear(); + pageNum = 1; + //加载数据 + GetKeyPersonListParams params = new GetKeyPersonListParams(); + params.setPageNum(pageNum + ""); + activity.requestClient.getKeyPerson(params, new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + activity.loadingNone(); + activity.binding.refreshLayout.finishRefresh(); + UiUtils.toast(e.getMessage()); + } + + @Override + public void onSuccess(List value) { + activity.loadingNone(); + if (value != null) { + activity.personList.addAll(value); + } + activity.adapter.notifyDataSetChanged(); + activity.binding.refreshLayout.finishRefresh(); + } + }); + } + + public void orgKeyPersonLoadMore() { + activity.loadingShow(); + //加载数据 + GetOrgKeyPersonListParams params = new GetOrgKeyPersonListParams(); + pageNum++; + params.setPageNum(pageNum + ""); + activity.requestClient.getOrgKeyPerson(params, new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + activity.loadingNone(); + activity.binding.refreshLayout.finishLoadMore(); + UiUtils.toast(e.getMessage()); + } + + @Override + public void onSuccess(List value) { + activity.loadingNone(); + if (value == null || value.size() < Constants.PAGE_SIZE) { + activity.binding.refreshLayout.setNoMoreData(true); + } + if (value != null) { + activity.personList.addAll(value); + } + activity.adapter.notifyDataSetChanged(); + activity.binding.refreshLayout.finishLoadMore(); + } + }); + } + + public void orgKeyPersonRefresh() { + activity.loadingShow(); + activity.personList.clear(); + pageNum = 1; + //加载数据 + GetOrgKeyPersonListParams params = new GetOrgKeyPersonListParams(); + params.setPageNum(pageNum + ""); + activity.requestClient.getOrgKeyPerson(params, new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + activity.loadingNone(); + activity.binding.refreshLayout.finishRefresh(); + UiUtils.toast(e.getMessage()); + } + + @Override + public void onSuccess(List value) { + activity.loadingNone(); + if (value != null) { + activity.personList.addAll(value); + } + activity.adapter.notifyDataSetChanged(); + activity.binding.refreshLayout.finishRefresh(); + } + }); + } + + public void keyPersonDetail(String sfzh) { + activity.loadingShow(); + activity.requestClient.keyPersonDetail(sfzh, new CustomCallBack() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + activity.loadingNone(); + UiUtils.toast(e.getMessage()); + } + + @Override + public void onSuccess(KeyPersonDetail value) { + activity.loadingNone(); + KeyPersonDetailActivity.startAction(activity, new Gson().toJson(value)); + } + }); + } + + /** + * 警情数据初始化 + */ + public void policeEmergencyInit() { + activity.loadingShow(); + pageNum = 1; + activity.policeList.clear(); + //加载数据 + GetPoliceEmergencyListParams params = new GetPoliceEmergencyListParams(); + params.setPageNum(pageNum + ""); + if (activity.filterType == 0) { + params.setJcjbh(activity.binding.etInput.getText().toString()); + } else if (activity.filterType == 1) { + params.setBjjyqk(activity.binding.etInput.getText().toString()); + } else { + params.setBjrlxdh(activity.binding.etInput.getText().toString()); + } + activity.requestClient.getPoliceEmergency(params, new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + UiUtils.toast(e.getMessage()); + activity.loadingNone(); + } + + @Override + public void onSuccess(List value) { + activity.loadingNone(); + if (value != null) { + activity.policeList.addAll(value); + } + activity.adapter.notifyDataSetChanged(); + } + }); + } + + public void policeEmergencyRefresh() { + activity.loadingShow(); + pageNum = 1; + activity.policeList.clear(); + //加载数据 + GetPoliceEmergencyListParams params = new GetPoliceEmergencyListParams(); + params.setPageNum(pageNum + ""); + if (activity.filterType == 0) { + params.setJcjbh(activity.binding.etInput.getText().toString()); + } else if (activity.filterType == 1) { + params.setBjjyqk(activity.binding.etInput.getText().toString()); + } else { + params.setBjrlxdh(activity.binding.etInput.getText().toString()); + } + activity.requestClient.getPoliceEmergency(params, new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + activity.binding.refreshLayout.finishRefresh(); + UiUtils.toast(e.getMessage()); + activity.loadingNone(); + } + + @Override + public void onSuccess(List value) { + activity.binding.refreshLayout.finishRefresh(); + activity.loadingNone(); + if (value != null) { + activity.policeList.addAll(value); + } + activity.adapter.notifyDataSetChanged(); + } + }); + } + + public void policeEmergencyLoadMore() { + activity.loadingShow(); + //加载数据 + GetPoliceEmergencyListParams params = new GetPoliceEmergencyListParams(); + pageNum++; + params.setPageNum(pageNum + ""); + activity.requestClient.getPoliceEmergency(params, new CustomCallBack>() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + activity.loadingNone(); + activity.binding.refreshLayout.finishLoadMore(); + UiUtils.toast(e.getMessage()); + } + + @Override + public void onSuccess(List value) { + activity.loadingNone(); + if (value == null || value.size() < Constants.PAGE_SIZE) { + activity.binding.refreshLayout.setNoMoreData(true); + } + if (value != null) { + activity.policeList.addAll(value); + } + activity.adapter.notifyDataSetChanged(); + activity.binding.refreshLayout.finishLoadMore(); + } + }); + } + + public void policeEmergencyDetail(String jcjbh) { + activity.loadingShow(); + activity.requestClient.getPoliceEmergencyDetail(jcjbh, new CustomCallBack() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + activity.loadingNone(); + UiUtils.toast(e.getMessage()); + } + + @Override + public void onSuccess(PoliceEmergencyDetail value) { + activity.loadingNone(); + PoliceEmergencyDetailActivity.startAction(activity, new Gson().toJson(value)); + } + }); + } + + public void getKeyPersonMessageCount() { + activity.loadingShow(); + activity.requestClient.getKeyPersonMessageCount(new CustomCallBack() { + @Override + public void onError(@NonNull Call call, @NonNull Exception e) { + activity.loadingNone(); + UiUtils.toast(e.getMessage()); + } + + @Override + public void onSuccess(DataCount value) { + activity.loadingNone(); + activity.binding.tvKeyPersonCount.setText(value.getZdryCount()); + activity.binding.tvPoliceEmergencyCount.setText(value.getJqCount()); + activity.binding.tvCaseDetailsCount.setText(value.getAqCount()); + activity.binding.tvKeyPersonTabCount.setText(value.getZdryCount()); + activity.binding.tvAreaKeyTabCount.setText(value.getZdryDeptCount()); + } + }); + } +} diff --git a/app/src/main/java/com/police/union/home/viewmodel/DetailViewModel.java b/app/src/main/java/com/police/union/home/viewmodel/DetailViewModel.java new file mode 100644 index 0000000..19eb2d5 --- /dev/null +++ b/app/src/main/java/com/police/union/home/viewmodel/DetailViewModel.java @@ -0,0 +1,54 @@ +package com.police.union.home.viewmodel; + +import androidx.annotation.NonNull; + + +import com.police.network.CustomCallBack; +import com.police.union.RequestClient; +import com.police.union.home.activity.ApplyDetailActivity; +import com.police.union.home.model.ApplyDetail; +import com.police.utils.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/union/personal/fragment/MineFragment.java b/app/src/main/java/com/police/union/personal/fragment/MineFragment.java new file mode 100644 index 0000000..2d10108 --- /dev/null +++ b/app/src/main/java/com/police/union/personal/fragment/MineFragment.java @@ -0,0 +1,33 @@ +package com.police.union.personal.fragment; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.police.base.BaseFragment; +import com.police.network.Constants; +import com.police.union.databinding.FragmentMineBinding; + +public class MineFragment extends BaseFragment { + private FragmentMineBinding binding; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + binding = FragmentMineBinding.inflate(inflater); + initView(); + return binding.getRoot(); + } + + private void initView() { + binding.tvUserName.setText(Constants.XM); + binding.tvUserPhone.setText(Constants.USER_ID); + binding.ivMineQuery.setOnClickListener(view -> { + //点击了切换所属组织功能 + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/union/widget/WaterMarkInfo.java b/app/src/main/java/com/police/union/widget/WaterMarkInfo.java new file mode 100644 index 0000000..b6cc943 --- /dev/null +++ b/app/src/main/java/com/police/union/widget/WaterMarkInfo.java @@ -0,0 +1,208 @@ +package com.police.union.widget; + +import android.graphics.Color; +import android.graphics.Paint; + +/** + * @author Leon (wshk729@163.com) + * @date 2018/8/24 + *

+ */ +public class WaterMarkInfo { + + private int mDegrees; + private int mTextColor; + private int mTextSize; + private boolean mTextBold; + private int mDx; + private int mDy; + private Paint.Align mAlign; + + private WaterMarkInfo(int degrees, int textColor, int textSize, boolean textBold, int dx, int dy, Paint.Align align) { + mDegrees = degrees; + mTextColor = textColor; + mTextSize = textSize; + mTextBold = textBold; + mDx = dx; + mDy = dy; + mAlign = align; + } + + public int getDegrees() { + return mDegrees; + } + + public int getTextColor() { + return mTextColor; + } + + public int getTextSize() { + return mTextSize; + } + + public int getDx() { + return mDx; + } + + public int getDy() { + return mDy; + } + + public Paint.Align getAlign() { + return mAlign; + } + + public int getAlignInt() { + switch (mAlign) { + case LEFT: + return 0; + case RIGHT: + return 2; + default: + return 1; + } + } + + public boolean isTextBold() { + return mTextBold; + } + + void setDegrees(int degrees) { + mDegrees = degrees; + } + + void setTextColor(int textColor) { + mTextColor = textColor; + } + + void setTextSize(int textSize) { + mTextSize = textSize; + } + + void setTextBold(boolean textBold) { + mTextBold = textBold; + } + + void setDx(int dx) { + mDx = dx; + } + + void setDy(int dy) { + mDy = dy; + } + + void setAlign(Paint.Align align) { + this.mAlign = align; + } + + public static Builder create() { + return new Builder(); + } + + public static class Builder { + private int mDegrees; + private int mTextColor; + private int mTextSize; + private boolean mTextBold; + private int mDx; + private int mDy; + private Paint.Align mAlign; + + private Builder() { + mDegrees = -30; + mTextColor = Color.parseColor("#33000000"); + mTextSize = 35; + mTextBold = false; + mDx = 100; + mDy = 240; + mAlign = Paint.Align.CENTER; + } + + /** + * 设置水印文字倾斜度 + * + * @param degrees 文字倾斜度(默认:-30) + * @return Builder + */ + public Builder setDegrees(int degrees) { + mDegrees = degrees; + return this; + } + + /** + * 设置水印文字颜色 + * + * @param textColor 文字颜色(默认:#33000000) + * @return Builder + */ + public Builder setTextColor(int textColor) { + mTextColor = textColor; + return this; + } + + /** + * 设置水印文字大小(单位:px) + * + * @param textSize 文字大小(默认:42px) + * @return Builder + */ + public Builder setTextSize(int textSize) { + mTextSize = textSize; + return this; + } + + /** + * 设置水印文字是否加粗 + * + * @param textBold 文字加粗(默认:false) + * @return Builder + */ + public Builder setTextBold(boolean textBold) { + mTextBold = textBold; + return this; + } + + /** + * 设置水印文字X轴间距(单位:px) + * + * @param dx 文字X轴间距(默认:100px) + * @return Builder + */ + public Builder setDx(int dx) { + mDx = dx; + return this; + } + + /** + * 设置水印文字Y轴间距(单位:px) + * + * @param dy 文字Y轴间距(默认:240px) + * @return Builder + */ + public Builder setDy(int dy) { + mDy = dy; + return this; + } + + /** + * 设置水印文字对齐方式 + * + * @param align 对齐方式(默认:Center) + * @return Builder + */ + public Builder setAlign(Paint.Align align) { + mAlign = align; + return this; + } + + /** + * 生成水印全局配置信息 + * + * @return 配置信息 + */ + public WaterMarkInfo generate() { + return new WaterMarkInfo(mDegrees, mTextColor, mTextSize, mTextBold, mDx, mDy, mAlign); + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/police/union/widget/WaterMarkManager.java b/app/src/main/java/com/police/union/widget/WaterMarkManager.java new file mode 100644 index 0000000..a51fb1e --- /dev/null +++ b/app/src/main/java/com/police/union/widget/WaterMarkManager.java @@ -0,0 +1,188 @@ +package com.police.union.widget; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.graphics.Paint; +import android.view.LayoutInflater; + + +import com.police.union.R; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Leon (wshk729@163.com) + * @date 2018/8/24 + *

+ */ +public class WaterMarkManager { + + static WaterMarkInfo INFO = null; + static String[] CONTENT = null; + static List LIST = new ArrayList<>(); + + /** + * 设置水印全局配置信息 + * + * @param info 配置信息 + */ + public static void setInfo(WaterMarkInfo info) { + INFO = info; + } + + /** + * 获取一个满屏水印View + * + * @param activity activity + */ + @SuppressLint("InflateParams") + public static WaterMarkView getView(Activity activity) { + return (WaterMarkView) LayoutInflater.from(activity).inflate(R.layout.view_water_mark, null); + } + + /** + * WaterMarkInfo初始化判断 + */ + private static void assertInitialized() { + if (INFO == null) { + INFO = WaterMarkInfo.create().generate(); + } + } + + /** + * 同步设置全部水印文字信息 + * + * @param content 文字信息 + */ + public static void setText(String... content) { + assertInitialized(); + CONTENT = content; + if (LIST.size() > 0) { + for (WaterMarkView view : LIST) { + if (view != null) { + view.setSyncText(content); + } + } + } + } + + /** + * 同步设置全部水印倾斜角度 + * + * @param degrees 倾斜角度(默认:-30) + */ + public static void setDegrees(int degrees) { + assertInitialized(); + INFO.setDegrees(degrees); + if (LIST.size() > 0) { + for (WaterMarkView view : LIST) { + if (view != null) { + view.setSyncDegrees(degrees); + } + } + } + } + + /** + * 同步设置全部水印字体颜色 + * + * @param textColor 字体颜色(默认:#33000000) + */ + public static void setTextColor(int textColor) { + assertInitialized(); + INFO.setTextColor(textColor); + if (LIST.size() > 0) { + for (WaterMarkView view : LIST) { + if (view != null) { + view.setSyncTextColor(textColor); + } + } + } + } + + /** + * 同步设置全部水印字体大小(单位:px) + * + * @param textSize 字体大小(默认:42px) + */ + public static void setTextSize(int textSize) { + assertInitialized(); + INFO.setTextSize(textSize); + if (LIST.size() > 0) { + for (WaterMarkView view : LIST) { + if (view != null) { + view.setSyncTextSize(textSize); + } + } + } + } + + /** + * 同步设置全部水印字体是否粗体 + * + * @param textBold 是否粗体(默认:false) + */ + public static void setTextBold(boolean textBold) { + assertInitialized(); + INFO.setTextBold(textBold); + if (LIST.size() > 0) { + for (WaterMarkView view : LIST) { + if (view != null) { + view.setSyncTextBold(textBold); + } + } + } + } + + /** + * 同步设置全部水印X轴偏移量(单位:px) + * + * @param dx X轴偏移量(默认:100px) + */ + public static void setDx(int dx) { + assertInitialized(); + INFO.setDx(dx); + if (LIST.size() > 0) { + for (WaterMarkView view : LIST) { + if (view != null) { + view.setSyncDx(dx); + } + } + } + } + + /** + * 同步设置全部水印Y轴偏移量(单位:px) + * + * @param dy Y轴偏移量(默认:240px) + */ + public static void setDy(int dy) { + assertInitialized(); + INFO.setDy(dy); + if (LIST.size() > 0) { + for (WaterMarkView view : LIST) { + if (view != null) { + view.setSignDy(dy); + } + } + } + } + + /** + * 同步设置全部水印对齐方式 + * + * @param align 对齐方式(默认:Center) + */ + public static void setAlign(Paint.Align align) { + assertInitialized(); + INFO.setAlign(align); + if (LIST.size() > 0) { + for (WaterMarkView view : LIST) { + if (view != null) { + view.setSignAlign(align); + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/police/union/widget/WaterMarkView.java b/app/src/main/java/com/police/union/widget/WaterMarkView.java new file mode 100644 index 0000000..f238cf0 --- /dev/null +++ b/app/src/main/java/com/police/union/widget/WaterMarkView.java @@ -0,0 +1,335 @@ +package com.police.union.widget; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.Typeface; +import android.text.TextPaint; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; + +import com.police.union.R; + + +public class WaterMarkView extends View { + + private static final String DEFAULT_SEPARATOR = "///"; + private TextPaint mTextPaint = new TextPaint(); + + private String[] mText; + private int mDegrees; + private int mTextColor; + private int mTextSize=35; + private boolean mTextBold; + private int mDx; + private int mDy; + private Paint.Align mAlign; + private boolean mSync; + private int textWidth, textHeight; + + public WaterMarkView(Context context) { + this(context, null); + } + + public WaterMarkView(Context context, AttributeSet attrs) { + super(context, attrs); + TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.WaterMarkView); + mDegrees = typedArray.getInt(R.styleable.WaterMarkView_water_mark_degree, WaterMarkManager.INFO != null ? WaterMarkManager.INFO.getDegrees() : -30); + String text = typedArray.getString(R.styleable.WaterMarkView_water_mark_text); + if (text != null) { + mText = text.split(DEFAULT_SEPARATOR); + } + mTextColor = typedArray.getColor(R.styleable.WaterMarkView_water_mark_textColor, WaterMarkManager.INFO != null ? WaterMarkManager.INFO.getTextColor() : Color.parseColor("#33000000")); + mTextSize = typedArray.getDimensionPixelSize(R.styleable.WaterMarkView_water_mark_textSize, WaterMarkManager.INFO != null ? WaterMarkManager.INFO.getTextSize() : 42); + mTextBold = typedArray.getBoolean(R.styleable.WaterMarkView_water_mark_textBold, WaterMarkManager.INFO != null && WaterMarkManager.INFO.isTextBold()); + mDx = typedArray.getDimensionPixelSize(R.styleable.WaterMarkView_water_mark_dx, WaterMarkManager.INFO != null ? WaterMarkManager.INFO.getDx() : 100); + mDy = typedArray.getDimensionPixelSize(R.styleable.WaterMarkView_water_mark_dy, WaterMarkManager.INFO != null ? WaterMarkManager.INFO.getDy() : 240); + int align = typedArray.getInt(R.styleable.WaterMarkView_water_mark_align, WaterMarkManager.INFO != null ? WaterMarkManager.INFO.getAlignInt() : 1); + mAlign = align == 0 ? Paint.Align.LEFT : align == 2 ? Paint.Align.RIGHT : Paint.Align.CENTER; + mSync = typedArray.getBoolean(R.styleable.WaterMarkView_water_mark_sync, true); + typedArray.recycle(); + + setBackgroundColor(Color.TRANSPARENT); + mTextPaint.setAntiAlias(true); + mTextPaint.setFlags(Paint.ANTI_ALIAS_FLAG); + mTextPaint.setColor(mTextColor); + mTextPaint.setTextSize(mTextSize); + mTextPaint.setTypeface(mTextBold ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT); + mTextPaint.setTextAlign(mAlign); + + mText = mText == null && mSync ? WaterMarkManager.CONTENT : mText; + + textWidth = 0; + textHeight = 0; + if (mText != null && mText.length > 0) { + for (String s : mText) { + Rect tvRect = new Rect(); + mTextPaint.getTextBounds(s, 0, s.length(), tvRect); + textWidth = textWidth > tvRect.width() ? textWidth : tvRect.width(); + textHeight += (tvRect.height() + 10); + } + } + + if (mSync) { + WaterMarkManager.LIST.add(this); + } + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + if (mText != null && mText.length > 0) { + int measuredWidth = getMeasuredWidth(); + int measuredHeight = getMeasuredHeight(); + + if (measuredWidth == 0 || measuredHeight == 0) { + return; + } + + int canvasLength = measuredWidth > measuredHeight ? measuredWidth : measuredHeight; + + canvas.save(); + canvas.rotate(mDegrees, measuredWidth / 2, measuredHeight / 2); + + canvas.save(); + int y = 0; + boolean odd = true; + while (y < canvasLength + textHeight) { + int x = odd ? 0 : -(textWidth + mDx) / 2; + while (x < canvasLength + textWidth) { + drawTexts(mText, mTextPaint, canvas, x, y); + x = x + textWidth + mDx; + } + y = y + textHeight + mDy; + odd = !odd; + } + canvas.restore(); + } + } + + private void drawTexts(String[] ss, Paint paint, Canvas canvas, int x, int y) { + Paint.FontMetrics fontMetrics = paint.getFontMetrics(); + float top = fontMetrics.top; + float bottom = fontMetrics.bottom; + int length = ss.length; + float total = (length - 1) * (bottom - top) + (fontMetrics.descent - fontMetrics.ascent); + float offset = total / 2 - bottom; + for (int i = 0; i < length; i++) { + float yAxis = -(length - i - 1) * (bottom - top) + offset; + canvas.drawText(ss[i], x, y + yAxis + 10, paint); + } + } + + /** + * 设置水印文字内容 + * + * @param text 文字内容 + */ + public void setText(String... text) { + mText = text; + + textWidth = 0; + textHeight = 0; + if (mText != null && mText.length > 0) { + for (String s : mText) { + Rect tvRect = new Rect(); + mTextPaint.getTextBounds(s, 0, s.length(), tvRect); + textWidth = textWidth > tvRect.width() ? textWidth : tvRect.width(); + textHeight += (tvRect.height() + 10); + } + } + postInvalidate(); + } + + /** + * 同步设置水印文字内容 + * + * @param text 文字内容 + */ + void setSyncText(String... text) { + if (mSync) { + setText(text); + } + } + + /** + * 设置水印倾斜角度 + * + * @param degrees 倾斜角度(默认:-30) + */ + public void setDegrees(int degrees) { + mDegrees = degrees; + postInvalidate(); + } + + /** + * 同步设置水印倾斜角度 + * + * @param degrees 倾斜角度(默认:-30) + */ + void setSyncDegrees(int degrees) { + if (mSync) { + setDegrees(degrees); + } + } + + /** + * 设置水印字体颜色 + * + * @param textColor 字体颜色(默认:#33000000) + */ + public void setTextColor(int textColor) { + mTextColor = textColor; + mTextPaint.setColor(mTextColor); + postInvalidate(); + } + + /** + * 同步设置水印字体颜色 + * + * @param textColor 字体颜色(默认:#33000000) + */ + void setSyncTextColor(int textColor) { + if (mSync) { + setTextColor(textColor); + } + } + + /** + * 设置水印字体大小(单位:px) + * + * @param textSize 字体大小(默认:42px) + */ + public void setTextSize(int textSize) { + mTextSize = textSize; + mTextPaint.setTextSize(mTextSize); + postInvalidate(); + } + + /** + * 同步设置水印字体大小(单位:px) + * + * @param textSize 字体大小(默认:42px) + */ + void setSyncTextSize(int textSize) { + if (mSync) { + setTextSize(textSize); + } + } + + /** + * 设置水印字体是否粗体 + * + * @param textBold 是否粗体(默认:false) + */ + public void setTextBold(boolean textBold) { + mTextBold = textBold; + mTextPaint.setTypeface(mTextBold ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT); + postInvalidate(); + } + + /** + * 同步设置水印字体是否粗体 + * + * @param textBold 是否粗体(默认:false) + */ + void setSyncTextBold(boolean textBold) { + if (mSync) { + setTextBold(textBold); + } + } + + /** + * 设置水印X轴偏移量(单位:px) + * + * @param dx X轴偏移量(默认:100px) + */ + public void setDx(int dx) { + this.mDx = dx; + postInvalidate(); + } + + /** + * 同步设置水印X轴偏移量(单位:px) + * + * @param dx X轴偏移量(默认:100px) + */ + void setSyncDx(int dx) { + if (mSync) { + setDx(dx); + } + } + + /** + * 设置水印Y轴偏移量(单位:px) + * + * @param dy Y轴偏移量(默认:240px) + */ + public void setDy(int dy) { + this.mDy = dy; + postInvalidate(); + } + + /** + * 同步设置水印Y轴偏移量(单位:px) + * + * @param dy Y轴偏移量(默认:240px) + */ + void setSignDy(int dy) { + if (mSync) { + setDy(dy); + } + } + + /** + * 设置水印对齐方式 + * + * @param align 对齐方式(默认:Center) + */ + public void setAlign(Paint.Align align) { + this.mAlign = align; + postInvalidate(); + } + + /** + * 同步设置水印对齐方式 + * + * @param align 对齐方式(默认:Center) + */ + void setSignAlign(Paint.Align align) { + if (mSync) { + setAlign(align); + } + } + + /** + * 销毁相关页面时调用(切记) + */ + public void onDestroy() { + if (mSync) { + WaterMarkManager.LIST.remove(this); + } + } + + @Override + public boolean dispatchTouchEvent(MotionEvent event) { + return false; + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent event) { + return false; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/all_10_ccc_bg.xml b/app/src/main/res/drawable/all_10_ccc_bg.xml new file mode 100644 index 0000000..757b52d --- /dev/null +++ b/app/src/main/res/drawable/all_10_ccc_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file 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_2_4b8e01_bg.xml b/app/src/main/res/drawable/all_2_4b8e01_bg.xml new file mode 100644 index 0000000..257761d --- /dev/null +++ b/app/src/main/res/drawable/all_2_4b8e01_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/all_2_de7900_bg.xml b/app/src/main/res/drawable/all_2_de7900_bg.xml new file mode 100644 index 0000000..29c0007 --- /dev/null +++ b/app/src/main/res/drawable/all_2_de7900_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/all_2_selected_bg.xml b/app/src/main/res/drawable/all_2_selected_bg.xml new file mode 100644 index 0000000..352767f --- /dev/null +++ b/app/src/main/res/drawable/all_2_selected_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/all_3_ccc_bg.xml b/app/src/main/res/drawable/all_3_ccc_bg.xml new file mode 100644 index 0000000..a4e3f93 --- /dev/null +++ b/app/src/main/res/drawable/all_3_ccc_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_fff_bg.xml b/app/src/main/res/drawable/all_7_fff_bg.xml new file mode 100644 index 0000000..65ffac7 --- /dev/null +++ b/app/src/main/res/drawable/all_7_fff_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 new file mode 100644 index 0000000..f7fd2cb --- /dev/null +++ b/app/src/main/res/drawable/all_7_line_ccc_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/all_7_main_bg.xml b/app/src/main/res/drawable/all_7_main_bg.xml new file mode 100644 index 0000000..5375343 --- /dev/null +++ b/app/src/main/res/drawable/all_7_main_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/b6f7e9_10_bg.xml b/app/src/main/res/drawable/b6f7e9_10_bg.xml new file mode 100644 index 0000000..1eb82cf --- /dev/null +++ b/app/src/main/res/drawable/b6f7e9_10_bg.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/border_f7933b_6_bg.xml b/app/src/main/res/drawable/border_f7933b_6_bg.xml new file mode 100644 index 0000000..388e126 --- /dev/null +++ b/app/src/main/res/drawable/border_f7933b_6_bg.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/f7eab6_10_bg.xml b/app/src/main/res/drawable/f7eab6_10_bg.xml new file mode 100644 index 0000000..92f9fcd --- /dev/null +++ b/app/src/main/res/drawable/f7eab6_10_bg.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/f7f7f7_top_20_bg.xml b/app/src/main/res/drawable/f7f7f7_top_20_bg.xml new file mode 100644 index 0000000..e1d5880 --- /dev/null +++ b/app/src/main/res/drawable/f7f7f7_top_20_bg.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/f9e2e2_10_bg.xml b/app/src/main/res/drawable/f9e2e2_10_bg.xml new file mode 100644 index 0000000..7934d05 --- /dev/null +++ b/app/src/main/res/drawable/f9e2e2_10_bg.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/fbe5ca_10_bg.xml b/app/src/main/res/drawable/fbe5ca_10_bg.xml new file mode 100644 index 0000000..cab79ef --- /dev/null +++ b/app/src/main/res/drawable/fbe5ca_10_bg.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/right_7_052eba_bg.xml b/app/src/main/res/drawable/right_7_052eba_bg.xml new file mode 100644 index 0000000..f3f0ed4 --- /dev/null +++ b/app/src/main/res/drawable/right_7_052eba_bg.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/top_10_f7_bg.xml b/app/src/main/res/drawable/top_10_f7_bg.xml new file mode 100644 index 0000000..1939c23 --- /dev/null +++ b/app/src/main/res/drawable/top_10_f7_bg.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/white_round_bg.xml b/app/src/main/res/drawable/white_round_bg.xml new file mode 100644 index 0000000..522eb16 --- /dev/null +++ b/app/src/main/res/drawable/white_round_bg.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/white_top_20_bg.xml b/app/src/main/res/drawable/white_top_20_bg.xml new file mode 100644 index 0000000..14a189b --- /dev/null +++ b/app/src/main/res/drawable/white_top_20_bg.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_apply.xml b/app/src/main/res/layout/activity_apply.xml new file mode 100644 index 0000000..88483e0 --- /dev/null +++ b/app/src/main/res/layout/activity_apply.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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..fdd58eb --- /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_data.xml b/app/src/main/res/layout/activity_data.xml new file mode 100644 index 0000000..889e8d2 --- /dev/null +++ b/app/src/main/res/layout/activity_data.xml @@ -0,0 +1,365 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_key_person_detail.xml b/app/src/main/res/layout/activity_key_person_detail.xml new file mode 100644 index 0000000..c70034f --- /dev/null +++ b/app/src/main/res/layout/activity_key_person_detail.xml @@ -0,0 +1,896 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..9c29cf4 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 new file mode 100644 index 0000000..3d59080 --- /dev/null +++ b/app/src/main/res/layout/activity_police_emergency_detail.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_query_apply_result.xml b/app/src/main/res/layout/activity_query_apply_result.xml new file mode 100644 index 0000000..6d3515c --- /dev/null +++ b/app/src/main/res/layout/activity_query_apply_result.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + \ 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 new file mode 100644 index 0000000..b1e9c58 --- /dev/null +++ b/app/src/main/res/layout/dialog_selector.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/app/src/main/res/layout/dropdown_layout.xml b/app/src/main/res/layout/dropdown_layout.xml new file mode 100644 index 0000000..118fcd8 --- /dev/null +++ b/app/src/main/res/layout/dropdown_layout.xml @@ -0,0 +1,31 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dropdown_layout2.xml b/app/src/main/res/layout/dropdown_layout2.xml new file mode 100644 index 0000000..6cee519 --- /dev/null +++ b/app/src/main/res/layout/dropdown_layout2.xml @@ -0,0 +1,41 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dropdown_layout3.xml b/app/src/main/res/layout/dropdown_layout3.xml new file mode 100644 index 0000000..bdac730 --- /dev/null +++ b/app/src/main/res/layout/dropdown_layout3.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dropdown_layout4.xml b/app/src/main/res/layout/dropdown_layout4.xml new file mode 100644 index 0000000..a9fdb37 --- /dev/null +++ b/app/src/main/res/layout/dropdown_layout4.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dropdown_layout5.xml b/app/src/main/res/layout/dropdown_layout5.xml new file mode 100644 index 0000000..7148c5c --- /dev/null +++ b/app/src/main/res/layout/dropdown_layout5.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_chat.xml b/app/src/main/res/layout/fragment_chat.xml new file mode 100644 index 0000000..5b258e7 --- /dev/null +++ b/app/src/main/res/layout/fragment_chat.xml @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml new file mode 100644 index 0000000..30459d1 --- /dev/null +++ b/app/src/main/res/layout/fragment_home.xml @@ -0,0 +1,289 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml new file mode 100644 index 0000000..cb0c584 --- /dev/null +++ b/app/src/main/res/layout/fragment_mine.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_police_emergency_detail_apply_info.xml b/app/src/main/res/layout/include_police_emergency_detail_apply_info.xml new file mode 100644 index 0000000..9ff26d4 --- /dev/null +++ b/app/src/main/res/layout/include_police_emergency_detail_apply_info.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + \ 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..f9e7a60 --- /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..0d95c8a --- /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 new file mode 100644 index 0000000..c30c755 --- /dev/null +++ b/app/src/main/res/layout/item_apply_fragment_1.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_apply_fragment_2.xml b/app/src/main/res/layout/item_apply_fragment_2.xml new file mode 100644 index 0000000..aae3f12 --- /dev/null +++ b/app/src/main/res/layout/item_apply_fragment_2.xml @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_dialog_selector.xml b/app/src/main/res/layout/item_dialog_selector.xml new file mode 100644 index 0000000..333cafa --- /dev/null +++ b/app/src/main/res/layout/item_dialog_selector.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/layout/item_key_person.xml b/app/src/main/res/layout/item_key_person.xml new file mode 100644 index 0000000..f0158ab --- /dev/null +++ b/app/src/main/res/layout/item_key_person.xml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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_police_emergency.xml b/app/src/main/res/layout/item_police_emergency.xml new file mode 100644 index 0000000..f00b7e4 --- /dev/null +++ b/app/src/main/res/layout/item_police_emergency.xml @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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/layout/view_water_mark.xml b/app/src/main/res/layout/view_water_mark.xml new file mode 100644 index 0000000..d3fd223 --- /dev/null +++ b/app/src/main/res/layout/view_water_mark.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/back.png b/app/src/main/res/mipmap-xxhdpi/back.png new file mode 100644 index 0000000000000000000000000000000000000000..76e3e82c86223a01bdf01855ccc955db193d0a60 GIT binary patch literal 688 zcmV;h0#E&kP)Cfog`K$GV-HS-=ov_oO|zc?>YCgnV#=_&wb52KhE<#H*2@sG?dxE75RB^QiI4i zFhd?6@A6vWGgBcZA5ud@z(a+61%^{XL-L=@Qpg(MRVrw(0C{d6q=5Q?`wIC1thY!C z$RK0DJcVok9=nY((DVXiOgGns`heRC`2}naA$6fXc}*56WQ){;sR|V#H@t2qRiG)r zHHG{Ewv{1NfDCdASgw$rz*Vn1kWL_rtOy|Iz3!ZpL6d{h=!1|0QPL_p?(djrTJuR9Vt&@@8eU5D(@nOBWWcdOOvQJdvLU;wz28XA|4 zbE(3n0r$KW5fC!;4G3Vf1n31Gc&j2HACt8u*2&Pq{^f^A#=ndr`9Fk%B5J<+55X3OG4OouR8*A zv1jT!XMjy!cLZdyb-)X!)+4iE5Q{nSeUZa(M_B9`)?%*}b`e;a60+E8;Ehx3l@rK+ zEY*F6&vMaREajaOi@jBtIVCPmeJ{vhW`}?0)TRO#nz+05UcM+@tiK7!#hw5kfsucl Wt%I$Vk#$`F0000x;^#6U* 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/icon_14.png b/app/src/main/res/mipmap-xxhdpi/icon_14.png new file mode 100644 index 0000000000000000000000000000000000000000..9bbeb496f7a841ae4f58ee4736c5b0d8a85be03b GIT binary patch literal 598 zcmV-c0;&CpP)^h{hs? zsS*^?G$L9=Pzeeug1mAzcl4Sw6(*;wR(*|ds&l09 zIU?!3q$`qoOR;{J@S|VSYz=_}WdVVwk_MIvXt2mFU>AAW3rqvM%TY|gQQ%nS;DJG4 z64+N3aMm@;%O>C}H+m&=5UBF&`Mz$<5| zPSj^gfW0c$IP3DUIEP}rQv!AXw}EXHg_!@Xz)fI}t8K9hP8TIBsVC4iRt5amso0KD z*MSeNrZX%RUj}x@dZh$d(1SGu58MNu759R_NKL_m8iN}Pg-=IHz-DKu&c>LBlz`*y z94I@$vf!y$^VAyX1s(%;fY-oJ*P=aafWyEUV12AdN&wAE1Dtc#nn_JT*DwK}RxtjL zMsZ(XDdz0V*Jl@m;@#hE#_b7w1y0tSc-r9x@Th!fv_F(`-IU8LNV*tK+|7?ASOVIg kAsc=JUN%P!Uz!%+7w(_%r$~8Z#{d8T07*qoM6N<$g65?Wod5s; literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/icon_aj.png b/app/src/main/res/mipmap-xxhdpi/icon_aj.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0087f2738e38b3549d048ce92cea6ba9e500e8 GIT binary patch literal 1677 zcmV;826Fj{P)002S=1^@s6A3-Z300001b5ch_0Itp) z=>Px*M@d9MRCr$PoL^qsI1tBwW4h0qo&b7+r6*V=9H8_B3nwT%FD?PoXW#^6Ptb4x z5^;i(6BJIc;k~i;Gm32#lf+W|e?Ry&vMhc5o6%@S4xwS!-G#Uzg#$$x?48KNCJm38 zGMI5+bi#MIWKi*#7?}49$KAf1HesBNfW@HH7RCT}mq2--8M;jXRy(Y5Aodk-1E8}; zJyQY>yS^OOsj%8$jr(FJe1}uh?6N>8VCc=XSw3d9E#vpfVX?_!3ttp)l%b|o^PQ5y z03oichE^G@(M9)@g4%acQkFVcX+$*Wos4g@+7|J9DX`eYlt|g~#DCjuoe|Ztm?fTM2h1v5TzroUw-jp?m@TRP6o0+$GgJnyq<*+6? z*aY?g{NXU?jhnVsS@AMnWw_E-Sd*SFlQhjJ5D!(TtCg@6aJJ{mer!*77vhK%E;qI> z%Ntt>i#&Yn{w-Ne`l`wl+X(Bq=gU_Kz$#3!jj;ad`BLZKdB+fMKdLar*1;m+bDTCF zU5KB(6ZxSkQ*0ls8QyaaD$2=!Uw{_~P9twy`fKNAZG&~+^QF#}jRG+M@E3r@Ebjtw zMZgzl3YIst3YH=q@14l22-d$*R(0C*<$G<4-^8v8@xyZN&dpi{D~a0YWwGz^Y^yTG zx?nv67%IS}RMpw@C0BY(6O4JitdQTtZW!wQqV3fo=<4?GSvS-IixdvKUnTn->x&(_ zxeBIo_=zc6cW5+>7mKWWYk_6@o~!{zVFA|=cR8k7H8Il^ZTd9Z*v4qJz~X_D!WBZC znWd;GEq%IVvK+C;hd$O-j@IVK$-{AKo791aQ$@Ovn|aj+OOK53s7=x+0z@ksn`n_a zstI{GSOCTK0>X_;Nv>X4(Ysuxvb#X^30S7GOa&MXo)vIqW+?Qr00%Xh4{HRhl2mq2 zGaQ(8K5gcXYHB8|6)I!1hnAJnimmf8#g10}7hoxhy`SD2J3tC;~nS@aw zIONET&TTp_7FLl5LlkZ))DC*OB52fGCd^A=3oud}?l?PP!((k5iqb<_9a)v{xsy@A zXG8K|9DgCikYSAi!I=c}&@HcY`#P`1s`D^NndpltrZ(MqM%MGC6$h(Eg~E!He2Z#* zR)l_>rZFd;R$m#WSO%;je8fva@1@N3Itq_g${1SY(AhM%OEAT!o-eHq;Mpt7e$`rO z5vlyt4+Y$NGxXzqq>h`maKokh^alfmS#Bq*ViBgOaNGMTtx`YMuxxkmYkWsi>WWS* z>uf`!p7|LtPW-);!+4KL_`I<9I~NDB&x_ncF2%cKN~~cO5ZfdsmC=l%X{&elnHW-cjb%Mn=Ic$6v#?F2RgsI|8s*9Rd6Oc5+A$~(gh5975y+Q#f z;5sgp*g|%Ol|x;&W2&OvGtIE$`W1#VES^bDr&wa5ZQ*nO3UTnu9=;+S zoOhhA_b2IT*BjTh&+Xt>b)I9>oojwB`6<^2l?JN@v%Dt{M|nbnEO@2DO2UhC!GFZV z>6kK396yml-}Mk(7MNwfR{|@J_`@w6>Fh%>LF|(P2Hp%;n?~fWz$$~a5SQgs+JuiX zRiUIb%vxZX(SI1?z~Z1RpT`<_9tLIlq%5V?3Tr`af#81^5yls+`ioZ2!>~?3<{1A2 X6-=gZ)!kOr00000NkvXXu0mjfE=?@7 literal 0 HcmV?d00001 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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 XvucV=jl(b_00000NkvXXu0mjf@HM#v 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 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/icon_fnsq.png b/app/src/main/res/mipmap-xxhdpi/icon_fnsq.png new file mode 100644 index 0000000000000000000000000000000000000000..9907126745e84083720a0b3c829a148f6aa5cb43 GIT binary patch literal 627 zcmV-(0*w8MP)Px%ElET{RCr$P+c8eVFcb!0dq7>`2rUPoQ_BWBT{r>l4SEx}0lfiBI@6I(G#5y& zz*==M3ZhbxN|N8taq^Ld!z|yB&fIt-qArOINn+OxsWP&D1{$!0? z8e_(?b*j_bt+uo4MV*!*+ju2t{FYx1F5G(@nA7RTNAd!iCfR3voFi0RBpB#+ozIfr|D_5P@WoVuJdfAXz@b_eKwm z#!s>EQg5TF16 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/icon_home_normal.png b/app/src/main/res/mipmap-xxhdpi/icon_home_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..eb3283e6fe44c593a9549ea7be7baf7dd6ad6991 GIT binary patch literal 4825 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/icon_home_selected.png b/app/src/main/res/mipmap-xxhdpi/icon_home_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..cd3b6ab4e23991dafe652f07f8dd390f2ef80b99 GIT binary patch literal 3849 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/icon_jq_normal.png b/app/src/main/res/mipmap-xxhdpi/icon_jq_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..e38aef1c90dc87eda3b3cf7546c06a08838d8502 GIT binary patch literal 1705 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