mac
2023-09-23 b8209d15d915f72d9abe3a68b76e1f4cfd21eac3
2023年09月23日14:36:51

忘记密码
15个文件已添加
83个文件已删除
25个文件已修改
4 文件已重命名
3241 ■■■■■ 已修改文件
.gradle/7.2/dependencies-accessors/dependencies-accessors.lock 补丁 | 查看 | 原始文档 | blame | 历史
.gradle/7.2/dependencies-accessors/gc.properties 补丁 | 查看 | 原始文档 | blame | 历史
.gradle/7.2/executionHistory/executionHistory.bin 补丁 | 查看 | 原始文档 | blame | 历史
.gradle/7.2/executionHistory/executionHistory.lock 补丁 | 查看 | 原始文档 | blame | 历史
.gradle/7.2/fileChanges/last-build.bin 补丁 | 查看 | 原始文档 | blame | 历史
.gradle/7.2/fileHashes/fileHashes.bin 补丁 | 查看 | 原始文档 | blame | 历史
.gradle/7.2/fileHashes/fileHashes.lock 补丁 | 查看 | 原始文档 | blame | 历史
.gradle/7.2/fileHashes/resourceHashesCache.bin 补丁 | 查看 | 原始文档 | blame | 历史
.gradle/7.2/gc.properties 补丁 | 查看 | 原始文档 | blame | 历史
.gradle/buildOutputCleanup/buildOutputCleanup.lock 补丁 | 查看 | 原始文档 | blame | 历史
.gradle/buildOutputCleanup/cache.properties 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gradle/buildOutputCleanup/outputFiles.bin 补丁 | 查看 | 原始文档 | blame | 历史
.gradle/checksums/checksums.lock 补丁 | 查看 | 原始文档 | blame | 历史
.gradle/vcs-1/gc.properties 补丁 | 查看 | 原始文档 | blame | 历史
.idea/compiler.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_activity_activity_1_2_3_aar.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_annotation_annotation_1_2_0.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_0_0_aar.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_appcompat_appcompat_1_3_0_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_3_0_aar.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_0_4_aar.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_2_0_4.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_core_core_1_5_0_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_customview_customview_1_1_0_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_1_1_aar.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_dynamicanimation_dynamicanimation_1_0_0_aar.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_fragment_fragment_1_3_4_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_legacy_legacy_support_v4_1_0_0_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_3_1.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_3_1_aar.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_media_media_1_0_0_aar.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_navigation_navigation_common_2_3_5_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_navigation_navigation_fragment_2_3_5_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_navigation_navigation_runtime_2_3_5_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_navigation_navigation_ui_2_3_5_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_1_0_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_test_core_1_4_0_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_test_espresso_espresso_core_3_4_0_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_test_espresso_espresso_idling_resource_3_4_0_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_test_ext_junit_1_1_3_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_test_monitor_1_4_0_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_test_runner_1_4_0_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_test_services_storage_1_4_0_aar.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_transition_transition_1_2_0_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_transition_transition_1_3_0_aar.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__com_google_android_material_material_1_4_0_aar.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__com_squareup_javawriter_2_1_1.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__javax_inject_javax_inject_1.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__junit_junit_4_12.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__junit_junit_4_13_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/misc.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/modules/PhotovoltaicDebug.iml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/modules/app/PhotovoltaicDebug.app.iml 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/vcs.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/workspace.xml 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/build.gradle 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/AndroidManifest.xml 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/HDLApp.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/internet/HttpClient.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/other/HdlAccountLogic.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/other/HdlResidenceLogic.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/other/HdlThreadLogic.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/MyPowerStationActivity.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/account/ChangePassword.java 494 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/account/RegisterAccountActivity.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/message/MessageFragment.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/widget/ConfirmationCancelDialog.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/widget/ConfirmationExceptionDialog.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/widget/ConfirmationInputDialog.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/widget/ConfirmationTipDialog.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/back.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/confirmation_bj.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/message_select.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/message_unselected.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/red_font.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/region.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/spinner.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/succeed.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_change_password.xml 315 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_home_login.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_my_power_station.xml 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_register_account.xml 347 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/dialog_confirm_cancel.xml 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/dialog_confirm_input.xml 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/dialog_confirmation_tip.xml 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/dialog_exception_log.xml 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_house_list.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_message.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/frgment_house_list_line.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/home_bottom_line.xml 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/text_underline.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values/strings.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
local.properties 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gradle/7.2/dependencies-accessors/dependencies-accessors.lock
Binary files differ
.gradle/7.2/dependencies-accessors/gc.properties
.gradle/7.2/executionHistory/executionHistory.bin
Binary files differ
.gradle/7.2/executionHistory/executionHistory.lock
Binary files differ
.gradle/7.2/fileChanges/last-build.bin
Binary files differ
.gradle/7.2/fileHashes/fileHashes.bin
Binary files differ
.gradle/7.2/fileHashes/fileHashes.lock
Binary files differ
.gradle/7.2/fileHashes/resourceHashesCache.bin
Binary files differ
.gradle/7.2/gc.properties
.gradle/buildOutputCleanup/buildOutputCleanup.lock
Binary files differ
.gradle/buildOutputCleanup/cache.properties
File was deleted
.gradle/buildOutputCleanup/outputFiles.bin
Binary files differ
.gradle/checksums/checksums.lock
Binary files differ
.gradle/vcs-1/gc.properties
.idea/compiler.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="CompilerConfiguration">
    <bytecodeTargetLevel target="11" />
    <bytecodeTargetLevel target="1.8" />
  </component>
</project>
.idea/libraries/Gradle__androidx_activity_activity_1_2_3_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_annotation_annotation_1_2_0.xml
File was deleted
.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_appcompat_appcompat_1_3_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_3_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml
File was deleted
.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml
File was deleted
.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_0_4_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_2_0_4.xml
File was deleted
.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_core_core_1_5_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_customview_customview_1_1_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_1_1_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_dynamicanimation_dynamicanimation_1_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_fragment_fragment_1_3_4_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_legacy_legacy_support_v4_1_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_3_1.xml
File was deleted
.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_3_1_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_media_media_1_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_navigation_navigation_common_2_3_5_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_navigation_navigation_fragment_2_3_5_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_navigation_navigation_runtime_2_3_5_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_navigation_navigation_ui_2_3_5_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_1_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_test_core_1_4_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_test_espresso_espresso_core_3_4_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_test_espresso_espresso_idling_resource_3_4_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_test_ext_junit_1_1_3_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_test_monitor_1_4_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_test_runner_1_4_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_test_services_storage_1_4_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_transition_transition_1_2_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_transition_transition_1_3_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml
File was deleted
.idea/libraries/Gradle__com_google_android_material_material_1_4_0_aar.xml
File was deleted
.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1.xml
File was deleted
.idea/libraries/Gradle__com_squareup_javawriter_2_1_1.xml
File was deleted
.idea/libraries/Gradle__javax_inject_javax_inject_1.xml
File was deleted
.idea/libraries/Gradle__junit_junit_4_12.xml
File was deleted
.idea/libraries/Gradle__junit_junit_4_13_2.xml
File was deleted
.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml
File was deleted
.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3.xml
File was deleted
.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3.xml
File was deleted
.idea/misc.xml
@@ -1,24 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="DesignSurface">
    <option name="filePathToZoomLevelMap">
      <map>
        <entry key="../../../../../layout/custom_preview.xml" value="0.22314814814814815" />
        <entry key="app/src/main/res/drawable/progress_small.xml" value="0.1275" />
        <entry key="app/src/main/res/layout/activity_home_login.xml" value="0.10030395136778116" />
        <entry key="app/src/main/res/layout/activity_my_power_station.xml" value="0.10030395136778116" />
        <entry key="app/src/main/res/layout/fragment_house_list.xml" value="0.10030395136778116" />
        <entry key="app/src/main/res/layout/fragment_me.xml" value="0.10030395136778116" />
        <entry key="app/src/main/res/layout/frgment_house_list_line.xml" value="0.1921875" />
        <entry key="app/src/main/res/layout/loading_alert.xml" value="0.1" />
        <entry key="app/src/main/res/layout/loading_confirm.xml" value="0.1" />
        <entry key="app/src/main/res/layout/loading_confirm_input.xml" value="0.1" />
        <entry key="app/src/main/res/layout/loading_exception_log.xml" value="0.1921875" />
        <entry key="app/src/main/res/layout/toolbar_top_view_44.xml" value="0.1921875" />
        <entry key="app/src/main/res/layout/toolbar_top_view_52.xml" value="0.10030395136778116" />
      </map>
    </option>
  </component>
  <component name="ExternalStorageConfigurationManager" enabled="true" />
  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK" />
  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="corretto-1.8" project-jdk-type="JavaSDK" />
</project>
.idea/modules/PhotovoltaicDebug.iml
File was deleted
.idea/modules/app/PhotovoltaicDebug.app.iml
File was deleted
.idea/vcs.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="VcsDirectoryMappings">
    <mapping directory="$PROJECT_DIR$" vcs="Git" />
    <mapping directory="" vcs="Git" />
  </component>
</project>
.idea/workspace.xml
File was deleted
app/build.gradle
@@ -8,12 +8,12 @@
]
android {
    compileSdk 32
    compileSdk 30
    defaultConfig {
        applicationId "com.hdl.photovoltaic"
        minSdk 23
        targetSdk 32
        targetSdk 30
        versionCode 1
        versionName "1.0"
@@ -72,9 +72,13 @@
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
//    implementation 'org.greenrobot:eventbus:3.0.0'
    implementation 'com.hdl.hdlhttp:hxhttp:1.0.4'
    //okhttp 打印
    implementation 'com.squareup.okhttp3:logging-interceptor:4.9.1'
    //Eventbus事件发布与接收
    implementation 'org.greenrobot:eventbus:3.3.1'
    //屏幕适配
    implementation 'com.github.JessYanCoding:AndroidAutoSize:v1.2.1'
    //********UniSDK必须添加的依赖 start********
app/src/main/AndroidManifest.xml
@@ -3,26 +3,20 @@
    xmlns:tools="http://schemas.android.com/tools"
    package="com.hdl.photovoltaic">
    <uses-permission
        android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
        tools:ignore="ProtectedPermissions" />
<!--    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />-->
<!--    <uses-permission android:name="android.permission.CAMERA" />-->
    <uses-permission android:name="android.permission.VIBRATE" />
<!--    <uses-permission android:name="android.permission.INTERNET" />-->
<!--    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />-->
<!--    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />-->
<!--    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />-->
<!--    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />-->
<!--    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />-->
<!--    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />-->
        tools:ignore="ProtectedPermissions" /> <!-- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> -->
    <!-- <uses-permission android:name="android.permission.CAMERA" /> -->
    <uses-permission android:name="android.permission.VIBRATE" /> <!-- <uses-permission android:name="android.permission.INTERNET" /> -->
    <!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> -->
    <!-- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> -->
    <!-- <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> -->
    <!-- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> -->
    <!-- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> -->
    <!-- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> -->
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<!--    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
    <!-- wifi状态权限 -->
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" /> <!-- <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> -->
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> <!-- wifi状态权限 -->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.INTERNET" /> <!-- 位置信息 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 如果是安卓10.0,需要后台获取连接的wifi名称则添加进程获取位置信息权限 -->
@@ -72,8 +66,7 @@
    <uses-permission android:name="com.hdl.debugtreasure.permission.JPUSH_MESSAGE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.BLUETOOTH" /> <!-- 基座删除的部分权限 -->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <application
        android:name=".HDLApp"
@@ -84,6 +77,12 @@
        android:supportsRtl="true"
        android:theme="@style/Theme.PhotovoltaicDebug">
        <activity
            android:name=".ui.account.ChangePassword"
            android:exported="false" />
        <activity
            android:name=".ui.account.RegisterAccountActivity"
            android:exported="false" />
        <activity
            android:name=".ui.device.FastScanActivity"
            android:exported="false" />
        <activity
app/src/main/java/com/hdl/photovoltaic/HDLApp.java
@@ -10,6 +10,7 @@
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.hdl.hdlhttp.HxHttpConfig;
import com.hdl.linkpm.sdk.HDLLinkPMSdk;
import com.hdl.linkpm.sdk.user.HDLLinkPMUser;
import com.hdl.linkpm.sdk.user.callback.IOnReloginListener;
@@ -36,6 +37,7 @@
import io.dcloud.feature.sdk.DCSDKInitConfig;
import io.dcloud.feature.sdk.DCUniMPSDK;
import io.dcloud.feature.sdk.Interface.IDCUniMPPreInitCallback;
import okhttp3.logging.HttpLoggingInterceptor;
public class HDLApp extends Application {
    //控制打印 Debug模式打印
@@ -111,6 +113,9 @@
        initHDLLinkPMSdk();
        HDLLinkLocalSdk.getInstance().init(getInstance());
        initSocket();
        //4.初始化OKHttpLog 是否开启
//        setOKHttpLogOpen(isLogEnabled);
    }
    /**
@@ -169,6 +174,16 @@
        HDLUdpConnect.getInstance().initUdp();
    }
    /**
     * 初始化OKHttpLog
     */
    private void setOKHttpLogOpen(Boolean isOpen) {
        if (isOpen) {
            HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
            httpLoggingInterceptor.level(HttpLoggingInterceptor.Level.BODY);
            HxHttpConfig.getInstance().addInterceptor(httpLoggingInterceptor);
        }
    }
//    /**
//     * 初始化uni app mqtt
//     */
app/src/main/java/com/hdl/photovoltaic/internet/HttpClient.java
@@ -9,6 +9,7 @@
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import com.hdl.hdlhttp.HxHttp;
import com.hdl.hdlhttp.HxHttpBuilder;
import com.hdl.hdlhttp.utils.GsonConvert;
import com.hdl.linkpm.sdk.core.api.HDLCloudUserApi;
import com.hdl.linkpm.sdk.core.exception.HDLException;
@@ -35,6 +36,7 @@
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Headers;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
@@ -62,12 +64,16 @@
     * 底层方法,引用库的方法
     *
     * @param api      请求接口
     * @param body     请求参数
     * @param body     请求参数(appKey,timestamp,sign这三个参数内部会自动添加))
     * @param callBack 回调
     * @return -
     */
    private Disposable request(String api, String body, CloudCallBeak<String> callBack) {
        String requestUrl = HDLCloudUserApi.getRequestUrl(api);
        Gson gson = new Gson();
        System.out.println("发送->" + requestUrl + "\r\n" + body);
        return HxHttp.builder()
                .url(requestUrl)
                .raw(body)
@@ -78,6 +84,8 @@
                    public void onResponse(String str) {
                        if (callBack != null) {
                            callBack.onSuccess(str);
//                          System.out.println("回复->" + requestUrl + "\r\n" + gson.fromJson(str, JsonObject.class).toString());
                            System.out.println("回复->" + requestUrl + "\r\n" + str);
                        }
                    }
@@ -86,11 +94,13 @@
                        HDLExceptionSubmitUtils.submit(requestUrl, body, e);
                        if (callBack != null) {
                            callBack.onFailure(e);
                            System.out.println("回复->" + requestUrl + "\r\n" + "{code=" + e.getCode() + ",message=" + e.getMessage() + "}");
                        }
                    }
                });
    }
    /**
     * 请求服务器
@@ -114,7 +124,7 @@
    @Deprecated
    private void requestHttp(String requestUrl, String json, boolean isBasicService, boolean isExecute, BaseSuccessFailureCallBeak baseSuccessCallBeak) {
        String fullUrl = AppConfigManage.getUserRegionUrl() + requestUrl;
        this.requestHttps(fullUrl, json, isBasicService, isExecute, baseSuccessCallBeak);
        this.requestHttpServer(fullUrl, json, isBasicService, isExecute, baseSuccessCallBeak);
    }
    /**
@@ -128,7 +138,7 @@
     */
    @Deprecated
    private void requestFullHttp(String fullUrl, String json, boolean isBasicService, boolean isExecute, BaseSuccessFailureCallBeak baseSuccessCallBeak) {
        this.requestHttps(fullUrl, json, isBasicService, isExecute, baseSuccessCallBeak);
        this.requestHttpServer(fullUrl, json, isBasicService, isExecute, baseSuccessCallBeak);
    }
    /**
@@ -139,7 +149,7 @@
     * @param isBasicService 是否是基础服务的接口(基础服务的接口需要 appKey,timestamp,sign这三个参数,当为true时,内部会自动添加)
     * @param isExecute      是否是同步(true=同步,false=异步)
     */
    private void requestHttps(String fullUrl, String json, boolean isBasicService, boolean isExecute, BaseSuccessFailureCallBeak baseSuccessCallBeak) {
    private void requestHttpServer(String fullUrl, String json, boolean isBasicService, boolean isExecute, BaseSuccessFailureCallBeak baseSuccessCallBeak) {
        new Thread(new Runnable() {
            @Override
            public void run() {
app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java
@@ -6,10 +6,10 @@
    public static final String POST_RegionByUserAccount = "/smart-footstone/region/regionByUserAccount";
    //登录接口
    public static final String POST_Login = "/smart-footstone/user/oauth/login";
    //发送消息验证码
    public static final String POST_VERIFICATION_CODE_SEND = "/smart-footstone/verification/message/send";
    //用户找回密码 忘记密码,通过邮箱和手机号找回
    public static final String POST_FORGET_PROGRAM_PWD = "/smart-footstone/user/oauth/forgetProgramPwd";
    //发送消息验证码
    public static final String POST_SEND_VERIFICATION = "/smart-footstone/verification/message/send";
    //更改个人密码
    public static final String POST_UPDATE_PROGRAM_PASSWORD = "/smart-footstone/user/userInfo/updateProgramPassword";
    //获取员工列表
app/src/main/java/com/hdl/photovoltaic/other/HdlAccountLogic.java
@@ -18,7 +18,7 @@
import java.util.regex.Pattern;
/**
 * 登录界面的逻辑
 * 账号逻辑
 */
public class HdlAccountLogic {
@@ -41,6 +41,7 @@
        return sHdlAccountLogic;
    }
    // region --------【B端账号】---------
    /**
     * 初始化账号的Url区域地址
@@ -101,6 +102,89 @@
    }
    /**
     * 修改密码(B端账号)
     *
     * @param isPhone       true表示手机号,否则是邮箱
     * @param account       账号 (手机或者邮箱)
     * @param loginPwd      新密码
     * @param verifyCode    验证码
     * @param cloudCallBeak -
     */
    public void changePassword(boolean isPhone, String account, String loginPwd, String verifyCode, CloudCallBeak<Boolean> cloudCallBeak) {
        String requestUrl = HttpApi.POST_FORGET_PROGRAM_PWD;
        JsonObject json = new JsonObject();
        if (isPhone) {
            json.addProperty("userPhone", account);//用户手机号 手机号和邮箱必填其一
        } else {
            json.addProperty("userEmail", account);
        }
        json.addProperty("loginPwd", loginPwd);//新密码
        json.addProperty("verifyCode", verifyCode);//验证码
//       json.addProperty("platform", "APP");
        json.addProperty("grantType", "password");
        HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
            @Override
            public void onSuccess(String str) {
                if (cloudCallBeak != null) {
                    cloudCallBeak.onSuccess(true);
                }
            }
            @Override
            public void onFailure(HDLException e) {
                if (cloudCallBeak != null) {
                    cloudCallBeak.onFailure(e);
                }
            }
        });
    }
    /**
     * 修改密码(B端账号)
     *
     * @param isPhone       true表示手机号,否则是邮箱
     * @param account       账号 (手机或者邮箱)
     * @param phonePrefix   手机号前缀
     * @param verifyType    1:注册 2:找回密码 3:绑定4:验证码登陆 5:敏感数据
     * @param cloudCallBeak -
     */
    public void sendVerifyCode(boolean isPhone, String account, String phonePrefix, int verifyType, CloudCallBeak<Boolean> cloudCallBeak) {
        String requestUrl = HttpApi.POST_SEND_VERIFICATION;
        JsonObject json = new JsonObject();
        if (isPhone) {
            json.addProperty("phone", account);//用户手机号
            json.addProperty("phonePrefix", phonePrefix);//手机号前缀
        } else {
            json.addProperty("mail", account);//邮箱
        }
        json.addProperty("verifyType", verifyType);//1:注册 2:找回密码 3:绑定4:验证码登陆 5:敏感数据
//        json.addProperty("languageType", loginPwd);//语言
//        json.addProperty("expireSecond", expireSecond);//验证码过期时间(秒),默认5分钟
//       json.addProperty("platform", "APP");
        HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
            @Override
            public void onSuccess(String str) {
                if (cloudCallBeak != null) {
                    cloudCallBeak.onSuccess(true);
                }
            }
            @Override
            public void onFailure(HDLException e) {
                if (cloudCallBeak != null) {
                    cloudCallBeak.onFailure(e);
                }
            }
        });
    }
    /**
     * 刷新Token(B端账号)
     *
     * @param account       手机或者邮箱
@@ -133,6 +217,12 @@
    }
    // endregion
    // region --------【C端账号】---------
    // endregion
    /**
     * 退出登录时调用,清除推送数据
     */
app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java
@@ -38,7 +38,7 @@
import io.reactivex.rxjava3.disposables.Disposable;
/**
 * 设备逻辑的界面
 * 设备逻辑
 */
public class HdlDeviceLogic {
    private static volatile HdlDeviceLogic sHdlDeviceLogic;
app/src/main/java/com/hdl/photovoltaic/other/HdlResidenceLogic.java
@@ -28,7 +28,7 @@
import java.util.concurrent.atomic.AtomicInteger;
/**
 * 住宅逻辑界面
 * 住宅逻辑
 */
public class HdlResidenceLogic {
app/src/main/java/com/hdl/photovoltaic/other/HdlThreadLogic.java
@@ -1,16 +1,13 @@
package com.hdl.photovoltaic.other;
import android.app.Dialog;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import com.hdl.photovoltaic.enums.ShowErrorMode;
import com.hdl.photovoltaic.widget.ConfirmationDialog;
import com.hdl.photovoltaic.widget.ConfirmationCancelDialog;
import com.hdl.photovoltaic.widget.ConfirmationExceptionDialog;
/**
@@ -23,16 +20,16 @@
    /**
     * 切换回主线程执行
     *
     * @param run           回调
     * @param runnable           回调
     * @param context       上下文(不需要弹框填null)
     * @param showErrorMode 是否显示错误(不需要显示错误填null)
     */
    public static void runMainThread(Runnable run, Context context, ShowErrorMode showErrorMode) {
    public static void runMainThread(Runnable runnable, Context context, ShowErrorMode showErrorMode) {
        try {
            if (Looper.myLooper() == Looper.getMainLooper()) {
                run.run();
                runnable.run();
            } else {
                handler.post(run);
                handler.post(runnable);
            }
        } catch (Exception e) {
@@ -41,20 +38,22 @@
    }
    /**
     * 子线程执行
     *
     * @param run           回调
     * @param runnable           回调
     * @param context       上下文(不需要弹框填null)
     * @param showErrorMode 是否显示错误(不需要填null)
     */
    public static void runThread(Runnable run, Context context, ShowErrorMode showErrorMode) {
    public static void runThread(Runnable runnable, Context context, ShowErrorMode showErrorMode) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    run.run();
                    runnable.run();
                } catch (Exception e) {
                    exception(e, showErrorMode, context);
                }
@@ -106,22 +105,22 @@
            @Override
            public void run() {
                ConfirmationDialog confirmationDialog = new ConfirmationDialog(context);
                confirmationDialog.setTitle("提示");
                confirmationDialog.setContent("很抱歉,程序出现错误了,点击\"确认\"获取更多详细错误信息.");
                confirmationDialog.setConfirmation("确认");
                confirmationDialog.setCancel("取消");
                confirmationDialog.show();
                confirmationDialog.setNoOnclickListener(new ConfirmationDialog.onNoOnclickListener() {
                ConfirmationCancelDialog confirmationCancelDialog = new ConfirmationCancelDialog(context);
                confirmationCancelDialog.setTitle("提示");
                confirmationCancelDialog.setContent("很抱歉,程序出现错误了,点击\"确认\"获取更多详细错误信息.");
                confirmationCancelDialog.setConfirmation("确认");
                confirmationCancelDialog.setCancel("取消");
                confirmationCancelDialog.show();
                confirmationCancelDialog.setNoOnclickListener(new ConfirmationCancelDialog.onNoOnclickListener() {
                    @Override
                    public void Cancel() {
                        confirmationDialog.dismiss();
                        confirmationCancelDialog.dismiss();
                    }
                });
                confirmationDialog.setYesOnclickListener(new ConfirmationDialog.onYesOnclickListener() {
                confirmationCancelDialog.setYesOnclickListener(new ConfirmationCancelDialog.onYesOnclickListener() {
                    @Override
                    public void Confirm() {
                        confirmationDialog.dismiss();
                        confirmationCancelDialog.dismiss();
                        ConfirmationExceptionDialog confirmationExceptionDialog = new ConfirmationExceptionDialog(context);
//                        String s = getStackTrace(ex);
                        String s = Log.getStackTraceString(ex);
app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java
@@ -1,8 +1,7 @@
package com.hdl.photovoltaic.ui;
import android.Manifest;
import android.content.pm.PackageManager;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.Spannable;
@@ -17,42 +16,31 @@
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.content.res.AppCompatResources;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.hdl.linkpm.sdk.core.exception.HDLException;
import com.hdl.linkpm.sdk.user.HDLLinkPMUser;
import com.hdl.linkpm.sdk.user.bean.HDLLoginBean;
import com.hdl.linkpm.sdk.user.bean.HDLUserRegionBean;
import com.hdl.linkpm.sdk.user.callback.ILoginCallBack;
import com.hdl.photovoltaic.HDLApp;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.base.CustomBaseActivity;
import com.hdl.photovoltaic.enums.ShowErrorMode;
import com.hdl.photovoltaic.other.HdlFileLogic;
import com.hdl.photovoltaic.other.HdlResidenceLogic;
import com.hdl.photovoltaic.ui.account.ChangePassword;
import com.hdl.photovoltaic.ui.account.RegisterAccountActivity;
import com.hdl.photovoltaic.ui.bean.HouseIdBean;
import com.hdl.photovoltaic.ui.bean.LoginUserBean;
import com.hdl.photovoltaic.ui.bean.LoginUserRegionBean;
import com.hdl.photovoltaic.config.AppConfigManage;
import com.hdl.photovoltaic.databinding.ActivityHomeLoginBinding;
import com.hdl.photovoltaic.listener.CloudCallBeak;
import com.hdl.photovoltaic.other.HdlAccountLogic;
import com.hdl.photovoltaic.other.HdlThreadLogic;
import com.hdl.photovoltaic.ui.device.FastScanActivity;
import com.hdl.photovoltaic.uni.HDLUniMP;
import com.hdl.photovoltaic.utils.PermissionUtils;
import com.hdl.photovoltaic.utils.WifiUtils;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.List;
/**
 * 登录的界面
 */
public class HomeLoginActivity extends CustomBaseActivity {
    private ActivityHomeLoginBinding viewBinding;
@@ -206,7 +194,6 @@
//                    //隐私协议提示
//                    return;
//                }
                Log.d("测试中", "123456789");
                showLoading(getString(R.string.home_login_登录中));
                HdlAccountLogic.getInstance().regionByAccount(account, new CloudCallBeak<HDLUserRegionBean>() {
                    @Override
@@ -259,6 +246,24 @@
                HdlFileLogic.getInstance().deleteDirectory(HdlFileLogic.getInstance().getCurrentHomeRootPath());
            }
        });
        //注册
        viewBinding.homeLoginRegisterTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(HomeLoginActivity.this, RegisterAccountActivity.class);
                startActivity(intent);
            }
        });
        //忘记密码
        viewBinding.homeLoginForgetPasswordTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(HomeLoginActivity.this, ChangePassword.class);
                startActivity(intent);
            }
        });
    }
@@ -295,7 +300,7 @@
        if (password.length() < 6 || password.length() > 16) {
            viewBinding.homeLoginLine2V.setBackgroundColor(getColor(R.color.text_D34545));
            viewBinding.homeLoginPasswordTextErrorTv.setText(R.string.home_login_error_最少6_16个字符);
            viewBinding.homeLoginPasswordTextErrorTv.setText(R.string.home_login_error_6_16_str);
            return false;
        }
        return true;
app/src/main/java/com/hdl/photovoltaic/ui/MyPowerStationActivity.java
@@ -25,12 +25,14 @@
import java.nio.charset.StandardCharsets;
/**
 * 我的电站界面
 */
public class MyPowerStationActivity extends CustomBaseActivity {
    private ActivityMyPowerStationBinding viewBinding;
    private int currentFragmentIndex = 0;
    private int currentFragmentIndex = 1;
    private EventListener allTopicsListener;
@@ -55,17 +57,25 @@
        viewBinding.myPowerStationBottomIl1.clickTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                currentFragmentIndex = 0;
                bottomViewChangeOfStyle();
            }
        });
        viewBinding.myPowerStationBottomIl2.clickTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                currentFragmentIndex = 1;
                bottomViewChangeOfStyle();
            }
        });
        viewBinding.myMessageBottomIl2.clickTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                currentFragmentIndex = 2;
                bottomViewChangeOfStyle();
            }
        });
        viewBinding.myMeBottomIl3.clickTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                currentFragmentIndex = 3;
                bottomViewChangeOfStyle();
            }
        });
    }
@@ -80,28 +90,43 @@
    private void initView() {
        viewBinding.myPowerStationBottomIl1.titleTv.setText(R.string.my_power_station_电站);
        viewBinding.myPowerStationBottomIl2.titleTv.setText(R.string.my_power_station_我的);
        viewBinding.myMessageBottomIl2.titleTv.setText(R.string.message_消息);
        viewBinding.myMeBottomIl3.titleTv.setText(R.string.my_power_station_我的);
        this.bottomViewChangeOfStyle();
    }
    private void bottomViewChangeOfStyle() {
        if (this.currentFragmentIndex == 0) {
        if (this.currentFragmentIndex == 1) {
            viewBinding.myPowerStationFcv1.setVisibility(View.VISIBLE);
            viewBinding.myPowerStationFcv2.setVisibility(View.GONE);
            viewBinding.myMessageFcv2.setVisibility(View.GONE);
            viewBinding.myMeFcv3.setVisibility(View.GONE);
            viewBinding.myPowerStationBottomIl1.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.selectedpowerstation));
            viewBinding.myPowerStationBottomIl1.titleTv.setTextColor(getColor(R.color.text_90000000));
            viewBinding.myPowerStationBottomIl2.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.unselectedme));
            viewBinding.myPowerStationBottomIl2.titleTv.setTextColor(getColor(R.color.text_65000000));
        } else {
            viewBinding.myMessageBottomIl2.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.message_unselected));
            viewBinding.myMessageBottomIl2.titleTv.setTextColor(getColor(R.color.text_65000000));
            viewBinding.myMeBottomIl3.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.unselectedme));
            viewBinding.myMeBottomIl3.titleTv.setTextColor(getColor(R.color.text_65000000));
        } else if (this.currentFragmentIndex == 2) {
            viewBinding.myPowerStationFcv1.setVisibility(View.GONE);
            viewBinding.myPowerStationFcv2.setVisibility(View.VISIBLE);
            viewBinding.myMessageFcv2.setVisibility(View.VISIBLE);
            viewBinding.myMeFcv3.setVisibility(View.GONE);
            viewBinding.myPowerStationBottomIl1.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.unselectedpowerstation));
            viewBinding.myPowerStationBottomIl1.titleTv.setTextColor(getColor(R.color.text_65000000));
            viewBinding.myPowerStationBottomIl2.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.selectedme));
            viewBinding.myPowerStationBottomIl2.titleTv.setTextColor(getColor(R.color.text_90000000));
            viewBinding.myMessageBottomIl2.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.message_select));
            viewBinding.myMessageBottomIl2.titleTv.setTextColor(getColor(R.color.text_90000000));
            viewBinding.myMeBottomIl3.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.unselectedme));
            viewBinding.myMeBottomIl3.titleTv.setTextColor(getColor(R.color.text_65000000));
        } else if (this.currentFragmentIndex == 3) {
            viewBinding.myPowerStationFcv1.setVisibility(View.GONE);
            viewBinding.myMessageFcv2.setVisibility(View.GONE);
            viewBinding.myMeFcv3.setVisibility(View.VISIBLE);
            viewBinding.myPowerStationBottomIl1.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.unselectedpowerstation));
            viewBinding.myPowerStationBottomIl1.titleTv.setTextColor(getColor(R.color.text_65000000));
            viewBinding.myMessageBottomIl2.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.message_unselected));
            viewBinding.myMessageBottomIl2.titleTv.setTextColor(getColor(R.color.text_65000000));
            viewBinding.myMeBottomIl3.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.selectedme));
            viewBinding.myMeBottomIl3.titleTv.setTextColor(getColor(R.color.text_90000000));
        }
    }
app/src/main/java/com/hdl/photovoltaic/ui/account/ChangePassword.java
New file
@@ -0,0 +1,494 @@
package com.hdl.photovoltaic.ui.account;
import android.app.AppComponentFactory;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.text.Editable;
import android.text.InputType;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.content.res.AppCompatResources;
import com.hdl.linkpm.sdk.core.exception.HDLException;
import com.hdl.linkpm.sdk.user.HDLLinkPMUser;
import com.hdl.linkpm.sdk.user.bean.HDLUserRegionBean;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.base.CustomBaseActivity;
import com.hdl.photovoltaic.config.AppConfigManage;
import com.hdl.photovoltaic.databinding.ActivityChangePasswordBinding;
import com.hdl.photovoltaic.listener.CloudCallBeak;
import com.hdl.photovoltaic.other.HdlAccountLogic;
import com.hdl.photovoltaic.other.HdlThreadLogic;
import com.hdl.photovoltaic.widget.ConfirmationCancelDialog;
import com.hdl.photovoltaic.widget.ConfirmationTipDialog;
/**
 * 修改账号界面
 */
public class ChangePassword extends CustomBaseActivity {
    ActivityChangePasswordBinding viewBinding;
    private boolean isPhoneType = true;
    private String mPhoneAccount;
    private String mPhonePsw;
    private String mPhoneConfirmPsw;
    private String mPhoneVerificationCode;
    private String mMailAccount;
    private String mMailPsw;
    private String mMailConfirmPsw;
    private String mMailVerificationCode;
    @Override
    public Object getContentView() {
        viewBinding = ActivityChangePasswordBinding.inflate(getLayoutInflater());
        return viewBinding.getRoot();
    }
    @Override
    public void onBindView(Bundle savedInstanceState) {
        //初始化
        initView();
        //初始化界面监听器
        initEvent();
    }
    /**
     * 初始化界面
     */
    private void initView() {
        switchPhoneOrMailView();
    }
    /**
     * 设置监听事件
     */
    private void initEvent() {
        //返回
        viewBinding.changeBackTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        //切换手机号
        viewBinding.changePhoneIc.underlineCl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                isPhoneType = true;
                switchPhoneOrMailView();
            }
        });
        //切换邮箱号
        viewBinding.changeMailRl.underlineCl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                isPhoneType = false;
                switchPhoneOrMailView();
            }
        });
        //输入手机号或者邮箱
        viewBinding.changeAccountEt.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                isCompleteEnabled();
            }
            @Override
            public void afterTextChanged(Editable s) {
            }
        });
        //手机号获取验证码
        viewBinding.changePhoneVerificationTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sendVerification();
            }
        });
        //输入手机验证码
        viewBinding.changePhoneVerificationEt.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                isCompleteEnabled();
            }
            @Override
            public void afterTextChanged(Editable s) {
            }
        });
        //邮箱获取验证码
        viewBinding.changeMailVerificationTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sendVerification();
            }
        });
        //输入邮箱验证码
        viewBinding.changeMailVerificationEt.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                isCompleteEnabled();
            }
            @Override
            public void afterTextChanged(Editable s) {
            }
        });
        //输入密码
        viewBinding.changePswEt.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                isCompleteEnabled();
            }
            @Override
            public void afterTextChanged(Editable s) {
            }
        });
        //密码显示或者隐藏
        viewBinding.changePswHideIv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v.isSelected()) {
                    v.setSelected(false);
                    viewBinding.changePswHideIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.hide));
                    viewBinding.changePswEt.setTransformationMethod(PasswordTransformationMethod.getInstance());
                } else {
                    v.setSelected(true);
                    viewBinding.changePswHideIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.show));
                    viewBinding.changePswEt.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                }
                //设置光标位置
                if (!TextUtils.isEmpty(viewBinding.changePswEt.getText())) {
                    viewBinding.changePswEt.setSelection(viewBinding.changePswEt.length());
                }
            }
        });
        //输入确认密码
        viewBinding.changeConfirmPswEt.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                isCompleteEnabled();
            }
            @Override
            public void afterTextChanged(Editable s) {
            }
        });
        //确认密码显示或者隐藏
        viewBinding.changeConfirmPswHideIv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v.isSelected()) {
                    v.setSelected(false);
                    viewBinding.changeConfirmPswHideIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.hide));
                    viewBinding.changeConfirmPswEt.setTransformationMethod(PasswordTransformationMethod.getInstance());
                } else {
                    v.setSelected(true);
                    viewBinding.changeConfirmPswHideIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.show));
                    viewBinding.changeConfirmPswEt.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                }
                //设置光标位置
                if (!TextUtils.isEmpty(viewBinding.changeConfirmPswEt.getText())) {
                    viewBinding.changeConfirmPswEt.setSelection(viewBinding.changeConfirmPswEt.length());
                }
            }
        });
        //重置密码
        viewBinding.confirmTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!isLocalCheckAccountAndPassword()) {
                    return;
                }
                String account = viewBinding.changeAccountEt.getText().toString();
                String psw = viewBinding.changeConfirmPswEt.getText().toString();
                String verification_code;
                if (isPhoneType) {
                    verification_code = viewBinding.changePhoneVerificationEt.getText().toString();
                } else {
                    verification_code = viewBinding.changeMailVerificationEt.getText().toString();
                }
                HdlAccountLogic.getInstance().changePassword(isPhoneType, account, psw, verification_code, new CloudCallBeak<Boolean>() {
                    @Override
                    public void onSuccess(Boolean obj) {
                        HdlThreadLogic.runMainThread(new Runnable() {
                            @Override
                            public void run() {
                                ConfirmationTipDialog dialog = new ConfirmationTipDialog(_mActivity);
                                dialog.show();
                                dialog.setYesOnclickListener(new ConfirmationCancelDialog.onYesOnclickListener() {
                                    @Override
                                    public void Confirm() {
                                        finish();
                                    }
                                });
                            }
                        }, null, null);
                    }
                    @Override
                    public void onFailure(HDLException e) {
                    }
                });
            }
        });
    }
    /**
     * 发送验证码指令
     */
    private void sendVerification() {
        String account = viewBinding.changeAccountEt.getText().toString();
        if (TextUtils.isEmpty(account)) {
            if (isPhoneType) {
                viewBinding.textErrorTv.setText(R.string.home_login_phone_null);
            } else {
                viewBinding.textErrorTv.setText(R.string.home_login_mail_null);
            }
            return;
        }
        HdlAccountLogic.getInstance().regionByAccount(account, new CloudCallBeak<HDLUserRegionBean>() {
            @Override
            public void onSuccess(HDLUserRegionBean obj) {
                AppConfigManage.setUserRegionUrl(obj.getRegionUrl());
                HDLLinkPMUser.getInstance().setUserRegionUrl(AppConfigManage.getUserRegionUrl());
                HdlAccountLogic.getInstance().sendVerifyCode(isPhoneType, account, "86", 2, new CloudCallBeak<Boolean>() {
                    @Override
                    public void onSuccess(Boolean obj) {
                        if (isPhoneType) {
                            phoneCountDownTimer.start();
                        } else {
                            mailCountDownTimer.start();
                        }
                    }
                    @Override
                    public void onFailure(HDLException e) {
                    }
                });
            }
            @Override
            public void onFailure(HDLException e) {
                hideLoading();
            }
        });
    }
    /**
     * 初始化手机号计时器
     */
    CountDownTimer phoneCountDownTimer = new CountDownTimer(60 * 1000, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            long time = (millisUntilFinished / 1000);
            String str = time + "s" + getString(R.string.home_login_psw_verification_repeater);
            viewBinding.changePhoneVerificationTv.setText(str);
            viewBinding.changePhoneVerificationTv.setTextColor(getResources().getColor(R.color.text_25000000));
            viewBinding.changePhoneVerificationTv.setEnabled(false);
        }
        @Override
        public void onFinish() {
            viewBinding.changePhoneVerificationTv.setText(getString(R.string.home_login_verification_regain));
            viewBinding.changePhoneVerificationTv.setTextColor(getResources().getColor(R.color.text_245EC3));
            viewBinding.changePhoneVerificationTv.setEnabled(true);
        }
    };
    /**
     * 初始化邮箱计时器
     */
    CountDownTimer mailCountDownTimer = new CountDownTimer(60 * 1000, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            long time = (millisUntilFinished / 1000);
            String str = time + "s" + getString(R.string.home_login_psw_verification_repeater);
            viewBinding.changeMailVerificationTv.setText(str);
            viewBinding.changeMailVerificationTv.setTextColor(getResources().getColor(R.color.text_25000000));
            viewBinding.changeMailVerificationTv.setEnabled(false);
        }
        @Override
        public void onFinish() {
            viewBinding.changeMailVerificationTv.setText(getString(R.string.home_login_verification_regain));
            viewBinding.changeMailVerificationTv.setTextColor(getResources().getColor(R.color.text_245EC3));
            viewBinding.changeMailVerificationTv.setEnabled(true);
        }
    };
    /**
     * 切换手机号或者邮箱的样式
     */
    private void switchPhoneOrMailView() {
        if (isPhoneType) {
            //手机号
            viewBinding.changePhoneIc.accountTitleTv.setText(R.string.home_login_手机号);
            viewBinding.changePhoneIc.accountTitleTv.setTextSize(20);
            viewBinding.changePhoneIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_90000000));
            viewBinding.changePhoneIc.lineV.setVisibility(View.VISIBLE);
            viewBinding.changeMailRl.accountTitleTv.setText(R.string.home_login_邮箱);
            viewBinding.changeMailRl.accountTitleTv.setTextSize(16);
            viewBinding.changeMailRl.accountTitleTv.setTextColor(getResources().getColor(R.color.text_40000000));
            viewBinding.changeMailRl.lineV.setVisibility(View.GONE);
            //输入手机号
            viewBinding.changeAccountEt.setInputType(InputType.TYPE_CLASS_NUMBER);
            viewBinding.changeAccountEt.setHint(R.string.home_login_请输入手机号);
            //显示手机号验证码,隐藏邮箱验证码,
            viewBinding.changePhoneVerificationCodeRl.setVisibility(View.VISIBLE);
            viewBinding.changeMailVerificationCodeRl.setVisibility(View.GONE);
            //记录邮箱账号和密码
            mMailAccount = viewBinding.changeAccountEt.getText().toString();
            mMailVerificationCode = viewBinding.changePhoneVerificationEt.getText().toString();
            mMailPsw = viewBinding.changePswEt.getText().toString();
            mMailConfirmPsw = viewBinding.changeConfirmPswEt.getText().toString();
            //显示旧数据
            viewBinding.changeAccountEt.setText(mPhoneAccount);
            viewBinding.changePhoneVerificationEt.setText(mPhoneVerificationCode);
            viewBinding.changePswEt.setText(mPhonePsw);
            viewBinding.changeConfirmPswEt.setText(mPhoneConfirmPsw);
        } else {
            //邮箱
            viewBinding.changePhoneIc.accountTitleTv.setText(R.string.home_login_手机号);
            viewBinding.changePhoneIc.accountTitleTv.setTextSize(16);
            viewBinding.changePhoneIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_40000000));
            viewBinding.changePhoneIc.lineV.setVisibility(View.GONE);
            viewBinding.changeMailRl.accountTitleTv.setText(R.string.home_login_邮箱);
            viewBinding.changeMailRl.accountTitleTv.setTextSize(20);
            viewBinding.changeMailRl.accountTitleTv.setTextColor(getResources().getColor(R.color.text_90000000));
            viewBinding.changeMailRl.lineV.setVisibility(View.VISIBLE);
            //输入邮箱
            viewBinding.changeAccountEt.setInputType(InputType.TYPE_CLASS_TEXT);
            viewBinding.changeAccountEt.setHint(R.string.home_login_input_mail);
            //显示箱邮验证码,隐藏手机号验证码,
            viewBinding.changePhoneVerificationCodeRl.setVisibility(View.GONE);
            viewBinding.changeMailVerificationCodeRl.setVisibility(View.VISIBLE);
            //记录手机号和密码
            mPhoneAccount = viewBinding.changeAccountEt.getText().toString();
            mPhoneVerificationCode = viewBinding.changePhoneVerificationEt.getText().toString();
            mPhonePsw = viewBinding.changePswEt.getText().toString();
            mPhoneConfirmPsw = viewBinding.changeConfirmPswEt.getText().toString();
            //显示旧数据
            viewBinding.changeAccountEt.setText(mMailAccount);
            viewBinding.changeMailVerificationEt.setText(mMailVerificationCode);
            viewBinding.changePswEt.setText(mMailPsw);
            viewBinding.changeConfirmPswEt.setText(mMailConfirmPsw);
        }
        isCompleteEnabled();
    }
    /**
     * 校验按钮是否启用
     */
    private void isCompleteEnabled() {
        String account = viewBinding.changeAccountEt.getText().toString();
        String psw1 = viewBinding.changePswEt.getText().toString();
        String psw2 = viewBinding.changeConfirmPswEt.getText().toString();
        String verification_code;
        if (isPhoneType) {
            verification_code = viewBinding.changePhoneVerificationEt.getText().toString();
        } else {
            verification_code = viewBinding.changeMailVerificationEt.getText().toString();
        }
        boolean isEnabled = account.length() > 0 && psw1.length() > 0 && psw2.length() > 0 && verification_code.length() > 0;
        viewBinding.confirmTv.setEnabled(isEnabled);
    }
    /**
     * 本地校验输入账号或者密码是否正确
     */
    private boolean isLocalCheckAccountAndPassword() {
        String psw1 = viewBinding.changePswEt.getText().toString();
        String psw2 = viewBinding.changeConfirmPswEt.getText().toString();
        if (!psw1.equals(psw2)) {
            viewBinding.textErrorTv.setText(R.string.home_login_psw_unlikeliness);
            return false;
        }
        if (psw1.length() < 6 || psw1.length() > 16) {
            viewBinding.textErrorTv.setText(R.string.home_login_error_6_16_str);
            return false;
        }
//        if (psw2.length() < 6 || psw2.length() > 16) {
//            viewBinding.textErrorTv.setText(R.string.home_login_error_6_16_str);
//            return false;
//        }
        return true;
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (phoneCountDownTimer != null) {
            phoneCountDownTimer.cancel();
            phoneCountDownTimer = null;
        }
        if (mailCountDownTimer != null) {
            mailCountDownTimer.cancel();
            mailCountDownTimer = null;
        }
    }
}
app/src/main/java/com/hdl/photovoltaic/ui/account/RegisterAccountActivity.java
New file
@@ -0,0 +1,112 @@
package com.hdl.photovoltaic.ui.account;
import android.os.Bundle;
import android.view.View;
import androidx.constraintlayout.widget.ConstraintSet;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.base.CustomBaseActivity;
import com.hdl.photovoltaic.databinding.ActivityRegisterAccountBinding;
import com.hdl.photovoltaic.utils.KeyboardStateObserverUtils;
/**
 * 注册账号界面
 */
public class RegisterAccountActivity extends CustomBaseActivity {
    private ActivityRegisterAccountBinding viewBinding;
    @Override
    public Object getContentView() {
        viewBinding = ActivityRegisterAccountBinding.inflate(getLayoutInflater());
        return viewBinding.getRoot();
    }
    @Override
    public void onBindView(Bundle savedInstanceState) {
        //初始化
        initView();
        //初始化界面监听器
        initEvent();
        KeyboardStateObserverUtils.getKeyboardStateObserver(_mActivity).setKeyboardVisibilityListener(new KeyboardStateObserverUtils.OnKeyboardVisibilityListener() {
            @Override
            public void onKeyboardShow(int h) {
                ConstraintSet cs = new ConstraintSet();
                cs.clone(viewBinding.parentCl);
                cs.connect(viewBinding.registerConfirmPswEt.getId(), ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM, px2dip(h))
                ;//
                //应用约束
                cs.applyTo(viewBinding.parentCl);
            }
            @Override
            public void onKeyboardHide(int h) {
                ConstraintSet cs = new ConstraintSet();
                cs.clone(viewBinding.parentCl);
                cs.connect(viewBinding.registerConfirmPswEt.getId(), ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM, px2dip(h));//
                //应用约束
                cs.applyTo(viewBinding.parentCl);
            }
        });
    }
    private void initView() {
        viewBinding.registerPhoneTitleIc.accountTitleTv.setText(R.string.home_login_手机号);
        viewBinding.registerPhoneTitleIc.accountTitleTv.setTextSize(20);
        viewBinding.registerPhoneTitleIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_90000000));
        viewBinding.registerPhoneTitleIc.lineV.setVisibility(View.VISIBLE);
        viewBinding.registerMailTitleIc.accountTitleTv.setText(R.string.home_login_邮箱);
        viewBinding.registerMailTitleIc.accountTitleTv.setTextSize(16);
        viewBinding.registerMailTitleIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_40000000));
        viewBinding.registerMailTitleIc.lineV.setVisibility(View.GONE);
    }
    private void initEvent() {
        viewBinding.registerBackTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        viewBinding.registerPhoneTitleIc.underlineCl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewBinding.registerPhoneTitleIc.accountTitleTv.setText(R.string.home_login_手机号);
                viewBinding.registerPhoneTitleIc.accountTitleTv.setTextSize(20);
                viewBinding.registerPhoneTitleIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_90000000));
                viewBinding.registerPhoneTitleIc.lineV.setVisibility(View.VISIBLE);
                viewBinding.registerMailTitleIc.accountTitleTv.setText(R.string.home_login_邮箱);
                viewBinding.registerMailTitleIc.accountTitleTv.setTextSize(16);
                viewBinding.registerMailTitleIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_40000000));
                viewBinding.registerMailTitleIc.lineV.setVisibility(View.GONE);
            }
        });
        viewBinding.registerMailTitleIc.underlineCl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewBinding.registerPhoneTitleIc.accountTitleTv.setText(R.string.home_login_手机号);
                viewBinding.registerPhoneTitleIc.accountTitleTv.setTextSize(16);
                viewBinding.registerPhoneTitleIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_40000000));
                viewBinding.registerPhoneTitleIc.lineV.setVisibility(View.GONE);
                viewBinding.registerMailTitleIc.accountTitleTv.setText(R.string.home_login_邮箱);
                viewBinding.registerMailTitleIc.accountTitleTv.setTextSize(20);
                viewBinding.registerMailTitleIc.accountTitleTv.setTextColor(getResources().getColor(R.color.text_90000000));
                viewBinding.registerMailTitleIc.lineV.setVisibility(View.VISIBLE);
            }
        });
    }
}
app/src/main/java/com/hdl/photovoltaic/ui/message/MessageFragment.java
New file
@@ -0,0 +1,37 @@
package com.hdl.photovoltaic.ui.message;
import android.os.Bundle;
import android.view.LayoutInflater;
import com.hdl.photovoltaic.base.CustomBaseFragment;
import com.hdl.photovoltaic.databinding.FragmentMessageBinding;
public class MessageFragment extends CustomBaseFragment {
    private FragmentMessageBinding viewBinding;
    @Override
    public Object getContentView() {
        viewBinding = FragmentMessageBinding.inflate(getLayoutInflater());
        return viewBinding.getRoot();
    }
    @Override
    public void onBindView(Bundle savedInstanceState) {
        //初始化数据
        initData();
        //初始化界面
        initView();
        //初始化监听器
        initEvent();
    }
    private void initEvent() {
    }
    private void initView() {
    }
    private void initData() {
    }
}
app/src/main/java/com/hdl/photovoltaic/widget/ConfirmationCancelDialog.java
File was renamed from app/src/main/java/com/hdl/photovoltaic/widget/ConfirmationDialog.java
@@ -9,13 +9,13 @@
import androidx.annotation.NonNull;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.databinding.LoadingConfirmBinding;
import com.hdl.photovoltaic.databinding.DialogConfirmCancelBinding;
/**
 * 确认框
 * 确认取消框
 */
public class ConfirmationDialog extends Dialog {
    public ConfirmationDialog(@NonNull Context context) {
public class ConfirmationCancelDialog extends Dialog {
    public ConfirmationCancelDialog(@NonNull Context context) {
        super(context, R.style.Custom_Dialog);
        this.mContext = context;
    }
@@ -23,14 +23,14 @@
    private final Context mContext;
    private onNoOnclickListener noOnclickListener;//取消按钮被点击了的监听器
    private onYesOnclickListener yesOnclickListener;//确定按钮被点击了的监听器
    private LoadingConfirmBinding viewBinding;
    private DialogConfirmCancelBinding viewBinding;
    private String titleStr, contentStr, yesStr, noStr;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        viewBinding = LoadingConfirmBinding.inflate(getLayoutInflater());
        viewBinding = DialogConfirmCancelBinding.inflate(getLayoutInflater());
        setContentView(viewBinding.getRoot());
//        setCancelable(true);//系统后退可以取消
        //空白处不能取消动画
app/src/main/java/com/hdl/photovoltaic/widget/ConfirmationExceptionDialog.java
@@ -12,14 +12,14 @@
import androidx.appcompat.content.res.AppCompatResources;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.databinding.LoadingExceptionLogBinding;
import com.hdl.photovoltaic.databinding.DialogExceptionLogBinding;
/**
 * 异常弹窗
 */
public class ConfirmationExceptionDialog extends Dialog {
    private LoadingExceptionLogBinding viewBinding;
    private DialogExceptionLogBinding viewBinding;
    private final Context mContext;
    private String contentStr;
@@ -31,7 +31,7 @@
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        viewBinding = LoadingExceptionLogBinding.inflate(getLayoutInflater());
        viewBinding = DialogExceptionLogBinding.inflate(getLayoutInflater());
        setContentView(viewBinding.getRoot());
//        Window window = getWindow();
//        window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
app/src/main/java/com/hdl/photovoltaic/widget/ConfirmationInputDialog.java
@@ -14,7 +14,7 @@
import androidx.constraintlayout.widget.ConstraintSet;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.databinding.LoadingConfirmInputBinding;
import com.hdl.photovoltaic.databinding.DialogConfirmInputBinding;
import com.hdl.photovoltaic.utils.KeyboardStateObserverUtils;
/**
@@ -30,13 +30,13 @@
    private final Context mContext;
    private onNoOnclickListener noOnclickListener;//取消按钮被点击了的监听器
    private onYesOnclickListener yesOnclickListener;//确定按钮被点击了的监听器
    private LoadingConfirmInputBinding viewBinding;
    private DialogConfirmInputBinding viewBinding;
    private String titleStr, yesStr, noStr;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        viewBinding = LoadingConfirmInputBinding.inflate(getLayoutInflater());
        viewBinding = DialogConfirmInputBinding.inflate(getLayoutInflater());
        setContentView(viewBinding.getRoot());
//        setCancelable(true);//系统后退可以取消
        //空白处不能取消动画
app/src/main/java/com/hdl/photovoltaic/widget/ConfirmationTipDialog.java
New file
@@ -0,0 +1,94 @@
package com.hdl.photovoltaic.widget;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import androidx.annotation.NonNull;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.databinding.DialogConfirmationTipBinding;
/**
 * 提示确认框
 */
public class ConfirmationTipDialog extends Dialog {
    private final Context mContext;
    private ConfirmationCancelDialog.onYesOnclickListener yesOnclickListener;//确定按钮被点击了的监听器
    private DialogConfirmationTipBinding viewBinding;
    private String titleStr;
    public ConfirmationTipDialog(@NonNull Context context) {
        super(context, R.style.Custom_Dialog);
        this.mContext = context;
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        viewBinding = DialogConfirmationTipBinding.inflate(getLayoutInflater());
        setContentView(viewBinding.getRoot());
        //空白处不能取消动画
        setCanceledOnTouchOutside(false);
        //初始化界面控件
        initView();
        //初始化界面数据
        initData();
        //初始化界面控件的事件
        initEvent();
    }
    private void initView() {
    }
    private void initEvent() {
        viewBinding.comfirmTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (yesOnclickListener != null) {
                    yesOnclickListener.Confirm();
                }
                dismiss();
            }
        });
    }
    /**
     * 自定义"标题"文本
     *
     * @param title 内容
     */
    public void setTitle(String title) {
        if (TextUtils.isEmpty(title)) {
            return;
        }
        titleStr = title;
        if (viewBinding != null) {
            viewBinding.titleTv.setText(titleStr);
        }
    }
    private void initData() {
        if (!TextUtils.isEmpty(titleStr)) {
            viewBinding.titleTv.setText(titleStr);
        }
    }
    public void setYesOnclickListener(ConfirmationCancelDialog.onYesOnclickListener yesOnclickListener) {
        if (yesOnclickListener != null) {
            this.yesOnclickListener = yesOnclickListener;
        }
    }
    public interface onYesOnclickListener {
        void Confirm();
    }
}
app/src/main/res/drawable/back.png

app/src/main/res/drawable/confirmation_bj.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/text_FFFFFFFF" />
    <corners android:radius="@dimen/dp_4" />
</shape>
app/src/main/res/drawable/message_select.png
app/src/main/res/drawable/message_unselected.png
app/src/main/res/drawable/red_font.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FF3030" />
    <corners android:radius="@dimen/dp_8" />
</shape>
app/src/main/res/drawable/region.png

app/src/main/res/drawable/spinner.png
app/src/main/res/drawable/succeed.png
app/src/main/res/layout/activity_change_password.xml
New file
@@ -0,0 +1,315 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.account.ChangePassword">
    <TextView
        android:id="@+id/change_back_tv"
        android:layout_width="@dimen/dp_24"
        android:layout_height="@dimen/dp_24"
        android:layout_marginStart="@dimen/dp_16"
        android:layout_marginTop="@dimen/dp_12"
        android:background="@drawable/back"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <TextView
        android:id="@+id/change_title_tv"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/dp_39"
        android:layout_marginStart="@dimen/dp_20"
        android:layout_marginTop="@dimen/dp_42"
        android:text="@string/home_login_修改密码"
        android:textAlignment="center"
        android:textColor="@color/text_90000000"
        android:textSize="@dimen/text_28"
        android:textStyle="bold"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/change_back_tv" />
    <!--手机号-->
    <include
        android:id="@+id/change_phone_ic"
        layout="@layout/text_underline"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/dp_31"
        android:layout_marginTop="@dimen/dp_52"
        app:layout_constraintStart_toStartOf="@+id/change_title_tv"
        app:layout_constraintTop_toBottomOf="@+id/change_title_tv" />
    <!--邮箱-->
    <include
        android:id="@+id/change_mail_rl"
        layout="@layout/text_underline"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/dp_31"
        android:layout_marginStart="@dimen/dp_28"
        android:layout_marginTop="@dimen/dp_52"
        app:layout_constraintStart_toEndOf="@+id/change_phone_ic"
        app:layout_constraintTop_toBottomOf="@+id/change_title_tv" />
    <RelativeLayout
        android:id="@+id/change_account_rl"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_60"
        android:layout_marginTop="102.5dp"
        app:layout_constraintStart_toStartOf="@+id/change_title_tv"
        app:layout_constraintTop_toBottomOf="@+id/change_title_tv">
        <EditText
            android:id="@+id/change_account_et"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginStart="@dimen/dp_20"
            android:layout_marginEnd="@dimen/dp_60"
            android:background="@null"
            android:hint="@string/home_login_请输入手机号"
            android:inputType="text"
            android:lines="1"
            android:maxLines="1"
            android:textColor="@color/text_FF000000"
            android:textColorHint="@color/text_25000000"
            android:textSize="@dimen/text_16" />
        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dp"
            android:layout_alignParentBottom="true"
            android:layout_marginStart="@dimen/dp_20"
            android:layout_marginEnd="@dimen/dp_20"
            android:background="@color/text_E1E1E1" />
    </RelativeLayout>
    <!--手机获取验证码-->
    <RelativeLayout
        android:id="@+id/change_phone_verification_code_rl"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_60"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/change_account_rl">
        <TextView
            android:id="@+id/change_phone_verification_tv"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignParentEnd="true"
            android:layout_marginEnd="@dimen/dp_20"
            android:gravity="center"
            android:padding="@dimen/dp_16"
            android:text="@string/home_login_验证码"
            android:textColor="@color/text_245EC3"
            android:textSize="@dimen/text_14" />
        <View
            android:id="@+id/change_phone_verification_v"
            android:layout_width="0.5dp"
            android:layout_height="20dp"
            android:layout_alignStart="@+id/change_phone_verification_tv"
            android:layout_centerInParent="true"
            android:background="@color/text_E1E1E1" />
        <EditText
            android:id="@+id/change_phone_verification_et"
            android:layout_width="@dimen/dp_150"
            android:layout_height="match_parent"
            android:layout_alignStart="@+id/change_phone_verification_v"
            android:layout_alignParentStart="true"
            android:layout_marginStart="@dimen/dp_20"
            android:background="@null"
            android:hint="@string/home_login_input_验证码"
            android:inputType="text"
            android:lines="1"
            android:maxLines="1"
            android:textColor="@color/text_FF000000"
            android:textColorHint="@color/text_25000000"
            android:textSize="@dimen/text_16"
            />
        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dp"
            android:layout_alignParentBottom="true"
            android:layout_marginStart="@dimen/dp_20"
            android:layout_marginEnd="@dimen/dp_20"
            android:background="@color/text_E1E1E1" />
    </RelativeLayout>
    <!--邮箱获取验证码-->
    <RelativeLayout
        android:id="@+id/change_mail_verification_code_rl"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_60"
        android:visibility="gone"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/change_account_rl">
        <TextView
            android:id="@+id/change_mail_verification_tv"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignParentEnd="true"
            android:layout_marginEnd="@dimen/dp_20"
            android:gravity="center"
            android:padding="@dimen/dp_16"
            android:text="@string/home_login_send_mail"
            android:textColor="@color/text_245EC3"
            android:textSize="@dimen/text_14" />
        <View
            android:id="@+id/change_mail_verification_v"
            android:layout_width="0.5dp"
            android:layout_height="20dp"
            android:layout_alignStart="@+id/change_mail_verification_tv"
            android:layout_centerInParent="true"
            android:background="@color/text_E1E1E1" />
        <EditText
            android:id="@+id/change_mail_verification_et"
            android:layout_width="@dimen/dp_150"
            android:layout_height="match_parent"
            android:layout_alignStart="@+id/change_mail_verification_v"
            android:layout_alignParentStart="true"
            android:layout_marginStart="@dimen/dp_20"
            android:background="@null"
            android:hint="@string/home_login_input_验证码"
            android:inputType="text"
            android:lines="1"
            android:maxLines="1"
            android:textColor="@color/text_FF000000"
            android:textColorHint="@color/text_25000000"
            android:textSize="@dimen/text_16"
            />
        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dp"
            android:layout_alignParentBottom="true"
            android:layout_marginStart="@dimen/dp_20"
            android:layout_marginEnd="@dimen/dp_20"
            android:background="@color/text_E1E1E1" />
    </RelativeLayout>
    <RelativeLayout
        android:id="@+id/change_psw_rl"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_60"
        android:layout_marginTop="@dimen/dp_60"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/change_account_rl">
        <EditText
            android:id="@+id/change_psw_et"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginStart="@dimen/dp_20"
            android:layout_marginEnd="@dimen/dp_60"
            android:background="@null"
            android:hint="@string/home_login_input_6_16"
            android:inputType="textPassword"
            android:lines="1"
            android:maxLines="1"
            android:textColor="@color/text_FF000000"
            android:textColorHint="@color/text_25000000"
            android:textSize="@dimen/text_16" />
        <ImageView
            android:id="@+id/change_psw_hide_iv"
            android:layout_width="@dimen/dp_20"
            android:layout_height="@dimen/dp_20"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:layout_marginEnd="@dimen/dp_32"
            android:src="@drawable/hide" />
        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dp"
            android:layout_alignParentBottom="true"
            android:layout_marginStart="@dimen/dp_20"
            android:layout_marginEnd="@dimen/dp_20"
            android:background="@color/text_E1E1E1" />
    </RelativeLayout>
    <RelativeLayout
        android:id="@+id/change_confirm_psw_rl"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_60"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/change_psw_rl">
        <EditText
            android:id="@+id/change_confirm_psw_et"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginStart="@dimen/dp_20"
            android:layout_marginEnd="@dimen/dp_60"
            android:background="@null"
            android:hint="@string/home_login_confirm_psw"
            android:inputType="textPassword"
            android:lines="1"
            android:maxLines="1"
            android:textColor="@color/text_FF000000"
            android:textColorHint="@color/text_25000000"
            android:textSize="@dimen/text_16" />
        <ImageView
            android:id="@+id/change_confirm_psw_hide_iv"
            android:layout_width="@dimen/dp_20"
            android:layout_height="@dimen/dp_20"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:layout_marginEnd="@dimen/dp_32"
            android:src="@drawable/hide" />
        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dp"
            android:layout_alignParentBottom="true"
            android:layout_marginStart="@dimen/dp_20"
            android:layout_marginEnd="@dimen/dp_20"
            android:background="@color/text_E1E1E1" />
    </RelativeLayout>
    <TextView
        android:id="@+id/text_error_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/dp_20"
        android:textColor="@color/text_D34545"
        android:textSize="12sp"
        app:layout_constraintStart_toStartOf="@+id/change_confirm_psw_rl"
        app:layout_constraintTop_toBottomOf="@+id/change_confirm_psw_rl" />
    <TextView
        android:id="@+id/confirm_tv"
        android:layout_width="0dp"
        android:layout_height="52dp"
        android:layout_marginStart="@dimen/dp_20"
        android:layout_marginTop="@dimen/dp_42"
        android:layout_marginEnd="@dimen/dp_20"
        android:background="@drawable/yesandnocheck"
        android:enabled="false"
        android:gravity="center"
        android:text="@string/home_login_确认重置"
        android:textColor="@color/text_FFFFFFFF"
        android:textSize="18sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/change_confirm_psw_rl" />
</androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/activity_home_login.xml
@@ -116,7 +116,7 @@
    <View
        android:id="@+id/home_login_line1_v"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_height="0.5dp"
        android:layout_marginStart="@dimen/dp_20"
        android:layout_marginEnd="@dimen/dp_20"
        android:background="@color/text_E1E1E1"
@@ -126,8 +126,8 @@
    <TextView
        android:id="@+id/home_login_account_text_error_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_width="2dp"
        android:layout_height="14dp"
        android:layout_marginTop="2dp"
        android:textColor="@color/text_D34545"
        android:textSize="12sp"
@@ -170,7 +170,7 @@
    <View
        android:id="@+id/home_login_line2_v"
        android:layout_width="0dp"
        android:layout_height="1dp"
        android:layout_height="0.5dp"
        android:background="@color/text_E1E1E1"
        app:layout_constraintEnd_toEndOf="@+id/home_login_line1_v"
        app:layout_constraintStart_toStartOf="@+id/home_login_line1_v"
@@ -208,11 +208,12 @@
        app:layout_constraintEnd_toEndOf="@+id/home_login_line2_v"
        app:layout_constraintTop_toBottomOf="@+id/home_login_line2_v" />
    <!--登录-->
    <TextView
        android:id="@+id/home_login_tv"
        android:layout_width="0dp"
        android:layout_height="52dp"
        android:layout_marginTop="@dimen/dp_45"
        android:layout_marginTop="44dp"
        android:background="@drawable/yesandnocheck"
        android:enabled="false"
        android:gravity="center"
@@ -220,6 +221,7 @@
        android:textColor="@color/text_FFFFFFFF"
        android:textSize="18sp"
        app:layout_constraintEnd_toEndOf="@+id/home_login_line2_v"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="@+id/home_login_line2_v"
        app:layout_constraintTop_toBottomOf="@+id/home_login_forget_password_tv" />
@@ -243,7 +245,7 @@
        android:layout_marginTop="@dimen/dp_208"
        android:background="@drawable/yesandnoselected"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/home_login_tv" />
        app:layout_constraintTop_toBottomOf="@+id/home_login_register_tv" />
    <TextView
        android:id="@+id/home_login_privacy_tv"
app/src/main/res/layout/activity_my_power_station.xml
@@ -7,7 +7,7 @@
    android:background="@color/text_F9FAFB"
    tools:context="com.hdl.photovoltaic.ui.MyPowerStationActivity">
    <!--我的电站-Fragment-->
    <!--电站列表-Fragment-->
    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/my_power_station_fcv1"
@@ -19,9 +19,21 @@
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <!--消息-Fragment-->
    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/my_message_fcv2"
        android:name="com.hdl.photovoltaic.ui.message.MessageFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:visibility="gone"
        app:layout_constraintBottom_toTopOf="@+id/my_power_station_bottom_ll"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <!--我的-Fragment-->
    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/my_power_station_fcv2"
        android:id="@+id/my_me_fcv3"
        android:name="com.hdl.photovoltaic.ui.me.MeFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
@@ -36,7 +48,6 @@
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_49"
        android:background="@color/text_FFFFFFFF"
        android:gravity="center"
        android:orientation="horizontal"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
@@ -44,16 +55,21 @@
        <!--电站-标签-->
        <include
            android:id="@+id/my_power_station_bottom_il1"
            layout="@layout/home_bottom_line"
            />
        <!--消息-->
        <include
            android:id="@+id/my_message_bottom_il2"
            layout="@layout/home_bottom_line" />
        <View
            android:layout_width="@dimen/dp_1"
            android:layout_height="@dimen/dp_17"
            android:background="@color/text_CBCDD1" />
        <!--        <View-->
        <!--            android:layout_width="@dimen/dp_1"-->
        <!--            android:layout_height="@dimen/dp_17"-->
        <!--            android:background="@color/text_CBCDD1" />-->
        <!--我的-标签-->
        <include
            android:id="@+id/my_power_station_bottom_il2"
            android:id="@+id/my_me_bottom_il3"
            layout="@layout/home_bottom_line" />
app/src/main/res/layout/activity_register_account.xml
New file
@@ -0,0 +1,347 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/parent_cl"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.account.RegisterAccountActivity">
    <TextView
        android:id="@+id/register_back_tv"
        android:layout_width="@dimen/dp_24"
        android:layout_height="@dimen/dp_24"
        android:layout_marginStart="@dimen/dp_16"
        android:layout_marginTop="@dimen/dp_12"
        android:background="@drawable/back"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <TextView
        android:id="@+id/register_title_tv"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/dp_39"
        android:layout_marginStart="@dimen/dp_20"
        android:layout_marginTop="@dimen/dp_42"
        android:text="@string/home_login_注册"
        android:textAlignment="center"
        android:textColor="@color/text_90000000"
        android:textSize="@dimen/text_28"
        android:textStyle="bold"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/register_back_tv" />
    <!--手机号-->
    <include
        android:id="@+id/register_phone_title_ic"
        layout="@layout/text_underline"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/dp_31"
        android:layout_marginTop="@dimen/dp_52"
        app:layout_constraintStart_toStartOf="@+id/register_title_tv"
        app:layout_constraintTop_toBottomOf="@+id/register_title_tv" />
    <!--邮箱-->
    <include
        android:id="@+id/register_mail_title_ic"
        layout="@layout/text_underline"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/dp_31"
        android:layout_marginStart="@dimen/dp_28"
        android:layout_marginTop="@dimen/dp_52"
        app:layout_constraintStart_toEndOf="@+id/register_phone_title_ic"
        app:layout_constraintTop_toBottomOf="@+id/register_title_tv" />
    <RelativeLayout
        android:id="@+id/register_region_server_rl"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_60"
        android:layout_marginTop="102.5dp"
        app:layout_constraintStart_toStartOf="@+id/register_title_tv"
        app:layout_constraintTop_toBottomOf="@+id/register_title_tv">
        <ImageView
            android:id="@+id/region_iv"
            android:layout_width="@dimen/dp_13"
            android:layout_height="@dimen/dp_13"
            android:layout_centerVertical="true"
            android:layout_marginStart="@dimen/dp_20"
            android:src="@drawable/region" />
        <TextView
            android:id="@+id/region_tv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginStart="@dimen/dp_10"
            android:layout_marginEnd="@dimen/dp_20"
            android:layout_toEndOf="@+id/region_iv"
            android:gravity="center_vertical"
            android:text="HDL China"
            android:textColor="@color/text_90000000"
            android:textSize="@dimen/text_16" />
        <ImageView
            android:id="@+id/region_next_iv"
            android:layout_width="@dimen/dp_13"
            android:layout_height="@dimen/dp_13"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:layout_marginEnd="@dimen/dp_26"
            android:src="@drawable/next" />
        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dp"
            android:layout_alignParentBottom="true"
            android:layout_marginStart="@dimen/dp_20"
            android:layout_marginEnd="@dimen/dp_20"
            android:background="@color/text_E1E1E1" />
    </RelativeLayout>
    <RelativeLayout
        android:id="@+id/register_region_account_rl"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_60"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/register_region_server_rl">
        <TextView
            android:id="@+id/region_account_tv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginStart="@dimen/dp_20"
            android:layout_marginEnd="@dimen/dp_150"
            android:gravity="center_vertical"
            android:text="中国大陆"
            android:textColor="@color/text_90000000"
            android:textSize="@dimen/text_16" />
        <TextView
            android:id="@+id/region_account_number_tv"
            android:layout_width="@dimen/dp_90"
            android:layout_height="match_parent"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:layout_marginEnd="@dimen/dp_58"
            android:gravity="center_vertical|end"
            android:text="+86"
            android:textColor="@color/text_030D1C"
            android:textSize="@dimen/text_16"
            />
        <ImageView
            android:id="@+id/region_account_next_iv"
            android:layout_width="@dimen/dp_32"
            android:layout_height="@dimen/dp_32"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:layout_marginEnd="@dimen/dp_26"
            android:src="@drawable/spinner" />
        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dp"
            android:layout_alignParentBottom="true"
            android:layout_marginStart="@dimen/dp_20"
            android:layout_marginEnd="@dimen/dp_20"
            android:background="@color/text_E1E1E1" />
    </RelativeLayout>
    <RelativeLayout
        android:id="@+id/register_account_rl"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_60"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/register_region_account_rl">
        <EditText
            android:id="@+id/register_account_et"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginStart="@dimen/dp_20"
            android:layout_marginEnd="@dimen/dp_60"
            android:background="@null"
            android:hint="@string/home_login_请输入手机号"
            android:inputType="text"
            android:lines="1"
            android:maxLines="1"
            android:textColor="@color/text_FF000000"
            android:textColorHint="@color/text_25000000"
            android:textSize="@dimen/text_16" />
        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dp"
            android:layout_alignParentBottom="true"
            android:layout_marginStart="@dimen/dp_20"
            android:layout_marginEnd="@dimen/dp_20"
            android:background="@color/text_E1E1E1" />
    </RelativeLayout>
    <RelativeLayout
        android:id="@+id/register_psw_rl"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_60"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/register_account_rl">
        <EditText
            android:id="@+id/register_psw_et"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginStart="@dimen/dp_20"
            android:layout_marginEnd="@dimen/dp_60"
            android:background="@null"
            android:hint="@string/home_login_input_6_16"
            android:inputType="textPassword"
            android:lines="1"
            android:maxLines="1"
            android:textColor="@color/text_FF000000"
            android:textColorHint="@color/text_25000000"
            android:textSize="@dimen/text_16" />
        <ImageView
            android:id="@+id/register_psw_hide_iv"
            android:layout_width="@dimen/dp_20"
            android:layout_height="@dimen/dp_20"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:layout_marginEnd="@dimen/dp_32"
            android:src="@drawable/hide" />
        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dp"
            android:layout_alignParentBottom="true"
            android:layout_marginStart="@dimen/dp_20"
            android:layout_marginEnd="@dimen/dp_20"
            android:background="@color/text_E1E1E1" />
    </RelativeLayout>
    <RelativeLayout
        android:id="@+id/register_confirm_psw_rl"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_60"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/register_psw_rl">
        <EditText
            android:id="@+id/register_confirm_psw_et"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginStart="@dimen/dp_20"
            android:layout_marginEnd="@dimen/dp_60"
            android:background="@null"
            android:hint="@string/home_login_confirm_psw"
            android:inputType="textPassword"
            android:lines="1"
            android:maxLines="1"
            android:textColor="@color/text_FF000000"
            android:textColorHint="@color/text_25000000"
            android:textSize="@dimen/text_16" />
        <ImageView
            android:id="@+id/register_confirm_psw_hide_iv"
            android:layout_width="@dimen/dp_20"
            android:layout_height="@dimen/dp_20"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:layout_marginEnd="@dimen/dp_32"
            android:src="@drawable/hide" />
        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dp"
            android:layout_alignParentBottom="true"
            android:layout_marginStart="@dimen/dp_20"
            android:layout_marginEnd="@dimen/dp_20"
            android:background="@color/text_E1E1E1" />
    </RelativeLayout>
    <RelativeLayout
        android:id="@+id/register_verification_code_rl"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_60"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/register_confirm_psw_rl">
        <TextView
            android:id="@+id/register_verification_tv"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignParentEnd="true"
            android:layout_marginEnd="@dimen/dp_20"
            android:gravity="center"
            android:padding="@dimen/dp_16"
            android:text="@string/home_login_验证码"
            android:textColor="@color/text_245EC3"
            android:textSize="@dimen/text_14" />
        <View
            android:id="@+id/register_verification_v"
            android:layout_width="0.5dp"
            android:layout_height="20dp"
            android:layout_alignStart="@+id/register_verification_tv"
            android:layout_centerInParent="true"
            android:background="@color/text_E1E1E1" />
        <EditText
            android:id="@+id/register_verification_et"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignStart="@+id/register_verification_v"
            android:layout_alignParentStart="true"
            android:layout_marginStart="@dimen/dp_20"
            android:background="@null"
            android:hint="@string/home_login_input_验证码"
            android:inputType="text"
            android:lines="1"
            android:maxLines="1"
            android:textColor="@color/text_FF000000"
            android:textColorHint="@color/text_25000000"
            android:textSize="@dimen/text_16"
            />
        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dp"
            android:layout_alignParentBottom="true"
            android:layout_marginStart="@dimen/dp_20"
            android:layout_marginEnd="@dimen/dp_20"
            android:background="@color/text_E1E1E1" />
    </RelativeLayout>
    <TextView
        android:id="@+id/account_title_tv"
        android:layout_width="0dp"
        android:layout_height="52dp"
        android:layout_marginStart="@dimen/dp_20"
        android:layout_marginTop="@dimen/dp_42"
        android:layout_marginEnd="@dimen/dp_20"
        android:background="@drawable/yesandnocheck"
        android:enabled="false"
        android:gravity="center"
        android:text="@string/home_login_注册"
        android:textColor="@color/text_FFFFFFFF"
        android:textSize="18sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/register_verification_code_rl" />
</androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/dialog_confirm_cancel.xml
app/src/main/res/layout/dialog_confirm_input.xml
app/src/main/res/layout/dialog_confirmation_tip.xml
New file
@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="280dp"
        android:layout_height="229dp"
        android:background="@drawable/confirmation_bj"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
        <TextView
            android:id="@+id/title_tv"
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp_25"
            android:layout_marginTop="@dimen/dp_24"
            android:gravity="center"
            android:text="@string/home_login_pws_reset_succeeded"
            android:textColor="#222222"
            android:textSize="@dimen/text_18"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
        <TextView
            android:id="@+id/icon_tv"
            android:layout_width="@dimen/dp_48"
            android:layout_height="@dimen/dp_48"
            android:layout_marginTop="@dimen/dp_28"
            android:background="@drawable/succeed"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/title_tv" />
        <TextView
            android:id="@+id/comfirm_tv"
            android:layout_width="199dp"
            android:layout_height="@dimen/dp_52"
            android:layout_marginTop="@dimen/dp_28"
            android:background="@drawable/checked"
            android:gravity="center"
            android:text="@string/home_login_back_login"
            android:textColor="@color/ffffff"
            android:textSize="@dimen/text_18"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/icon_tv" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/dialog_exception_log.xml
app/src/main/res/layout/fragment_house_list.xml
@@ -8,7 +8,6 @@
    <include
        android:id="@+id/toolbar_top_fragment_house_list_rl"
        layout="@layout/toolbar_top_view_52" />
    <RelativeLayout
        android:id="@+id/fragment_house_list_head_rl"
        android:layout_width="match_parent"
@@ -16,7 +15,9 @@
        android:background="@color/text_F9FAFB"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/toolbar_top_fragment_house_list_rl">
        app:layout_constraintTop_toBottomOf="@+id/toolbar_top_fragment_house_list_rl"
        android:visibility="gone"
        >
        <LinearLayout
            android:id="@+id/fragment_house_list_content_ll"
app/src/main/res/layout/fragment_message.xml
New file
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<!--    <include-->
<!--        android:id="@+id/toolbar_top_fragment_me_rl"-->
<!--        layout="@layout/toolbar_top_view_52" />-->
</androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/frgment_house_list_line.xml
@@ -6,10 +6,12 @@
    <RelativeLayout
        android:id="@+id/fragment_house_list_line_parent_rl"
        android:layout_width="0dp"
        android:layout_height="130dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="@dimen/dp_12"
        android:layout_marginStart="@dimen/dp_20"
        android:layout_marginEnd="@dimen/dp_20"
        android:background="@drawable/house_list_line_parent_bg">
app/src/main/res/layout/home_bottom_line.xml
@@ -1,7 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="187dp"
    android:layout_height="@dimen/dp_49">
    android:layout_width="0dp"
    android:layout_height="@dimen/dp_49"
    android:layout_weight="1"
    >
    <ImageView
        android:id="@+id/icon_iv"
@@ -20,6 +22,15 @@
        android:layout_marginTop="@dimen/dp_2"
        android:textColor="@color/text_90000000"
        android:textSize="@dimen/text_10" />
    <TextView
        android:id="@+id/red_tv"
        android:layout_width="@dimen/dp_8"
        android:layout_height="@dimen/dp_8"
        android:background="@drawable/red_font"
        android:layout_alignEnd="@+id/icon_iv"
        android:layout_alignTop="@+id/icon_iv"
        android:visibility="gone"
         />
    <!--加大点击热区-->
    <TextView
        android:id="@+id/click_tv"
@@ -28,7 +39,9 @@
        android:layout_alignParentStart="true"
        android:layout_alignParentEnd="true"
        android:layout_marginStart="@dimen/dp_30"
        android:layout_marginEnd="@dimen/dp_30" />
        android:layout_marginEnd="@dimen/dp_30"
        />
</RelativeLayout>
app/src/main/res/layout/text_underline.xml
New file
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/underline_cl"
    android:layout_width="wrap_content"
    android:layout_height="@dimen/dp_31">
    <TextView
        android:id="@+id/account_title_tv"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/dp_28"
        android:gravity="center"
        android:text="@string/home_login_手机号"
        android:textColor="@color/text_40000000"
        android:textSize="@dimen/text_16" />
    <View
        android:id="@+id/line_v"
        android:layout_width="@dimen/dp_20"
        android:layout_height="3dp"
        android:layout_below="@+id/account_title_tv"
        android:layout_centerInParent="true"
        android:background="@color/text_245EC3"
        android:visibility="gone"
        />
</RelativeLayout>
app/src/main/res/values/strings.xml
@@ -20,6 +20,7 @@
    <string name="home_login_请输入密码">请输入密码</string>
    <string name="home_login_注册">注册</string>
    <string name="home_login_忘记密码">忘记密码</string>
    <string name="home_login_修改密码">修改密码</string>
    <string name="home_login_登录">登录</string>
    <string name="home_login_登录中">登录中…</string>
    <string name="home_login_体验电站">体验电站</string>
@@ -27,9 +28,28 @@
    <string name="home_login_error_账号不能为空">账号不能为空.</string>
    <string name="home_login_error_密码不能为空">密码不能为空.</string>
    <string name="home_login_error_账号或者密码不对">账号或者密码不对,请重新输入.</string>
    <string name="home_login_error_最少6_16个字符">密码不符合最低安全要求,最少6–16个字符.</string>
    <string name="home_login_error_6_16_str">密码不符合最低安全要求,最少6–16个字符.</string>
    <string name="home_login_error_密码不能小于6个字符">密码不能小于6个字符.</string>
    <string name="home_login_error_密码不能大于16个字符">密码不能大于16个字符.</string>
    <string name="home_login_input_6_16">请输入6–16位的密码</string>
    <string name="home_login_confirm_psw">请再次确认密码</string>
    <string name="home_login_手机号">手机号</string>
    <string name="home_login_邮箱">邮箱</string>
    <string name="home_login_input_mail">请输入邮箱</string>
    <string name="home_login_国家_区域">请选择国家/区域</string>
    <string name="home_login_验证码">获取验证码</string>
    <string name="home_login_input_验证码">请输入验证码</string>
    <string name="home_login_确认重置">确认重置</string>
    <string name="home_login_null_验证码">验证码不能为空.</string>
    <string name="home_login_phone_null">手机号不能为空.</string>
    <string name="home_login_mail_null">邮箱不能为空.</string>
    <string name="home_login_psw_unlikeliness">两次输入密码不一样.</string>
    <string name="home_login_psw_verification_repeater">后重发</string>
    <string name="home_login_verification_regain">重新获取</string>
    <string name="home_login_pws_reset_succeeded">密码重置成功</string>
    <string name="home_login_back_login">返回登录</string>
    <string name="home_login_send_mail">发送至邮箱</string>
    <!--我的电站-->
    <string name="my_power_station_电站">电站</string>
@@ -48,6 +68,8 @@
    <string name="device_手动连接">手动连接</string>
    <string name="device_加载中">加载中…</string>
    <!--消息-->
    <string name="message_消息">消息</string>
    <!--我的-->
    <string name="me_我的">我的</string>
local.properties
@@ -4,5 +4,5 @@
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Thu Jun 29 18:00:39 CST 2023
sdk.dir=/Users/wenjucheng/Library/Android/sdk
#Sun Aug 06 16:06:53 CST 2023
sdk.dir=/Users/user/Library/Android/sdk