diff --git a/.gradle/7.3.3/checksums/checksums.lock b/.gradle/7.3.3/checksums/checksums.lock new file mode 100644 index 0000000..b867ed7 Binary files /dev/null and b/.gradle/7.3.3/checksums/checksums.lock differ diff --git a/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock b/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000..efc9196 Binary files /dev/null and b/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock differ diff --git a/application/.gradle/7.3.3/dependencies-accessors/gc.properties b/.gradle/7.3.3/dependencies-accessors/gc.properties similarity index 100% rename from application/.gradle/7.3.3/dependencies-accessors/gc.properties rename to .gradle/7.3.3/dependencies-accessors/gc.properties diff --git a/.gradle/7.3.3/executionHistory/executionHistory.lock b/.gradle/7.3.3/executionHistory/executionHistory.lock new file mode 100644 index 0000000..b07a812 Binary files /dev/null and b/.gradle/7.3.3/executionHistory/executionHistory.lock differ diff --git a/application/.gradle/7.3.3/fileChanges/last-build.bin b/.gradle/7.3.3/fileChanges/last-build.bin similarity index 100% rename from application/.gradle/7.3.3/fileChanges/last-build.bin rename to .gradle/7.3.3/fileChanges/last-build.bin diff --git a/.gradle/7.3.3/fileHashes/fileHashes.lock b/.gradle/7.3.3/fileHashes/fileHashes.lock new file mode 100644 index 0000000..e5bd368 Binary files /dev/null and b/.gradle/7.3.3/fileHashes/fileHashes.lock differ diff --git a/application/.gradle/7.3.3/gc.properties b/.gradle/7.3.3/gc.properties similarity index 100% rename from application/.gradle/7.3.3/gc.properties rename to .gradle/7.3.3/gc.properties diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000..adde3a2 Binary files /dev/null and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..775755e --- /dev/null +++ b/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Fri Aug 19 18:36:32 KST 2022 +gradle.version=7.3.3 diff --git a/application/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties similarity index 100% rename from application/.gradle/vcs-1/gc.properties rename to .gradle/vcs-1/gc.properties diff --git a/application/.idea/compiler.xml b/.idea/compiler.xml similarity index 75% rename from application/.idea/compiler.xml rename to .idea/compiler.xml index fb7f4a8..443b5d2 100644 --- a/application/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..6ed36dd --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 1c8b1e9..0000000 --- a/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Hanium-front - -반려동물 질병 상담을 위한 인공지능 챗봇 diff --git a/app b/app new file mode 160000 index 0000000..10696d6 --- /dev/null +++ b/app @@ -0,0 +1 @@ +Subproject commit 10696d6f8e4664d3b7e9c8b68e905626fad00af7 diff --git a/.gitignore b/application/.gitignore similarity index 98% rename from .gitignore rename to application/.gitignore index f303549..2edf3e3 100644 --- a/.gitignore +++ b/application/.gitignore @@ -238,3 +238,6 @@ fabric.properties !/gradle/wrapper/gradle-wrapper.jar # End of https://www.toptal.com/developers/gitignore/api/macos,gradle,androidstudio,android,java +======= +/build +>>>>>>> ce01560af1ee5d401f95b7d0e4eb8569aa810f83 diff --git a/application/.gradle/7.3.3/checksums/checksums.lock b/application/.gradle/7.3.3/checksums/checksums.lock deleted file mode 100644 index 6637b62..0000000 Binary files a/application/.gradle/7.3.3/checksums/checksums.lock and /dev/null differ diff --git a/application/.gradle/7.3.3/checksums/md5-checksums.bin b/application/.gradle/7.3.3/checksums/md5-checksums.bin deleted file mode 100644 index 3d0a869..0000000 Binary files a/application/.gradle/7.3.3/checksums/md5-checksums.bin and /dev/null differ diff --git a/application/.gradle/7.3.3/checksums/sha1-checksums.bin b/application/.gradle/7.3.3/checksums/sha1-checksums.bin deleted file mode 100644 index 9f342c3..0000000 Binary files a/application/.gradle/7.3.3/checksums/sha1-checksums.bin and /dev/null differ diff --git a/application/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock b/application/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock deleted file mode 100644 index 4fa0fa4..0000000 Binary files a/application/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock and /dev/null differ diff --git a/application/.gradle/7.3.3/executionHistory/executionHistory.bin b/application/.gradle/7.3.3/executionHistory/executionHistory.bin deleted file mode 100644 index cda6f7f..0000000 Binary files a/application/.gradle/7.3.3/executionHistory/executionHistory.bin and /dev/null differ diff --git a/application/.gradle/7.3.3/executionHistory/executionHistory.lock b/application/.gradle/7.3.3/executionHistory/executionHistory.lock deleted file mode 100644 index 7da9b16..0000000 Binary files a/application/.gradle/7.3.3/executionHistory/executionHistory.lock and /dev/null differ diff --git a/application/.gradle/7.3.3/fileHashes/fileHashes.bin b/application/.gradle/7.3.3/fileHashes/fileHashes.bin deleted file mode 100644 index 203fee5..0000000 Binary files a/application/.gradle/7.3.3/fileHashes/fileHashes.bin and /dev/null differ diff --git a/application/.gradle/7.3.3/fileHashes/fileHashes.lock b/application/.gradle/7.3.3/fileHashes/fileHashes.lock deleted file mode 100644 index 5a21eb1..0000000 Binary files a/application/.gradle/7.3.3/fileHashes/fileHashes.lock and /dev/null differ diff --git a/application/.gradle/7.3.3/fileHashes/resourceHashesCache.bin b/application/.gradle/7.3.3/fileHashes/resourceHashesCache.bin deleted file mode 100644 index f986b57..0000000 Binary files a/application/.gradle/7.3.3/fileHashes/resourceHashesCache.bin and /dev/null differ diff --git a/application/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/application/.gradle/buildOutputCleanup/buildOutputCleanup.lock deleted file mode 100644 index 518ae0e..0000000 Binary files a/application/.gradle/buildOutputCleanup/buildOutputCleanup.lock and /dev/null differ diff --git a/application/.gradle/buildOutputCleanup/cache.properties b/application/.gradle/buildOutputCleanup/cache.properties deleted file mode 100644 index 3db02cc..0000000 --- a/application/.gradle/buildOutputCleanup/cache.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Fri Aug 12 13:02:43 KST 2022 -gradle.version=7.3.3 diff --git a/application/.gradle/buildOutputCleanup/outputFiles.bin b/application/.gradle/buildOutputCleanup/outputFiles.bin deleted file mode 100644 index 2882227..0000000 Binary files a/application/.gradle/buildOutputCleanup/outputFiles.bin and /dev/null differ diff --git a/application/.gradle/file-system.probe b/application/.gradle/file-system.probe deleted file mode 100644 index 20b8fcd..0000000 Binary files a/application/.gradle/file-system.probe and /dev/null differ diff --git a/application/.idea/.gitignore b/application/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/application/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/application/.idea/.name b/application/.idea/.name deleted file mode 100644 index b3405b3..0000000 --- a/application/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -My Application \ No newline at end of file diff --git a/application/.idea/deploymentTargetDropDown.xml b/application/.idea/deploymentTargetDropDown.xml deleted file mode 100644 index 06b6572..0000000 --- a/application/.idea/deploymentTargetDropDown.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/gradle.xml b/application/.idea/gradle.xml deleted file mode 100644 index a2d7c21..0000000 --- a/application/.idea/gradle.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_activity_activity_1_5_0_aar.xml b/application/.idea/libraries/Gradle__androidx_activity_activity_1_5_0_aar.xml deleted file mode 100644 index ba1c91a..0000000 --- a/application/.idea/libraries/Gradle__androidx_activity_activity_1_5_0_aar.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_activity_activity_ktx_1_5_0_aar.xml b/application/.idea/libraries/Gradle__androidx_activity_activity_ktx_1_5_0_aar.xml deleted file mode 100644 index 716c357..0000000 --- a/application/.idea/libraries/Gradle__androidx_activity_activity_ktx_1_5_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_annotation_annotation_1_3_0.xml b/application/.idea/libraries/Gradle__androidx_annotation_annotation_1_3_0.xml deleted file mode 100644 index 7aace70..0000000 --- a/application/.idea/libraries/Gradle__androidx_annotation_annotation_1_3_0.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_1_0_aar.xml b/application/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_1_0_aar.xml deleted file mode 100644 index 3fa6395..0000000 --- a/application/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_1_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_4_2_aar.xml b/application/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_4_2_aar.xml deleted file mode 100644 index 81b950c..0000000 --- a/application/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_4_2_aar.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_4_2_aar.xml b/application/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_4_2_aar.xml deleted file mode 100644 index 6dd563b..0000000 --- a/application/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_4_2_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml b/application/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml deleted file mode 100644 index 2208415..0000000 --- a/application/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml b/application/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml deleted file mode 100644 index 29b5538..0000000 --- a/application/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml b/application/.idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml deleted file mode 100644 index ce4fd56..0000000 --- a/application/.idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml b/application/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml deleted file mode 100644 index eafc05e..0000000 --- a/application/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_collection_collection_ktx_1_1_0.xml b/application/.idea/libraries/Gradle__androidx_collection_collection_ktx_1_1_0.xml deleted file mode 100644 index 5183afa..0000000 --- a/application/.idea/libraries/Gradle__androidx_collection_collection_ktx_1_1_0.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_1_4_aar.xml b/application/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_1_4_aar.xml deleted file mode 100644 index d840cf4..0000000 --- a/application/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_1_4_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml b/application/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml deleted file mode 100644 index 71334bf..0000000 --- a/application/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_core_core_1_8_0_aar.xml b/application/.idea/libraries/Gradle__androidx_core_core_1_8_0_aar.xml deleted file mode 100644 index 4b2d208..0000000 --- a/application/.idea/libraries/Gradle__androidx_core_core_1_8_0_aar.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_core_core_ktx_1_2_0_aar.xml b/application/.idea/libraries/Gradle__androidx_core_core_ktx_1_2_0_aar.xml deleted file mode 100644 index 135b466..0000000 --- a/application/.idea/libraries/Gradle__androidx_core_core_ktx_1_2_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml b/application/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml deleted file mode 100644 index 16e4889..0000000 --- a/application/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_customview_customview_1_1_0_aar.xml b/application/.idea/libraries/Gradle__androidx_customview_customview_1_1_0_aar.xml deleted file mode 100644 index 5ac788c..0000000 --- a/application/.idea/libraries/Gradle__androidx_customview_customview_1_1_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_databinding_viewbinding_7_2_1_aar.xml b/application/.idea/libraries/Gradle__androidx_databinding_viewbinding_7_2_1_aar.xml deleted file mode 100644 index f945bc8..0000000 --- a/application/.idea/libraries/Gradle__androidx_databinding_viewbinding_7_2_1_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml b/application/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml deleted file mode 100644 index e707353..0000000 --- a/application/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_1_1_aar.xml b/application/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_1_1_aar.xml deleted file mode 100644 index c3e5080..0000000 --- a/application/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_1_1_aar.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_dynamicanimation_dynamicanimation_1_0_0_aar.xml b/application/.idea/libraries/Gradle__androidx_dynamicanimation_dynamicanimation_1_0_0_aar.xml deleted file mode 100644 index 7faa3b9..0000000 --- a/application/.idea/libraries/Gradle__androidx_dynamicanimation_dynamicanimation_1_0_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_fragment_fragment_1_5_0_aar.xml b/application/.idea/libraries/Gradle__androidx_fragment_fragment_1_5_0_aar.xml deleted file mode 100644 index a2e9c68..0000000 --- a/application/.idea/libraries/Gradle__androidx_fragment_fragment_1_5_0_aar.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_fragment_fragment_ktx_1_5_0_aar.xml b/application/.idea/libraries/Gradle__androidx_fragment_fragment_ktx_1_5_0_aar.xml deleted file mode 100644 index 3173ce9..0000000 --- a/application/.idea/libraries/Gradle__androidx_fragment_fragment_ktx_1_5_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml b/application/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml deleted file mode 100644 index f3b0a4d..0000000 --- a/application/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml b/application/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml deleted file mode 100644 index 5672d22..0000000 --- a/application/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_5_0.xml b/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_5_0.xml deleted file mode 100644 index 9442ef8..0000000 --- a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_5_0.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_5_0_aar.xml b/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_5_0_aar.xml deleted file mode 100644 index 1876a1f..0000000 --- a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_5_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_5_0_aar.xml b/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_5_0_aar.xml deleted file mode 100644 index 38162d5..0000000 --- a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_5_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_ktx_2_5_0_aar.xml b/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_ktx_2_5_0_aar.xml deleted file mode 100644 index 68d8b5c..0000000 --- a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_ktx_2_5_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_ktx_2_5_0_aar.xml b/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_ktx_2_5_0_aar.xml deleted file mode 100644 index e02828d..0000000 --- a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_ktx_2_5_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_5_0_aar.xml b/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_5_0_aar.xml deleted file mode 100644 index 1508e47..0000000 --- a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_5_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_ktx_2_5_0_aar.xml b/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_ktx_2_5_0_aar.xml deleted file mode 100644 index d2dd67d..0000000 --- a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_ktx_2_5_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_5_0_aar.xml b/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_5_0_aar.xml deleted file mode 100644 index 487b937..0000000 --- a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_5_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_ktx_2_5_0_aar.xml b/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_ktx_2_5_0_aar.xml deleted file mode 100644 index a1c2761..0000000 --- a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_ktx_2_5_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_5_0_aar.xml b/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_5_0_aar.xml deleted file mode 100644 index ef4ff5c..0000000 --- a/application/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_5_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml b/application/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml deleted file mode 100644 index 500336a..0000000 --- a/application/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml b/application/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml deleted file mode 100644 index b5ba420..0000000 --- a/application/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_navigation_navigation_common_2_5_0_aar.xml b/application/.idea/libraries/Gradle__androidx_navigation_navigation_common_2_5_0_aar.xml deleted file mode 100644 index 89e4a2a..0000000 --- a/application/.idea/libraries/Gradle__androidx_navigation_navigation_common_2_5_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_navigation_navigation_fragment_2_5_0_aar.xml b/application/.idea/libraries/Gradle__androidx_navigation_navigation_fragment_2_5_0_aar.xml deleted file mode 100644 index 778673f..0000000 --- a/application/.idea/libraries/Gradle__androidx_navigation_navigation_fragment_2_5_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_navigation_navigation_runtime_2_5_0_aar.xml b/application/.idea/libraries/Gradle__androidx_navigation_navigation_runtime_2_5_0_aar.xml deleted file mode 100644 index 292053f..0000000 --- a/application/.idea/libraries/Gradle__androidx_navigation_navigation_runtime_2_5_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_navigation_navigation_ui_2_5_0_aar.xml b/application/.idea/libraries/Gradle__androidx_navigation_navigation_ui_2_5_0_aar.xml deleted file mode 100644 index 582b67f..0000000 --- a/application/.idea/libraries/Gradle__androidx_navigation_navigation_ui_2_5_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml b/application/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml deleted file mode 100644 index beee87d..0000000 --- a/application/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_1_0_aar.xml b/application/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_1_0_aar.xml deleted file mode 100644 index 3655384..0000000 --- a/application/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_1_0_aar.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_2_0_aar.xml b/application/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_2_0_aar.xml deleted file mode 100644 index a673834..0000000 --- a/application/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_2_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_savedstate_savedstate_ktx_1_2_0_aar.xml b/application/.idea/libraries/Gradle__androidx_savedstate_savedstate_ktx_1_2_0_aar.xml deleted file mode 100644 index 03bcd68..0000000 --- a/application/.idea/libraries/Gradle__androidx_savedstate_savedstate_ktx_1_2_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_2_0_aar.xml b/application/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_2_0_aar.xml deleted file mode 100644 index e9ae799..0000000 --- a/application/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_2_0_aar.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_test_core_1_4_0_aar.xml b/application/.idea/libraries/Gradle__androidx_test_core_1_4_0_aar.xml deleted file mode 100644 index 65fd5b4..0000000 --- a/application/.idea/libraries/Gradle__androidx_test_core_1_4_0_aar.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_test_espresso_espresso_core_3_4_0_aar.xml b/application/.idea/libraries/Gradle__androidx_test_espresso_espresso_core_3_4_0_aar.xml deleted file mode 100644 index 922362d..0000000 --- a/application/.idea/libraries/Gradle__androidx_test_espresso_espresso_core_3_4_0_aar.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_test_espresso_espresso_idling_resource_3_4_0_aar.xml b/application/.idea/libraries/Gradle__androidx_test_espresso_espresso_idling_resource_3_4_0_aar.xml deleted file mode 100644 index 47092c3..0000000 --- a/application/.idea/libraries/Gradle__androidx_test_espresso_espresso_idling_resource_3_4_0_aar.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_test_ext_junit_1_1_3_aar.xml b/application/.idea/libraries/Gradle__androidx_test_ext_junit_1_1_3_aar.xml deleted file mode 100644 index 0006fc8..0000000 --- a/application/.idea/libraries/Gradle__androidx_test_ext_junit_1_1_3_aar.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_test_monitor_1_4_0_aar.xml b/application/.idea/libraries/Gradle__androidx_test_monitor_1_4_0_aar.xml deleted file mode 100644 index 0cdd071..0000000 --- a/application/.idea/libraries/Gradle__androidx_test_monitor_1_4_0_aar.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_test_runner_1_4_0_aar.xml b/application/.idea/libraries/Gradle__androidx_test_runner_1_4_0_aar.xml deleted file mode 100644 index ea6323a..0000000 --- a/application/.idea/libraries/Gradle__androidx_test_runner_1_4_0_aar.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_test_services_storage_1_4_0_aar.xml b/application/.idea/libraries/Gradle__androidx_test_services_storage_1_4_0_aar.xml deleted file mode 100644 index df66979..0000000 --- a/application/.idea/libraries/Gradle__androidx_test_services_storage_1_4_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_transition_transition_1_2_0_aar.xml b/application/.idea/libraries/Gradle__androidx_transition_transition_1_2_0_aar.xml deleted file mode 100644 index 7c0bae9..0000000 --- a/application/.idea/libraries/Gradle__androidx_transition_transition_1_2_0_aar.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_transition_transition_1_4_1_aar.xml b/application/.idea/libraries/Gradle__androidx_transition_transition_1_4_1_aar.xml deleted file mode 100644 index 20315ae..0000000 --- a/application/.idea/libraries/Gradle__androidx_transition_transition_1_4_1_aar.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml b/application/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml deleted file mode 100644 index 12daaed..0000000 --- a/application/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml b/application/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml deleted file mode 100644 index cabab67..0000000 --- a/application/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml b/application/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml deleted file mode 100644 index 9a8d141..0000000 --- a/application/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml b/application/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml deleted file mode 100644 index 006cf89..0000000 --- a/application/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml b/application/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml deleted file mode 100644 index 7c8bcc4..0000000 --- a/application/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__com_android_volley_volley_1_2_1_aar.xml b/application/.idea/libraries/Gradle__com_android_volley_volley_1_2_1_aar.xml deleted file mode 100644 index f0e7e1c..0000000 --- a/application/.idea/libraries/Gradle__com_android_volley_volley_1_2_1_aar.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__com_google_android_material_material_1_6_1_aar.xml b/application/.idea/libraries/Gradle__com_google_android_material_material_1_6_1_aar.xml deleted file mode 100644 index df7a4fa..0000000 --- a/application/.idea/libraries/Gradle__com_google_android_material_material_1_6_1_aar.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1.xml b/application/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1.xml deleted file mode 100644 index 2b834ea..0000000 --- a/application/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__com_google_code_gson_gson_2_9_0.xml b/application/.idea/libraries/Gradle__com_google_code_gson_gson_2_9_0.xml deleted file mode 100644 index a0c1b13..0000000 --- a/application/.idea/libraries/Gradle__com_google_code_gson_gson_2_9_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__com_squareup_javawriter_2_1_1.xml b/application/.idea/libraries/Gradle__com_squareup_javawriter_2_1_1.xml deleted file mode 100644 index 662b001..0000000 --- a/application/.idea/libraries/Gradle__com_squareup_javawriter_2_1_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_12_0.xml b/application/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_12_0.xml deleted file mode 100644 index dd42add..0000000 --- a/application/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_12_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__com_squareup_okio_okio_1_15_0.xml b/application/.idea/libraries/Gradle__com_squareup_okio_okio_1_15_0.xml deleted file mode 100644 index 4d41f7a..0000000 --- a/application/.idea/libraries/Gradle__com_squareup_okio_okio_1_15_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__com_squareup_retrofit2_converter_gson_2_5_0.xml b/application/.idea/libraries/Gradle__com_squareup_retrofit2_converter_gson_2_5_0.xml deleted file mode 100644 index 7d42f5a..0000000 --- a/application/.idea/libraries/Gradle__com_squareup_retrofit2_converter_gson_2_5_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__com_squareup_retrofit2_retrofit_2_5_0.xml b/application/.idea/libraries/Gradle__com_squareup_retrofit2_retrofit_2_5_0.xml deleted file mode 100644 index 7db9d92..0000000 --- a/application/.idea/libraries/Gradle__com_squareup_retrofit2_retrofit_2_5_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml b/application/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml deleted file mode 100644 index 62012ea..0000000 --- a/application/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__junit_junit_4_12.xml b/application/.idea/libraries/Gradle__junit_junit_4_12.xml deleted file mode 100644 index f7d27c4..0000000 --- a/application/.idea/libraries/Gradle__junit_junit_4_12.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__junit_junit_4_13_2.xml b/application/.idea/libraries/Gradle__junit_junit_4_13_2.xml deleted file mode 100644 index 198592d..0000000 --- a/application/.idea/libraries/Gradle__junit_junit_4_13_2.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml b/application/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml deleted file mode 100644 index 09cf23d..0000000 --- a/application/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3.xml b/application/.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3.xml deleted file mode 100644 index 1a77dd8..0000000 --- a/application/.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3.xml b/application/.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3.xml deleted file mode 100644 index 3d45e8e..0000000 --- a/application/.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml b/application/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml deleted file mode 100644 index 1fa0fa9..0000000 --- a/application/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_6_21.xml b/application/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_6_21.xml deleted file mode 100644 index e9f77dc..0000000 --- a/application/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_6_21.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_21.xml b/application/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_21.xml deleted file mode 100644 index 5ea0bbf..0000000 --- a/application/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_21.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_6_0.xml b/application/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_6_0.xml deleted file mode 100644 index 935133d..0000000 --- a/application/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_6_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_6_0.xml b/application/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_6_0.xml deleted file mode 100644 index 5f93893..0000000 --- a/application/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_6_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_6_1.xml b/application/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_6_1.xml deleted file mode 100644 index 960d7e5..0000000 --- a/application/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_6_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_6_1.xml b/application/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_6_1.xml deleted file mode 100644 index 7f61d14..0000000 --- a/application/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_6_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/misc.xml b/application/.idea/misc.xml deleted file mode 100644 index 03ccd08..0000000 --- a/application/.idea/misc.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/modules.xml b/application/.idea/modules.xml deleted file mode 100644 index 4cf8b57..0000000 --- a/application/.idea/modules.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/modules/My_Application.iml b/application/.idea/modules/My_Application.iml deleted file mode 100644 index 7049e1b..0000000 --- a/application/.idea/modules/My_Application.iml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/modules/app/My_Application.app.androidTest.iml b/application/.idea/modules/app/My_Application.app.androidTest.iml deleted file mode 100644 index 59386a5..0000000 --- a/application/.idea/modules/app/My_Application.app.androidTest.iml +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/modules/app/My_Application.app.iml b/application/.idea/modules/app/My_Application.app.iml deleted file mode 100644 index c1462fb..0000000 --- a/application/.idea/modules/app/My_Application.app.iml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/modules/app/My_Application.app.main.iml b/application/.idea/modules/app/My_Application.app.main.iml deleted file mode 100644 index 0d819af..0000000 --- a/application/.idea/modules/app/My_Application.app.main.iml +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/modules/app/My_Application.app.unitTest.iml b/application/.idea/modules/app/My_Application.app.unitTest.iml deleted file mode 100644 index f840bd7..0000000 --- a/application/.idea/modules/app/My_Application.app.unitTest.iml +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/application/.idea/vcs.xml b/application/.idea/vcs.xml deleted file mode 100644 index 6c0b863..0000000 --- a/application/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/application/app/.gitignore b/application/app/.gitignore index 42afabf..0d90568 100644 --- a/application/app/.gitignore +++ b/application/app/.gitignore @@ -1 +1,245 @@ -/build \ No newline at end of file +/build + +# Created by https://www.toptal.com/developers/gitignore/api/macos,gradle,androidstudio,android,java +# Edit at https://www.toptal.com/developers/gitignore?templates=macos,gradle,androidstudio,android,java + +### Android ### +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Log/OS Files +*.log + +# Android Studio generated files and folders +captures/ +.externalNativeBuild/ +.cxx/ +*.apk +output.json + +# IntelliJ +*.iml +.idea/ +misc.xml +deploymentTargetDropDown.xml +render.experimental.xml + +# Keystore files +*.jks +*.keystore + +# Google Services (e.g. APIs or Firebase) +google-services.json + +# Android Profiling +*.hprof + +### Android Patch ### +gen-external-apklibs + +# Replacement of .externalNativeBuild directories introduced +# with Android Studio 3.5. + +### Java ### +# Compiled class file +*.class + +# Log file + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +### Gradle ### +.gradle +**/build/ +!src/**/build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Avoid ignore Gradle wrappper properties +!gradle-wrapper.properties + +# Cache of project +.gradletasknamecache + +# Eclipse Gradle plugin generated files +# Eclipse Core +.project +# JDT-specific (Eclipse Java Development Tools) +.classpath + +### AndroidStudio ### +# Covers files to be ignored for android development using Android Studio. + +# Built application files +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files + +# Generated files +bin/ +gen/ +out/ + +# Gradle files + +# Signing files +.signing/ + +# Local configuration file (sdk path, etc) + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files + +# Android Studio +/*/build/ +/*/local.properties +/*/out +/*/*/build +/*/*/production +.navigation/ +*.ipr +*~ +*.swp + +# Keystore files + +# Google Services (e.g. APIs or Firebase) +# google-services.json + +# Android Patch + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild + +# NDK +obj/ + +# IntelliJ IDEA +*.iws +/out/ + +# User-specific configurations +.idea/caches/ +.idea/libraries/ +.idea/shelf/ +.idea/workspace.xml +.idea/tasks.xml +.idea/.name +.idea/compiler.xml +.idea/copyright/profiles_settings.xml +.idea/encodings.xml +.idea/misc.xml +.idea/modules.xml +.idea/scopes/scope_settings.xml +.idea/dictionaries +.idea/vcs.xml +.idea/jsLibraryMappings.xml +.idea/datasources.xml +.idea/dataSources.ids +.idea/sqlDataSources.xml +.idea/dynamic.xml +.idea/uiDesigner.xml +.idea/assetWizardSettings.xml +.idea/gradle.xml +.idea/jarRepositories.xml +.idea/navEditor.xml + +# Legacy Eclipse project files +.cproject +.settings/ + +# Mobile Tools for Java (J2ME) + +# Package Files # + +# virtual machine crash logs (Reference: http://www.java.com/en/download/help/error_hotspot.xml) + +## Plugin-specific files: + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Mongo Explorer plugin +.idea/mongoSettings.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +### AndroidStudio Patch ### + +!/gradle/wrapper/gradle-wrapper.jar + +# End of https://www.toptal.com/developers/gitignore/api/macos,gradle,androidstudio,android,java +======= +/build +>>>>>>> ce01560af1ee5d401f95b7d0e4eb8569aa810f83 diff --git a/application/app/build.gradle b/application/app/build.gradle index 3b5a418..586fb8c 100644 --- a/application/app/build.gradle +++ b/application/app/build.gradle @@ -1,16 +1,18 @@ plugins { id 'com.android.application' + id 'com.google.gms.google-services' + id 'com.google.firebase.crashlytics' } android { compileSdk 32 defaultConfig { - applicationId "com.example.myapplication" + applicationId "com.mnchatbot.myapplication" minSdk 21 targetSdk 32 - versionCode 1 - versionName "1.0" + versionCode 6 + versionName "1.0.5" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } @@ -20,6 +22,15 @@ android { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } + debug { + minifyEnabled false + } + + applicationVariants.all { variant -> + variant.outputs.all { + outputFileName = "mnchatbot_" + "${variant.versionName}.apk" + } + } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -32,6 +43,8 @@ android { implementation 'com.google.code.gson:gson:2.9.0' implementation 'com.squareup.retrofit2:retrofit:2.5.0' implementation 'com.squareup.retrofit2:converter-gson:2.5.0' + implementation 'com.github.bumptech.glide:glide:4.9.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0' } } @@ -41,6 +54,10 @@ dependencies { implementation 'com.squareup.retrofit2:retrofit:2.5.0' implementation 'com.squareup.retrofit2:converter-gson:2.5.0' + implementation platform('com.google.firebase:firebase-bom:31.1.0') + implementation 'com.google.firebase:firebase-crashlytics' + implementation 'com.google.firebase:firebase-analytics' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'com.google.android.material:material:1.6.1' implementation 'androidx.annotation:annotation:1.2.0' diff --git a/application/app/src/androidTest/java/com/example/myapplication/ExampleInstrumentedTest.java b/application/app/src/androidTest/java/com/second/ExampleInstrumentedTest.java similarity index 84% rename from application/app/src/androidTest/java/com/example/myapplication/ExampleInstrumentedTest.java rename to application/app/src/androidTest/java/com/second/ExampleInstrumentedTest.java index 982ba51..f546901 100644 --- a/application/app/src/androidTest/java/com/example/myapplication/ExampleInstrumentedTest.java +++ b/application/app/src/androidTest/java/com/second/ExampleInstrumentedTest.java @@ -1,4 +1,4 @@ -package com.example.myapplication; +package com.second; import android.content.Context; @@ -21,6 +21,6 @@ public class ExampleInstrumentedTest { public void useAppContext() { // Context of the app under test. Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - assertEquals("com.example.myapplication", appContext.getPackageName()); + assertEquals("com.mnchatbot.myapplication", appContext.getPackageName()); } } \ No newline at end of file diff --git a/application/app/src/main/AndroidManifest.xml b/application/app/src/main/AndroidManifest.xml index 842091b..9b3724c 100644 --- a/application/app/src/main/AndroidManifest.xml +++ b/application/app/src/main/AndroidManifest.xml @@ -1,17 +1,25 @@ + package="com.mnchatbot.myapplication"> + + + + + + + \ No newline at end of file diff --git a/application/app/src/main/ic_appicon-playstore.png b/application/app/src/main/ic_appicon-playstore.png new file mode 100644 index 0000000..0259309 Binary files /dev/null and b/application/app/src/main/ic_appicon-playstore.png differ diff --git a/application/app/src/main/java/com/example/myapplication/ui/join/RetrofitClient.java b/application/app/src/main/java/com/example/myapplication/ui/join/RetrofitClient.java deleted file mode 100644 index 45da5aa..0000000 --- a/application/app/src/main/java/com/example/myapplication/ui/join/RetrofitClient.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.example.myapplication.ui.join; - -import retrofit2.Retrofit; -import retrofit2.converter.gson.GsonConverterFactory; - -public class RetrofitClient { - private final static String BASE_URL = "https://12b969e5-87a6-4fca-a942-178ea253fdbc.mock.pstmn.io"; - //옌 post 서버 : https://12b969e5-87a6-4fca-a942-178ea253fdbc.mock.pstmn.io - //주현 서버 : https://7919ceb2-3999-4ed8-8bcc-16baaf4e62d4.mock.pstmn.io - private static Retrofit retrofit = null; - - private RetrofitClient() { } - - public static Retrofit getClient() { - if (retrofit == null) { - retrofit = new Retrofit.Builder() - .baseUrl(BASE_URL) // 요청을 보낼 base url을 설정한다. - .addConverterFactory(GsonConverterFactory.create()) // JSON 파싱을 위한 GsonConverterFactory를 추가한다. - .build(); - } - return retrofit; - } -} diff --git a/application/app/src/main/java/com/example/myapplication/ui/join/ServiceAPI.java b/application/app/src/main/java/com/example/myapplication/ui/join/ServiceAPI.java deleted file mode 100644 index 203af2f..0000000 --- a/application/app/src/main/java/com/example/myapplication/ui/join/ServiceAPI.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.example.myapplication.ui.join; - -import com.example.myapplication.ui.login.LoginRequest; - -import retrofit2.http.Body; -import retrofit2.http.POST; -import retrofit2.Call; - -public interface ServiceAPI { - @POST("/enterEmailCode/join") - Call userJoin(@Body JoinData data); - - @POST("/sendEmail") - Call sendEmail(@Body EmailValidationData data); - - @POST("/validateDuplicateEmail") - Call emailValidation(@Body EmailValidationData data); - - @POST("/changePw") //정보 수정.. put으로 가능함! - Call changePw(@Body LoginRequest data); - - @POST("/enterEmailCode/changePw") - Call enterEmailCode(@Body EmailCodeData data); -} diff --git a/application/app/src/main/java/com/example/myapplication/ui/login/LoginAPI.java b/application/app/src/main/java/com/example/myapplication/ui/login/LoginAPI.java deleted file mode 100644 index 3e6f56f..0000000 --- a/application/app/src/main/java/com/example/myapplication/ui/login/LoginAPI.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.example.myapplication.ui.login; - -import retrofit2.Call; -import retrofit2.http.Body; -import retrofit2.http.POST; - -interface LoginAPI { - //@통신 방식("통신 API명") - @POST("/login") - Call getLoginResponse(@Body LoginRequest loginRequest); -} diff --git a/application/app/src/main/java/com/example/myapplication/ui/login/LoginFormState.java b/application/app/src/main/java/com/example/myapplication/ui/login/LoginFormState.java deleted file mode 100644 index 6ae9549..0000000 --- a/application/app/src/main/java/com/example/myapplication/ui/login/LoginFormState.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.example.myapplication.ui.login; - - -/** - * Data validation state of the login form. - * 로그인 양식의 데이터 유효성 검사 상태입니다. - */ -class LoginFormState { - private String email; - private String password; - - //로그인 폼 상태가 유효한가 - public boolean isEmailValid() { - if (email == null || !email.contains("@")) { - return false; - } else { - return !email.trim().isEmpty(); - } - } - - // A placeholder password validation check - public boolean isPasswordValid() { - return password != null && password.trim().length() > 5 && isAlphaOrDigit(password); - } - - public boolean isValidData() { - return isPasswordValid() && isEmailValid(); - } - - - private boolean isAlphaOrDigit(String password) { - for(int i=0;i call = profileAPI.getPetinfo(petinfoData); - - call.enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - if (!response.equals(200)) { - Toast.makeText(getApplicationContext(),"변경되었습니다.", Toast.LENGTH_SHORT).show(); - Intent intent = new Intent(AddPetActivity.this, PetSelectActivity.class); - startActivity(intent); - AddPetActivity.this.finish(); - } - } - - @Override - public void onFailure(Call call, Throwable t) { - AlertDialog.Builder builder = new AlertDialog.Builder(AddPetActivity.this); - builder.setTitle("알림") - .setMessage("잠시 후에 다시 시도해주세요.") - .setPositiveButton("확인", null) - .create() - .show(); - } - }); - } -} \ No newline at end of file diff --git a/application/app/src/main/java/com/example/myapplication/ui/petSelect/PetSelectActivity.java b/application/app/src/main/java/com/example/myapplication/ui/petSelect/PetSelectActivity.java deleted file mode 100644 index 54b6077..0000000 --- a/application/app/src/main/java/com/example/myapplication/ui/petSelect/PetSelectActivity.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.example.myapplication.ui.petSelect; - -import android.content.Intent; -import android.os.Bundle; -import android.view.View; -import android.widget.Button; - -import androidx.appcompat.app.AppCompatActivity; - -import com.example.myapplication.R; -import com.example.myapplication.ui.mainPage.MainActivity; - -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import android.widget.Toast; - -import java.util.ArrayList; - -public class PetSelectActivity extends AppCompatActivity { - - private RecyclerView mRecyclerView; - private ArrayList mList; - private RecyclerViewAdapter mRecyclerViewAdapter; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.pet_activity_main); - - mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView); - mList = new ArrayList<>(); - - // 리사이클러뷰에 데이터추가 (함수가 밑에 구현되어있음) - addItem("cat", "밤이", "멍멍이"); - addItem("dog", "보리", "냐옹이"); - addItem("dog", "멍이", "냐옹이"); - addItem("cat", "나비", "냐옹이"); - addItem("cat", "냥냥", "냐옹이"); - - mRecyclerViewAdapter = new RecyclerViewAdapter(mList); - mRecyclerView.setAdapter(mRecyclerViewAdapter); - mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); - mRecyclerView.setLayoutManager(new LinearLayoutManager(this, RecyclerView.HORIZONTAL, false)); - - // 리사이클러뷰 안의 아이템(반려동물 아이콘) 클릭시 메인화면으로 이동 - mRecyclerViewAdapter.setOnItemClickListener(new RecyclerViewAdapter.OnItemClickListener() { - @Override - public void onItemClick(int pos) { - Intent intent = new Intent(getApplicationContext(), MainActivity.class); - startActivity(intent); - Toast.makeText(getApplicationContext(), "안녕!" + mList.get(pos).getMainText(), Toast.LENGTH_SHORT).show(); - } - }); - - // 내가 구현한건 아닌데 필요할까봐 남겨놓음! - mRecyclerViewAdapter.setOnLongItemClickListener(new RecyclerViewAdapter.OnLongItemClickListener() { - @Override - public void onLongItemClick(int pos) { - Toast.makeText(getApplicationContext(), "onLongItemClick position : " + pos, Toast.LENGTH_SHORT).show(); - } - }); - - // 반려동물 추가 버튼 클릭 - Button addButton = (Button) findViewById(R.id.addButton); - addButton.setOnClickListener(new View.OnClickListener(){ - @Override - public void onClick(View view){ - Intent intent = new Intent(getApplicationContext(), AddPetActivity.class); - startActivity(intent); - } - }); - } - - // 리사이클러뷰에 데이터추가 - public void addItem(String imgName, String mainText, String subText){ - RecyclerViewItem item = new RecyclerViewItem(); - item.setImgName(imgName); - item.setMainText(mainText); - item.setSubText(subText); - mList.add(item); - } -} \ No newline at end of file diff --git a/application/app/src/main/java/com/example/myapplication/ui/petSelect/RecyclerViewItem.java b/application/app/src/main/java/com/example/myapplication/ui/petSelect/RecyclerViewItem.java deleted file mode 100644 index 4547d94..0000000 --- a/application/app/src/main/java/com/example/myapplication/ui/petSelect/RecyclerViewItem.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.example.myapplication.ui.petSelect; - -public class RecyclerViewItem { - private String mImgName; - private String mMainText; - private String mSubText; - - public String getImgName() { - return mImgName; - } - - public void setImgName(String imgName) { - this.mImgName = imgName; - } - - public String getMainText() { - return mMainText; - } - - public void setMainText(String mainText) { - this.mMainText = mainText; - } - - public String getSubText() { - return mSubText; - } - - public void setSubText(String subText) { - this.mSubText = subText; - } -} \ No newline at end of file diff --git a/application/app/src/main/java/com/example/myapplication/ui/setting/PetProfileActivity.java b/application/app/src/main/java/com/example/myapplication/ui/setting/PetProfileActivity.java deleted file mode 100644 index ee00bc4..0000000 --- a/application/app/src/main/java/com/example/myapplication/ui/setting/PetProfileActivity.java +++ /dev/null @@ -1,204 +0,0 @@ -package com.example.myapplication.ui.setting; - -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.content.Intent; -import android.os.Bundle; -import android.view.View; -import android.widget.Button; -import android.widget.EditText; -import android.widget.NumberPicker; -import android.widget.TextView; -import android.widget.Toast; - -import com.example.myapplication.R; -import com.example.myapplication.ui.join.RetrofitClient; -import com.example.myapplication.ui.petSelect.PetSelectActivity; - -import retrofit2.Call; -import retrofit2.Callback; -import retrofit2.Response; - -public class PetProfileActivity extends SettingActivity { - private TextView petAge; - private EditText petBreed,petNickName; - private Button btnAge, btnSave, btnDelete; - - private Intent intent; - private ProfileAPI profileAPI = RetrofitClient.getClient().create(ProfileAPI.class); - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.petprofile); - - petNickName = findViewById(R.id.petNickname); - petAge = findViewById(R.id.petAge); - petBreed = findViewById(R.id.petbreed); - btnAge = findViewById(R.id.btnAge); - btnSave = findViewById(R.id.btnSave); - btnDelete = findViewById(R.id.btnDelete); - - //사용자가 초기 설정한 축종에 따라 사진 보여주기 - - //품종 사용자가 작성한 내용, DB 연결해 보여주기 - getNameBreedAge(); - //반려동물 이름, 사용자가 작성한 내용 보여주기 - - - //나이 변경 - btnAge.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - AlertDialog.Builder AgePicker = new AlertDialog.Builder(PetProfileActivity.this); - - AgePicker.setTitle("나이변경"); - final NumberPicker AP = new NumberPicker(PetProfileActivity.this); - AgePicker.setView(AP); - - AP.setMinValue(0); - AP.setMaxValue(30); - AP.setWrapSelectorWheel(false); - AP.setValue(0); - - AP.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { - @Override - public void onValueChange(NumberPicker picker, int oldVal, int newVal) { - } - }); - - AgePicker.setPositiveButton("설정", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int i) { - petAge.setText(String.valueOf(AP.getValue())); - dialog.dismiss(); - } - }); - AgePicker.setNegativeButton("취소", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int i) { - dialog.dismiss(); - } - }); - AgePicker.show(); - } - }); - - //저장 버튼 - btnSave.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - //바뀐 정보 모두 DB로 이동 - updatePetPost(); - } - }); - - //삭제 버튼 - btnDelete.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - AlertDialog.Builder name = new AlertDialog.Builder(PetProfileActivity.this); - name.setTitle("반려동물 삭제"); - name.setMessage("정말로 삭제하시겠습니까?"); - - name.setPositiveButton("삭제", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int i) { - PetProfileDelete(); - } - }); - name.setNegativeButton("취소", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int i) { - dialog.dismiss(); - } - }); - name.show(); - } - }); - } - - //반려동물 정보 변경 - public void updatePetPost(){ - String Name = petNickName.getText().toString().trim(); - String Age = petAge.getText().toString().trim(); - //String Breed = petBreed.getText().toString().trim(); - PetinfoData petinfoData = new PetinfoData(Name, Age, null, 1, 1); - - Call call = profileAPI.updatePetPost(Age, petinfoData); - - call.enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - if (!response.equals(200)) { - Toast.makeText(getApplicationContext(),"변경되었습니다.", Toast.LENGTH_SHORT).show(); - } - } - - @Override - public void onFailure(Call call, Throwable t) { - AlertDialog.Builder builder = new AlertDialog.Builder(PetProfileActivity.this); - builder.setTitle("알림") - .setMessage("잠시 후에 다시 시도해주세요.") - .setPositiveButton("확인", null) - .create() - .show(); - } - }); - } - - //반려동물 정보 삭제 - private void PetProfileDelete() { - Call call = profileAPI.deletePetPost(10); //이게 무슨 의미인지 잘 모르겠음. 그러나 작동은 됨. - call.enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - if (!response.equals(200)) { - Intent intent = new Intent(PetProfileActivity.this, PetSelectActivity.class); - startActivity(intent); - PetProfileActivity.this.finish(); - } - } - @Override - public void onFailure(Call call, Throwable t) { - AlertDialog.Builder builder = new AlertDialog.Builder(PetProfileActivity.this); - builder.setTitle("알림") - .setMessage("잠시 후에 다시 시도해주세요.") - .setPositiveButton("확인", null) - .create() - .show(); - } - }); - } - public void getNameBreedAge(){ - String Name = petNickName.getText().toString().trim(); - String Age = petAge.getText().toString().trim(); - //String Breed = petBreed.getText().toString().trim(); - PetinfoData petinfoData = new PetinfoData(Name, Age, null, 1, 1); - Call call = profileAPI.getNameBreedAge(Name, petinfoData); - - call.enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - if (!response.equals(200)) { - //정보 받아오는 것에서 오류 발생 - /*petNickName.setText(response.body().getPetName()); - petBreed.setText(response.body().getPetBreed()); - petAge.setText(response.body().getPetAge());*/ - Toast.makeText(getApplicationContext(),"설정되었습니다.", Toast.LENGTH_SHORT).show(); - } - } - - @Override - public void onFailure(Call call, Throwable t) { - AlertDialog.Builder builder = new AlertDialog.Builder(PetProfileActivity.this); - builder.setTitle("알림") - .setMessage("잠시 후에 다시 시도해주세요.") - .setPositiveButton("확인", null) - .create() - .show(); - } - }); - } - -} diff --git a/application/app/src/main/java/com/example/myapplication/ui/setting/PetinfoData.java b/application/app/src/main/java/com/example/myapplication/ui/setting/PetinfoData.java deleted file mode 100644 index a186f25..0000000 --- a/application/app/src/main/java/com/example/myapplication/ui/setting/PetinfoData.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.example.myapplication.ui.setting; - -import com.google.gson.annotations.SerializedName; - -public class PetinfoData { - - @SerializedName("petName") - public String petName; - - //품종 - @SerializedName("petBreed") - public String petBreed; - - @SerializedName("petAge") - public String petAge; - - @SerializedName("petGender") - public int petGender; - - @SerializedName("pet중성화") - public int pet중성화; - - public PetinfoData(String petName, String petAge, String petBreed, int petGender, int pet중성화) { - this.petName = petName; - this.petAge = petAge; - this.petBreed = petBreed; - this.petGender = petGender; - this.pet중성화 = pet중성화; - - } -} diff --git a/application/app/src/main/java/com/example/myapplication/ui/setting/ProfileAPI.java b/application/app/src/main/java/com/example/myapplication/ui/setting/ProfileAPI.java deleted file mode 100644 index 3b309d7..0000000 --- a/application/app/src/main/java/com/example/myapplication/ui/setting/ProfileAPI.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.example.myapplication.ui.setting; - -import retrofit2.Call; -import retrofit2.http.Body; -import retrofit2.http.DELETE; -import retrofit2.http.POST; -import retrofit2.http.PUT; -import retrofit2.http.Path; - -public interface ProfileAPI { - //@통신 방식("통신 API명") - - //반려동물 정보 등록 - @POST("/PetSelect") - Call getPetinfo(@Body PetinfoData petinfoData); - - //반려동물 초기 셋팅 - @POST("/PetProfile/{petName}") - Call getNameBreedAge( - @Path("petName") String petName, - @Body PetinfoData petinfoData - ); - - //회원 탈퇴 - @DELETE("/Profile/{memberEmail}") - Call deletePost(@Path("memberEmail")int id); - - //반려동물 정보 수정 - @PUT("/Profile/{petAge}") - Call updatePetPost(@Path("petAge") String petAge, - @Body PetinfoData petinfoData); - - //반려동물 삭제 - @DELETE("/Profile/{petName}") - Call deletePetPost(@Path("petName")int name); -} diff --git a/application/app/src/main/java/com/example/myapplication/ui/setting/ProfileResponse.java b/application/app/src/main/java/com/example/myapplication/ui/setting/ProfileResponse.java deleted file mode 100644 index 91b04d9..0000000 --- a/application/app/src/main/java/com/example/myapplication/ui/setting/ProfileResponse.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.example.myapplication.ui.setting; - -import com.google.gson.annotations.SerializedName; - -public class ProfileResponse { - @SerializedName("statusCode") - private int code; - - @SerializedName("responseMessage") - private String message; - - @SerializedName("data") - private String data; - - //반려동물 기본 정보 - @SerializedName("petName") - private String petName; - @SerializedName("petBreed") - private String petBreed; - @SerializedName("petAge") - private String petAge; - - public String getPetName() { - return petName; - } - public String getPetBreed() { - return petBreed; - } - public String getPetAge() { - return petAge; - } - - public int getCode() { - return code; - } - - public String getMessage() { - return message; - } - - public String getData() { - return data; - } -} diff --git a/application/app/src/main/java/com/example/myapplication/ui/setting/UserinfoData.java b/application/app/src/main/java/com/example/myapplication/ui/setting/UserinfoData.java deleted file mode 100644 index 520eb9d..0000000 --- a/application/app/src/main/java/com/example/myapplication/ui/setting/UserinfoData.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.example.myapplication.ui.setting; - -import com.google.gson.annotations.SerializedName; - -//프로필 이메일, pw 정보 요청 -//반려동물 이름, 품종, 나이, 성별, 중성화여부 정보 요청 -public class UserinfoData { - @SerializedName("memberEmail") - public String userEmail; - - @SerializedName("memberPassword") - public String userPwd; - - public UserinfoData(String userEmail, String userPwd) { - this.userEmail = userEmail; - this.userPwd = userPwd; - - } -} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/diagnosis/DiagListResponse.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/diagnosis/DiagListResponse.java new file mode 100644 index 0000000..731f2e6 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/diagnosis/DiagListResponse.java @@ -0,0 +1,43 @@ +package com.mnchatbot.myapplication.ui.diagnosis; +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class DiagListResponse { + @SerializedName("statusCode") + private int code; + + @SerializedName("responseMessage") + private String message; + + @SerializedName("data") + public List data; + + public int getCode() { + return code; + } + + public String getMessage() { + return message; + } + + public class DiagList { + @SerializedName("diagSerial") + private int dsSerial; + @SerializedName("diagDsName") + private String dsName; + @SerializedName("diagDate") + private String dsDate; + + public int getDsSerial() { + return dsSerial; + } + public String getDsName() { + return dsName; + } + public String getDsDate() { + return dsDate; + } + } + +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/diagnosis/DiagResponse.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/diagnosis/DiagResponse.java new file mode 100644 index 0000000..04fc9f4 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/diagnosis/DiagResponse.java @@ -0,0 +1,54 @@ +package com.mnchatbot.myapplication.ui.diagnosis; + +import com.google.gson.annotations.SerializedName; + +public class DiagResponse { + @SerializedName("statusCode") + private int code; + + @SerializedName("responseMessage") + private String message; + + @SerializedName("data") + public DiagData data; + + public String getMessage() { + return message; + } + + public class DiagData { + @SerializedName("date") + private String diagDate; + @SerializedName("time") + private String diagTime; + @SerializedName("diseaseName") + private String dsName; + @SerializedName("breed") + private String dsBreed; + @SerializedName("definition") + private String dsDefinition; + @SerializedName("cause") + private String dsCause; + @SerializedName("advice") + private String dsAdvice; + + public String getdiagDate() { + return diagDate; + } + public String getdiagTime() { + return diagTime; + } + public String getdsName() { + return dsName; + } + public String getdsBreed() { + return dsBreed; + } + public String getdsDefinition() { + return dsDefinition; + } + public String getdsCause() { return dsCause;} + public String getdsAdvice() { return dsAdvice;} + + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/diagnosis/DiagnosisAdapter.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/diagnosis/DiagnosisAdapter.java new file mode 100644 index 0000000..96c63f4 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/diagnosis/DiagnosisAdapter.java @@ -0,0 +1,132 @@ +package com.mnchatbot.myapplication.ui.diagnosis; + +import android.content.Context; +import android.content.SharedPreferences; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.mnchatbot.myapplication.R; + +import java.util.ArrayList; + +public class DiagnosisAdapter extends RecyclerView.Adapter { + + private SharedPreferences preferences; + private Context context; + + public class ViewHolder extends RecyclerView.ViewHolder { + TextView diseaseName, diseaseDate; + + public ViewHolder(@NonNull View itemView) { + super(itemView); + + diseaseName = itemView.findViewById(R.id.diseaseName); + diseaseDate = itemView.findViewById(R.id.diseaseDate); + + itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int position = getAdapterPosition(); + if (position != RecyclerView.NO_POSITION) { + if (onItemClickListener != null) { + onItemClickListener.onItemClick(position); + + DiagnosisViewItem item = mList.get(position); + int diagSerial = item.getdiagSerial(); + Log.d("짧게 누름", String.valueOf(diagSerial)); + + preferences = context.getSharedPreferences("Serial", Context.MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt("diagSerial", diagSerial); + editor.commit(); + } + } + } + }); + + + itemView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + int position = getAdapterPosition(); + if (position != RecyclerView.NO_POSITION) { + if (onLongItemClickListener != null) { + onLongItemClickListener.onLongItemClick(position); + + DiagnosisViewItem item = mList.get(position); + int diagSerial = item.getdiagSerial(); + Log.d("길게 누름", String.valueOf(diagSerial)); + + preferences = context.getSharedPreferences("Serial", Context.MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt("diagSerial", diagSerial); + editor.commit(); + } + } + return false; + } + }); + } +} + + //ArrayList + private ArrayList mList = null; + + public DiagnosisAdapter(ArrayList mList, Context context) { + this.mList = mList; this.context = context; + } + + // 아이템 뷰를 위한 뷰홀더 객체를 생성하여 리턴 + @NonNull + @Override + public DiagnosisAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.f_diagnosis_item, parent, false); + DiagnosisAdapter.ViewHolder viewHolder = new DiagnosisAdapter.ViewHolder(view); + + return viewHolder; + } + + // position에 해당하는 데이터를 뷰홀더의 아이템뷰에 표시 + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + DiagnosisViewItem item = mList.get(position); + + holder.diseaseName.setText(item.getDiseaseName()); + holder.diseaseDate.setText(item.getDiseaseDate()); + } + + @Override + public int getItemCount() { + return mList.size(); + } + + // 리사이클러 뷰 클릭 이벤트를 위한 코드 + public interface OnItemClickListener { + void onItemClick(int pos); + } + + private DiagnosisAdapter.OnItemClickListener onItemClickListener = null; + + public void setOnItemClickListener(DiagnosisAdapter.OnItemClickListener listener) { + this.onItemClickListener = listener; + } + + + public interface OnLongItemClickListener { + void onLongItemClick(int pos); + } + + private DiagnosisAdapter.OnLongItemClickListener onLongItemClickListener = null; + + public void setOnLongItemClickListener(DiagnosisAdapter.OnLongItemClickListener listener) { + this.onLongItemClickListener = listener; + } + +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/diagnosis/DiagnosisViewItem.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/diagnosis/DiagnosisViewItem.java new file mode 100644 index 0000000..883385b --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/diagnosis/DiagnosisViewItem.java @@ -0,0 +1,30 @@ +package com.mnchatbot.myapplication.ui.diagnosis; + +public class DiagnosisViewItem { + private int diagSerial; + private String DiseaseName; + private String DiseaseDate; + + public int getdiagSerial() { + return diagSerial; + } + public void setdiagSerial(int dSerial) { + this.diagSerial = dSerial; + } + + public String getDiseaseName() { + return DiseaseName; + } + + public void setDiseaseName(String Name) { + this.DiseaseName = Name; + } + + public String getDiseaseDate() { + return DiseaseDate; + } + + public void setDiseaseDate(String Time) { + this.DiseaseDate = Time; + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/diagnosis/Fragment_diagnosis.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/diagnosis/Fragment_diagnosis.java new file mode 100644 index 0000000..6a3d0d8 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/diagnosis/Fragment_diagnosis.java @@ -0,0 +1,192 @@ +/* +[예상진단 목록 화면] 등록된 예상진단 목록을 보여줌.*/ + +package com.mnchatbot.myapplication.ui.diagnosis; +import static android.content.Context.MODE_PRIVATE; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.SharedPreferences; +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; +import com.mnchatbot.myapplication.ui.mainPage.MainActivity; + +import java.util.ArrayList; +import java.util.List; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class Fragment_diagnosis extends Fragment { + + MainActivity mainActivity; + + private RecyclerView mRecyclerView; + private ArrayList mList; + private DiagnosisAdapter mAdapter; + + List DiagList; + + private SharedPreferences pre, pre2; + + @Override + public void onAttach(Context context) { + super.onAttach(context); + mainActivity = (MainActivity)getActivity(); + } + + @Override + public void onDetach() { + super.onDetach(); + mainActivity = null; + } + //서버통신 + public String getToken() { + pre = getActivity().getSharedPreferences("TOKEN", MODE_PRIVATE); + String token = pre.getString("TOKEN", null); + return token; + } + public int getpetSerial() { + pre2 = getActivity().getSharedPreferences("Serial", MODE_PRIVATE); + int petSerial = pre2.getInt("petSerial", 0); + return petSerial; + } + public int getdiagSerial() { + pre2 = getActivity().getSharedPreferences("Serial", MODE_PRIVATE); + int diagSerial = pre2.getInt("diagSerial", 0); + return diagSerial; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + ViewGroup rootview = (ViewGroup)inflater.inflate(R.layout.f_diagnosis,container,false); + mRecyclerView = rootview.findViewById(R.id.recyclerView); + mList = new ArrayList<>(); + + mAdapter = new DiagnosisAdapter(mList, getActivity()); + mRecyclerView.setAdapter(mAdapter); + + setDiagList(); + + mAdapter.setOnItemClickListener(new DiagnosisAdapter.OnItemClickListener() { + @Override + public void onItemClick(int pos) { + mainActivity.onChangeFragment(6); + } + }); + mAdapter.setOnLongItemClickListener(new DiagnosisAdapter.OnLongItemClickListener() { + @Override + public void onLongItemClick(int pos) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("예상진단 삭제") + .setMessage("정말로 삭제하시겠습니까?") + .setPositiveButton("아니오", null) + .setNegativeButton("예", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + DeleteDiag(pos); + } + }) + .create() + .show(); + } + }); + + //최신 등록순으로 정렬 + LinearLayoutManager manger = new LinearLayoutManager(getActivity()); + manger.setReverseLayout(true); + manger.setStackFromEnd(true); + mRecyclerView.setLayoutManager(manger); + return rootview; + } + // 리사이클러뷰에 데이터추가 + public void addItem(int DiagSerial, String DiseaseName, String Date){ + DiagnosisViewItem item = new DiagnosisViewItem(); + item.setdiagSerial(DiagSerial); + item.setDiseaseName(DiseaseName); + item.setDiseaseDate(Date); + mList.add(item); + } + + //예상진단 로드 + public void setDiagList() { + DiagList = new ArrayList<>(); + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + + service.getDiagList(getpetSerial()).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(response.isSuccessful()) { + DiagList = response.body().data; + if(DiagList == null) { + Log.d("예상진단", "리스트 비어있음"); + } else { + Log.d("예상진단", "성공"); + for(int i=0; i< DiagList.size(); i++) { + int dSerial = DiagList.get(i).getDsSerial(); + String Name = DiagList.get(i).getDsName(); + String Date = DiagList.get(i).getDsDate(); + addItem(dSerial, Name, Date); + mAdapter.notifyDataSetChanged(); + } + } + } else {Log.d("response 실패", "404");} + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + } + + //예상진단 삭제 + public void DeleteDiag(int pos) { + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + + service.deleteDiag(getdiagSerial()).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + DiagnosisViewItem item = mList.get(pos); + mList.remove(item); + mAdapter.notifyDataSetChanged(); + } else {Log.d("response 실패", "404");} + } + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + } + +} \ No newline at end of file diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/diagnosis/Fragment_diagnosis_detail.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/diagnosis/Fragment_diagnosis_detail.java new file mode 100644 index 0000000..15968e9 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/diagnosis/Fragment_diagnosis_detail.java @@ -0,0 +1,148 @@ +/* +[예상진단 세부화면] 챗봇상담 후 저장한 내용 보여줌. +상담 일자(날짜, 시간), 질병명, 축종, 정의, 원인, 보호자에 대한 조언 보여줌. */ + +package com.mnchatbot.myapplication.ui.diagnosis; + +import static android.content.Context.MODE_PRIVATE; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.text.Layout; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; +import com.mnchatbot.myapplication.ui.mainPage.MainActivity; + +import java.sql.Array; +import java.util.ArrayList; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class Fragment_diagnosis_detail extends Fragment { + + MainActivity mainActivity; + + private SharedPreferences pre, pre2; + private TextView dia_Date, dia_Time, dia_Name, dia_Breed, dia_definition, dia_cause, dia_advice, more, more1, more2; + + private DiagResponse.DiagData DiagData; + @Override + public void onAttach(Context context) { + super.onAttach(context); + mainActivity = (MainActivity) getActivity(); + } + + @Override + public void onDetach() { + super.onDetach(); + mainActivity = null; + } + //서버통신 + public String getToken() { + pre = getActivity().getSharedPreferences("TOKEN", MODE_PRIVATE); + String token = pre.getString("TOKEN", null); + return token; + } + public int getdiagSerial() { + pre2 = getActivity().getSharedPreferences("Serial", MODE_PRIVATE); + int diagSerial = pre2.getInt("diagSerial", 0); + return diagSerial; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + ViewGroup rootview = (ViewGroup)inflater.inflate(R.layout.f_diagnosis_detail,container,false); + + dia_Date = rootview.findViewById(R.id.dia_Date); + dia_Time = rootview.findViewById(R.id.dia_time); + dia_Name = rootview.findViewById(R.id.dia_Name); + dia_Breed = rootview.findViewById(R.id.dia_Breed); + dia_definition = rootview.findViewById(R.id.dia_definition); + dia_cause = rootview.findViewById(R.id.dia_cause); + dia_advice = rootview.findViewById(R.id.dia_advice); + more = rootview.findViewById(R.id.more); + more1 = rootview.findViewById(R.id.more1); + more2 = rootview.findViewById(R.id.more2); + + call_Diagnosis(); + return rootview; + } + + public static boolean isEllipsize(TextView textView, TextView moreTextView){ + boolean result = false; + Layout layout = textView.getLayout(); + if(layout != null) { + int lines = layout.getLineCount(); + if(lines > 0) { + int ellipsisCount = layout.getEllipsisCount(lines-1); + if ( ellipsisCount > 0) { + moreTextView.setVisibility(View.VISIBLE); + moreTextView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + textView.setMaxLines(1000); + moreTextView.setVisibility(View.GONE); + } + }); + }else{ + result = false; + } + } + } return result; + } + + public void call_Diagnosis() { + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + service.getDiag(getdiagSerial()).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(response.isSuccessful()) { + Log.d("예상진단", response.message()); + DiagData = response.body().data; + if (DiagData == null) { + Log.d("예상진단 세부목록", "비어있음"); + } else { + dia_Date.setText(DiagData.getdiagDate()); + dia_Time.setText(DiagData.getdiagTime()); + dia_Name.setText(DiagData.getdsName()); + dia_Breed.setText(DiagData.getdsBreed()); + dia_definition.setText(DiagData.getdsDefinition()); + isEllipsize(dia_definition, more); + dia_cause.setText(DiagData.getdsCause()); + isEllipsize(dia_cause, more1); + dia_advice.setText(DiagData.getdsAdvice()); + isEllipsize(dia_advice, more2); + } + } else {Log.d("response 실패", "404");} + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/DictionaryAdapter.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/DictionaryAdapter.java new file mode 100644 index 0000000..89c2162 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/DictionaryAdapter.java @@ -0,0 +1,124 @@ +package com.mnchatbot.myapplication.ui.dictionary; + +import android.content.Context; +import android.content.SharedPreferences; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ProgressBar; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.mnchatbot.myapplication.R; + +import java.util.ArrayList; + +public class DictionaryAdapter extends RecyclerView.Adapter { + + private SharedPreferences preferences; + private Context context; + private ArrayList mList; + + private final int VIEW_TYPE_ITEM = 0; + private final int VIEW_TYPE_LOADING = 1; + + public DictionaryAdapter(ArrayList mList, Context context) { + this.mList = mList; this.context = context; + } + + public class ViewHolder extends RecyclerView.ViewHolder { + TextView diseaseName; + ProgressBar progressBar; + + public ViewHolder(@NonNull View itemView) { + super(itemView); + + diseaseName = itemView.findViewById(R.id.diseaseName); + progressBar = itemView.findViewById(R.id.progressBar); + + itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int position = getAdapterPosition(); + if (position != RecyclerView.NO_POSITION) { + if (onItemClickListener != null) { + onItemClickListener.onItemClick(position); + DictionaryViewItem item = mList.get(position); + String dsId = item.getDiseaseId(); + Log.d("dsId", item.getDiseaseId()); + + preferences = context.getSharedPreferences("dsId", Context.MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + editor.putString("dsId", dsId); + editor.commit(); + } + } + } + }); + } + } + + + // 아이템 뷰를 위한 뷰홀더 객체를 생성하여 리턴 + @NonNull + @Override + public DictionaryAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + context = parent.getContext(); + LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + + if (viewType == VIEW_TYPE_ITEM) { + View view = inflater.inflate(R.layout.f_dictionary_item, parent, false); + DictionaryAdapter.ViewHolder viewHolder = new DictionaryAdapter.ViewHolder(view); + return viewHolder; + } else { + View view = inflater.inflate(R.layout.loading_row, parent, false); + DictionaryAdapter.ViewHolder viewHolder = new DictionaryAdapter.ViewHolder(view); + return viewHolder; + } + + } + + // position에 해당하는 데이터를 뷰홀더의 아이템뷰에 표시 + @Override + public void onBindViewHolder(@NonNull DictionaryAdapter.ViewHolder holder, int position) { + DictionaryViewItem item = mList.get(position); + + switch (getItemViewType(position)) { + case VIEW_TYPE_ITEM: + ViewHolder viewHolder = holder; + holder.diseaseName.setText(item.getDiseaseName()); + break; + case VIEW_TYPE_LOADING: + LoadingViewHolder loadingViewHolder = (LoadingViewHolder) holder; + holder.progressBar.drawableHotspotChanged(50, 50); + break; + } + } + private class LoadingViewHolder extends ViewHolder { + ProgressBar mProgressBar; + + public LoadingViewHolder(@NonNull View itemView) { + super(itemView); + mProgressBar = itemView.findViewById(R.id.progressBar); + } + } + + @Override + public int getItemCount() { + return mList.size(); + } + +// 리사이클러 뷰 클릭 이벤트를 위한 코드 + public interface OnItemClickListener { + void onItemClick(int pos); + } + private DictionaryAdapter.OnItemClickListener onItemClickListener = null; + + public void setOnItemClickListener(DictionaryAdapter.OnItemClickListener listener) { + this.onItemClickListener = listener; + } + +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/DictionaryViewItem.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/DictionaryViewItem.java new file mode 100644 index 0000000..870ad31 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/DictionaryViewItem.java @@ -0,0 +1,20 @@ +package com.mnchatbot.myapplication.ui.dictionary; + +public class DictionaryViewItem { + private String DiseaseName; + private String DiseaseId; + + public String getDiseaseName() { + return DiseaseName; + } + public void setDiseaseName(String Name) { + this.DiseaseName = Name; + } + + public String getDiseaseId() { + return DiseaseId; + } + public void setDiseaseId(String dsId) { + this.DiseaseId = dsId; + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/DsListResponse.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/DsListResponse.java new file mode 100644 index 0000000..2a86f91 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/DsListResponse.java @@ -0,0 +1,44 @@ +package com.mnchatbot.myapplication.ui.dictionary; +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class DsListResponse { + @SerializedName("statusCode") + private int code; + + @SerializedName("responseMessage") + private String message; + + @SerializedName("data") + public List data; + + public int getCode() { + return code; + } + + public String getMessage() { + return message; + } + + @Override + public String toString() { + return "DsSearchResponse{" + "data=" + data+ "}"; + } + + public class DsDataList { + //검색결과 + @SerializedName("diseaseId") + private String dsId; + @SerializedName("diseaseName") + private String dsName; + + public String getdiseaseId() { + return dsId; + } + public String getdiseaseName() { + return dsName; + } + } + +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/DsPageResponse.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/DsPageResponse.java new file mode 100644 index 0000000..9284d7b --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/DsPageResponse.java @@ -0,0 +1,56 @@ +package com.mnchatbot.myapplication.ui.dictionary; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class DsPageResponse { + + @SerializedName("statusCode") + private int code; + + @SerializedName("responseMessage") + private String message; + + @SerializedName("data") + public DsPageList data; + + public int getCode() { + return code; + } + public String getMessage() { + return message; + } + + public class DsPageList { + //총 페이지 수, 다음 페이지 여부 + @SerializedName("totalDiseaseCnt") + private int totalCnt; + @SerializedName("hasNextPage") + private boolean nextPage; + + @SerializedName("diseaseList") + public List dsPageList; + + public int gettotalCnt() { + return totalCnt; + } + public boolean getnextPage() { + return nextPage; + } + } + + public class DsPageListItem { + @SerializedName("diseaseId") + private String dsId; + @SerializedName("diseaseName") + private String dsName; + + public String getdiseaseId() { + return dsId; + } + public String getdiseaseName() { + return dsName; + } + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/DsResponse.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/DsResponse.java new file mode 100644 index 0000000..b6cb6ad --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/DsResponse.java @@ -0,0 +1,72 @@ +package com.mnchatbot.myapplication.ui.dictionary; + +import com.google.gson.annotations.SerializedName; + +public class DsResponse { + @SerializedName("statusCode") + private int code; + + @SerializedName("responseMessage") + private String message; + + @SerializedName("data") + public DsData data; + + public String getMessage() { + return message; + } + + public class DsData { + //검색 결과 내용 + @SerializedName("dsName") + private String dsName; + @SerializedName("dsAmlBreed") + private String dsBreed; + @SerializedName("dsDefinition") + private String dsDefinition; + @SerializedName("dsCause") + private String dsCause; + @SerializedName("dsPathogenesis") + private String dsPathogenesis; + @SerializedName("dsEpidemiology") + private String dsEpidemiology; + @SerializedName("dsSymptom") + private String dsSymptom; + @SerializedName("dsDiagnosis") + private String dsDiagnosis; + @SerializedName("dsTreatment") + private String dsTreatment; + @SerializedName("dsPrevention") + private String dsPrevention; + @SerializedName("dsPrognosis") + private String dsPrognosis; + @SerializedName("dsAdvice") + private String dsAdvice; + + public String getdsName() { + return dsName; + } + public String getdsAmlBreed() { + return dsBreed; + } + public String getdsDefinition() { + return dsDefinition; + } + public String getdsCause() { return dsCause;} + public String getdsPathogenesis() { return dsPathogenesis;} + public String getdsEpidemiology() { + return dsEpidemiology; + } + public String getdsSymptom() { + return dsSymptom; + } + public String getdsDiagnosis() { + return dsDiagnosis; + } + public String getdsTreatment() { return dsTreatment;} + public String getdsPrevention() { return dsPrevention;} + public String getdsPrognosis() { return dsPrognosis;} + public String getdsAdvice() { return dsAdvice;} + + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/Fragment_Dictionary.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/Fragment_Dictionary.java new file mode 100644 index 0000000..1f332e0 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/Fragment_Dictionary.java @@ -0,0 +1,224 @@ +/* +[질병백과 목록 화면] 등록된 질병명 목록을 10개 먼저 보여줌.*/ + +package com.mnchatbot.myapplication.ui.dictionary; + +import static android.content.Context.MODE_PRIVATE; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; +import com.mnchatbot.myapplication.ui.mainPage.MainActivity; + +import java.util.ArrayList; +import java.util.List; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class Fragment_Dictionary extends Fragment { + + MainActivity mainActivity; + + private RecyclerView mRecyclerView; + private ArrayList mList; + private DictionaryAdapter mAdapter; + private EditText editText; + private Button btnDictionary; + private Context context; + + DsPageResponse.DsPageList dsPageList; + List dsPageItems; + List DsSearchdata; + + private SharedPreferences preferences; + + private long totalCnt = 0; + private boolean hasNext = false; + private int page = 0; + private int itemCnt = 10; + + @Override + public void onAttach(Context context) { + super.onAttach(context); + mainActivity = (MainActivity)getActivity(); + } + + @Override + public void onDetach() { + super.onDetach(); + mainActivity = null; + } + //서버통신 + public String getToken() { + preferences = getActivity().getSharedPreferences("TOKEN", MODE_PRIVATE); + String token = preferences.getString("TOKEN", null); + return token; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + ViewGroup rootview = (ViewGroup)inflater.inflate(R.layout.f_dictionary,container,false); + mRecyclerView = rootview.findViewById(R.id.recyclerView); + editText = rootview.findViewById(R.id.editText); + btnDictionary = rootview.findViewById(R.id.btnDictionary); + + mList = new ArrayList<>(); + // 리사이클러뷰에 데이터추가 (함수가 밑에 구현되어있음) + + loadDsinfo(); + ScrollListener(); + mAdapter = new DictionaryAdapter(mList, context); + mRecyclerView.setAdapter(mAdapter); + + + mAdapter.setOnItemClickListener(new DictionaryAdapter.OnItemClickListener() { + @Override + public void onItemClick(int pos) { + mainActivity.onChangeFragment(8); + } + }); + + btnDictionary.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + mList.clear(); + getDsinfo(); + } + }); + //정렬 + LinearLayoutManager manger = new LinearLayoutManager(getActivity()); + manger.setStackFromEnd(true); + mRecyclerView.setLayoutManager(manger); + return rootview; + } + + // 리사이클러뷰에 데이터추가 + public void addItem(String DiseaseName, String DiseaseId){ + DictionaryViewItem item = new DictionaryViewItem(); + item.setDiseaseName(DiseaseName); + item.setDiseaseId(DiseaseId); + mList.add(item); + } + //로드 화면 + public void loadDsinfo() { + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + + int item = itemCnt; + service.callDsinfo(getPage(),item).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(response.isSuccessful()) { + dsPageList = response.body().data; + totalCnt = dsPageList.gettotalCnt(); + hasNext = dsPageList.getnextPage(); + Log.d("dsPage", String.valueOf(hasNext)); + + if(hasNext != false) { + dsPageItems = dsPageList.dsPageList; + for(int i=0; i< dsPageItems.size(); i++) { + String Name = dsPageItems.get(i).getdiseaseName(); + String ID = dsPageItems.get(i).getdiseaseId(); + addItem(Name, ID); + mAdapter.notifyDataSetChanged(); + } + } + } + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + } + public void ScrollListener() { + mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + super.onScrolled(recyclerView, dx, dy); + if (hasNextPage()) { + int lastVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition(); + int itemTotalCount = recyclerView.getAdapter().getItemCount() - 1; + if (lastVisibleItemPosition == itemTotalCount) { + loadDsinfo(); + setNextPage(false); + } + } + + } + }); + } + public void getDsinfo(){ + DsSearchdata = new ArrayList<>(); + String dsName = editText.getText().toString(); + + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + service.getDsinfo(dsName).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + DsSearchdata = response.body().data; + if (DsSearchdata == null) { + Toast.makeText(getActivity(), "정보를 찾을 수 없습니다.", Toast.LENGTH_SHORT).show(); + } else { + for(int i=0; i< DsSearchdata.size(); i++) { + String Name = DsSearchdata.get(i).getdiseaseName(); + String ID = DsSearchdata.get(i).getdiseaseId(); + addItem(Name, ID); + mAdapter.notifyDataSetChanged(); + setNextPage(false); + }} + + } else {Log.d("response 실패", "404");} + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + } + + private int getPage() { + page++; + return page; + } + private Boolean hasNextPage() { + return hasNext; + } + private void setNextPage(Boolean b) { + hasNext = b; + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/Fragment_Dictionary_detail.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/Fragment_Dictionary_detail.java new file mode 100644 index 0000000..d2d4379 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/dictionary/Fragment_Dictionary_detail.java @@ -0,0 +1,164 @@ +/* +[질병백과 세부화면] 등록된 질병에 대한 정보를 보여줌.*/ + +package com.mnchatbot.myapplication.ui.dictionary; + +import static android.content.Context.MODE_PRIVATE; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.text.Layout; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; +import com.mnchatbot.myapplication.ui.mainPage.MainActivity; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class Fragment_Dictionary_detail extends Fragment { + + MainActivity mainActivity; + private SharedPreferences pre, pre2; + private TextView ds_Name, ds_Species, ds_definition, ds_cause, ds_pathogenesis, + ds_epidemiology, ds_symptom, ds_diagnosis, ds_treatment, ds_prevention, + ds_prognosis, ds_advice, more, more1, more2, more3, more4, more5, more6, more7, more8, more9; + + DsResponse.DsData Dsdata; + + @Override + public void onAttach(Context context) { + super.onAttach(context); + mainActivity = (MainActivity) getActivity(); + } + + @Override + public void onDetach() { + super.onDetach(); + mainActivity = null; + } + //서버통신 + public String getToken() { + pre = getActivity().getSharedPreferences("TOKEN", MODE_PRIVATE); + String token = pre.getString("TOKEN", null); + return token; + } + public String getdsId() { + pre2 = getActivity().getSharedPreferences("dsId", MODE_PRIVATE); + String diseaseId = pre2.getString("dsId", null); + return diseaseId; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + ViewGroup rootview = (ViewGroup)inflater.inflate(R.layout.f_dictionary_detail,container,false); + ds_Name = rootview.findViewById(R.id.ds_Name); + ds_Species = rootview.findViewById(R.id.ds_Species); + ds_definition = rootview.findViewById(R.id.ds_definition); + ds_cause = rootview.findViewById(R.id.ds_cause); + ds_pathogenesis = rootview.findViewById(R.id.ds_pathogenesis); + ds_epidemiology = rootview.findViewById(R.id.ds_epidemiology); + ds_symptom = rootview.findViewById(R.id.ds_symptom); + ds_diagnosis = rootview.findViewById(R.id.ds_diagnosis); + ds_treatment = rootview.findViewById(R.id.ds_treatment); + ds_prevention = rootview.findViewById(R.id.ds_prevention); + ds_prognosis = rootview.findViewById(R.id.ds_prognosis); + ds_advice = rootview.findViewById(R.id.ds_advice); + more = rootview.findViewById(R.id.more); + more1 = rootview.findViewById(R.id.more1); + more2 = rootview.findViewById(R.id.more2); + more3 = rootview.findViewById(R.id.more3); + more4 = rootview.findViewById(R.id.more4); + more5 = rootview.findViewById(R.id.more5); + more6 = rootview.findViewById(R.id.more6); + more7 = rootview.findViewById(R.id.more7); + more8 = rootview.findViewById(R.id.more8); + more9 = rootview.findViewById(R.id.more9); + + callDsSearchinfo(); + return rootview; + } + //더보기 + public static boolean isEllipsize(TextView textView, TextView moreTextView){ + boolean result = false; + Layout layout = textView.getLayout(); + if(layout != null) { + int lines = layout.getLineCount(); + if(lines > 0) { + int ellipsisCount = layout.getEllipsisCount(lines-1); + if ( ellipsisCount > 0) { + moreTextView.setVisibility(View.VISIBLE); + moreTextView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + textView.setMaxLines(1000); + moreTextView.setVisibility(View.GONE); + } + }); + }else{ + result = false; + } + } + } return result; + } + + public void callDsSearchinfo() { + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + + service.getDsSearchinfo(getdsId()).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + Dsdata = response.body().data; + ds_Name.setText(Dsdata.getdsName()); + ds_Species.setText(Dsdata.getdsAmlBreed()); + ds_definition.setText(Dsdata.getdsDefinition()); + isEllipsize(ds_definition, more); + ds_cause.setText(Dsdata.getdsCause()); + isEllipsize(ds_cause, more1); + ds_pathogenesis.setText(Dsdata.getdsPathogenesis()); + isEllipsize(ds_pathogenesis, more2); + ds_epidemiology.setText(Dsdata.getdsEpidemiology()); + isEllipsize(ds_epidemiology, more3); + ds_symptom.setText(Dsdata.getdsSymptom()); + isEllipsize(ds_symptom, more4); + ds_diagnosis.setText(Dsdata.getdsDiagnosis()); + isEllipsize(ds_diagnosis, more5); + ds_treatment.setText(Dsdata.getdsTreatment()); + isEllipsize(ds_treatment, more6); + ds_prevention.setText(Dsdata.getdsPrevention()); + isEllipsize(ds_prevention, more7); + ds_prognosis.setText(Dsdata.getdsPrognosis()); + isEllipsize(ds_prognosis, more8); + ds_advice.setText(Dsdata.getdsAdvice()); + isEllipsize(ds_advice, more9); + } else { Log.d("response 실패", "404");} + } + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + + } +} \ No newline at end of file diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/history/HistoryActivity.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/history/HistoryActivity.java new file mode 100644 index 0000000..58f325d --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/history/HistoryActivity.java @@ -0,0 +1,170 @@ +/* +[상담신청 내역 화면] 신청한 상담 목록을 보여줌.*/ + +package com.mnchatbot.myapplication.ui.history; + +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.util.Log; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; + +import java.util.ArrayList; +import java.util.List; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class HistoryActivity extends AppCompatActivity { + + private RecyclerView mRecyclerView; + private ArrayList mList; + private HistoryAdapter mAdapter; + + List HistoryList; + private SharedPreferences pre, pre2; + + //서버통신 + public String getToken() { + pre = getSharedPreferences("TOKEN", MODE_PRIVATE); + String token = pre.getString("TOKEN", null); + return token; + } + public int getpetSerial() { + pre2 = getSharedPreferences("Serial", MODE_PRIVATE); + int petSerial = pre2.getInt("petSerial", 0); + return petSerial; + } + public int getapptSerial() { + pre2 = getSharedPreferences("Serial", MODE_PRIVATE); + int apptSerial = pre2.getInt("apptSerial", 0); + return apptSerial; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.a_history); + + mRecyclerView = findViewById(R.id.recyclerView); + mList = new ArrayList<>(); + + mAdapter = new HistoryAdapter(mList, HistoryActivity.this); + mRecyclerView.setAdapter(mAdapter); + + mAdapter.setOnItemClickListener(new HistoryAdapter.OnItemClickListener() { + @Override + public void onItemClick(int pos) { + Intent intent = new Intent(getApplicationContext(), HistoryDetail.class); + startActivity(intent); + } + }); + mAdapter.setOnLongItemClickListener(new HistoryAdapter.OnLongItemClickListener() { + @Override + public void onLongItemClick(int pos) { + AlertDialog.Builder builder = new AlertDialog.Builder(HistoryActivity.this); + builder.setTitle("상담신청 내역 삭제") + .setMessage("정말로 삭제하시겠습니까?") + .setPositiveButton("아니오", null) + .setNegativeButton("예", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + deleteHistoryList(pos); + } + }) + .create() + .show(); + } + }); + setHistoryList(); + + //최신 등록순으로 정렬 + LinearLayoutManager manger = new LinearLayoutManager(HistoryActivity.this); + manger.setReverseLayout(true); + manger.setStackFromEnd(true); + mRecyclerView.setLayoutManager(manger); + return; + } + + // 리사이클러뷰에 데이터추가 + public void addItem(int apptSerial,String HospitalName, String Date) { + HistoryViewItem item = new HistoryViewItem(); + item.setapptSerial(apptSerial); + item.setHospitalName(HospitalName); + item.setHospitalDate(Date); + mList.add(item); + } + + //상담내역 로드 + public void setHistoryList() { + HistoryList = new ArrayList<>(); + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + + service.getHistoryList(getpetSerial()).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(response.isSuccessful()) { + HistoryList = response.body().data; + if(HistoryList == null) { + Log.d("비어있음", "성공"); + } else { + Log.d("자료있음", String.valueOf(HistoryList.size())); + for(int i=0; i< HistoryList.size(); i++) { + Log.d("비어있음", HistoryList.toString()); + int aSerial = HistoryList.get(i).getapptSerial(); + String Name = HistoryList.get(i).getpartnerName(); + String Date = HistoryList.get(i).getHistoryDate(); + addItem(aSerial, Name, Date); + mAdapter.notifyDataSetChanged(); + } + } + } else {Log.d("response 실패", "404");} + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(HistoryActivity.this); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + } + + //상담내역 삭제 + public void deleteHistoryList(int pos) { + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + + service.deleteHistory(getapptSerial()).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + HistoryViewItem item = mList.get(pos); + mList.remove(item); + mAdapter.notifyDataSetChanged(); + } else {Log.d("response 실패", "404");} + } + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(HistoryActivity.this); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/history/HistoryAdapter.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/history/HistoryAdapter.java new file mode 100644 index 0000000..8fc0e22 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/history/HistoryAdapter.java @@ -0,0 +1,119 @@ +package com.mnchatbot.myapplication.ui.history; + +import android.content.Context; +import android.content.SharedPreferences; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.mnchatbot.myapplication.R; + +import java.util.ArrayList; + + +public class HistoryAdapter extends RecyclerView.Adapter{ + private SharedPreferences preferences; + private Context context; + private ArrayList mList; + + public class ViewHolder extends RecyclerView.ViewHolder { + TextView HospitalName, HospitalDate; + + public ViewHolder(@NonNull View itemView) { + super(itemView); + + HospitalName = itemView.findViewById(R.id.HospitalName); + HospitalDate = itemView.findViewById(R.id.HospitalDate); + + itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int position = getAdapterPosition(); + if (position != RecyclerView.NO_POSITION) { + if (onItemClickListener != null) { + onItemClickListener.onItemClick(position); + HistoryViewItem item = mList.get(position); + int apptSerial = item.getapptSerial(); + + preferences = context.getSharedPreferences("Serial", Context.MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt("apptSerial", apptSerial); + editor.commit(); + } + } + } + }); + + + itemView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + int position = getAdapterPosition(); + if (position != RecyclerView.NO_POSITION) { + if (onLongItemClickListener != null) { + onLongItemClickListener.onLongItemClick(position); + return true; + } + } + return false; + } + }); + } + } + + public HistoryAdapter(ArrayList mList, Context context) { + this.mList = mList; this.context = context; + } + + // 아이템 뷰를 위한 뷰홀더 객체를 생성하여 리턴 + @NonNull + @Override + public HistoryAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.a_history_item, parent, false); + HistoryAdapter.ViewHolder viewHolder = new HistoryAdapter.ViewHolder(view); + + return viewHolder; + } + + // position에 해당하는 데이터를 뷰홀더의 아이템뷰에 표시 + @Override + public void onBindViewHolder(@NonNull HistoryAdapter.ViewHolder holder, int position) { + HistoryViewItem item = mList.get(position); + + holder.HospitalName.setText(item.getHospitalName()); + holder.HospitalDate.setText(item.getHospitalDate()); + } + + @Override + public int getItemCount() { + return mList.size(); + } + + // 리사이클러 뷰 클릭 이벤트를 위한 코드 + public interface OnItemClickListener { + void onItemClick(int pos); + } + + private HistoryAdapter.OnItemClickListener onItemClickListener = null; + + public void setOnItemClickListener(HistoryAdapter.OnItemClickListener listener) { + this.onItemClickListener = listener; + } + + + public interface OnLongItemClickListener { + void onLongItemClick(int pos); + } + + private HistoryAdapter.OnLongItemClickListener onLongItemClickListener = null; + + public void setOnLongItemClickListener(HistoryAdapter.OnLongItemClickListener listener) { + this.onLongItemClickListener = listener; + } + +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/history/HistoryDetail.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/history/HistoryDetail.java new file mode 100644 index 0000000..ef9ab8c --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/history/HistoryDetail.java @@ -0,0 +1,126 @@ +/* +[상담신청 내역 세부화면] 상담신청 시 작성한 내용 보여줌.*/ + +package com.mnchatbot.myapplication.ui.history; + +import android.app.AlertDialog; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.appcompat.app.AppCompatActivity; + +import com.bumptech.glide.Glide; +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; + +import java.net.URL; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class HistoryDetail extends AppCompatActivity { + + private SharedPreferences pre, pre2; + private HistoryResponse.HistoryData HistoryObject; + private TextView date, time, memberName, memberTell, petName, petAge, petSpecies, petBreed, + petGender, neutralization, underDisease, specialNote, medication, surgery, + exercise, etc, reason, bill; + private ImageView Image; + + //서버통신 + public String getToken() { + pre = getSharedPreferences("TOKEN", MODE_PRIVATE); + String token = pre.getString("TOKEN", null); + return token; + } + + public int getapptSerial() { + pre2 = getSharedPreferences("Serial", MODE_PRIVATE); + int apptSerial = pre2.getInt("apptSerial", 0); + return apptSerial; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.a_history_detail); + + date = findViewById(R.id.history_Date); + time = findViewById(R.id.history_time); + memberName = findViewById(R.id.history_Name); + memberTell = findViewById(R.id.history_phone); + petName = findViewById(R.id.history_petName); + petAge = findViewById(R.id.history_petAge); + petSpecies = findViewById(R.id.history_petSpecies); + petBreed = findViewById(R.id.history_Breed); + petGender = findViewById(R.id.history_petGender); + neutralization = findViewById(R.id.history_Neutralization); + underDisease = findViewById(R.id.history_underDisease); + specialNote = findViewById(R.id.history_SpecialNote); + medication = findViewById(R.id.history_medication); + surgery = findViewById(R.id.history_SurgeryOrAne); + exercise = findViewById(R.id.history_HyperExercise); + etc = findViewById(R.id.history_etc); + reason = findViewById(R.id.history_Reason); + bill = findViewById(R.id.history_bill); + Image = findViewById(R.id.history_Image); + + setHistoryItem(); + } + public void setHistoryItem() { + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + + service.getHistoryObject(getapptSerial()).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + HistoryObject = response.body().data; + if(HistoryObject == null) { + Log.d("상담내역", "비어있음"); + } else { + Log.d("상담내역", "성공"); + date.setText(HistoryObject.getHistoryDate()); + time.setText(HistoryObject.getHistoryTime()); + memberName.setText(HistoryObject.getMemberName()); + memberTell.setText(HistoryObject.getMemberTell()); + petName.setText(HistoryObject.getpetName()); + petAge.setText(String.valueOf(HistoryObject.getpetAge())); + petSpecies.setText(HistoryObject.getpetSpecies()); + petBreed.setText(HistoryObject.getpetBreed()); + petGender.setText(HistoryObject.getpetGender()); + neutralization.setText(HistoryObject.getNeutralization()); + underDisease.setText(HistoryObject.getunderDisease()); + specialNote.setText(HistoryObject.getSpecialNoteMedication()); + medication.setText(HistoryObject.getmedication()); + surgery.setText(HistoryObject.getSurgeryOrAne()); + exercise.setText(HistoryObject.getHyperExercise()); + etc.setText(HistoryObject.getEtc()); + reason.setText(HistoryObject.getapptReason()); + bill.setText(HistoryObject.getBill()); + URL url = HistoryObject.getapptImage(); + Glide.with(HistoryDetail.this).load(url) + .error(android.R.drawable.btn_dialog) + .into(Image); + } + } else {Log.d("response 실패", "404");} + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(HistoryDetail.this); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/history/HistoryListResponse.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/history/HistoryListResponse.java new file mode 100644 index 0000000..74beea8 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/history/HistoryListResponse.java @@ -0,0 +1,44 @@ +package com.mnchatbot.myapplication.ui.history; +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class HistoryListResponse { + @SerializedName("statusCode") + private int code; + + @SerializedName("responseMessage") + private String message; + + @SerializedName("data") + public List data; + + public int getCode() { + return code; + } + + public String getMessage() { + return message; + } + + public class HistoryDataList { + //검색결과 + @SerializedName("apptSerial") + private int apptSerial; + @SerializedName("partnerName") + private String partnerName; + @SerializedName("apptDate") + private String HistoryDate; + + public int getapptSerial() { + return apptSerial; + } + public String getpartnerName() { + return partnerName; + } + public String getHistoryDate() { + return HistoryDate; + } + } + +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/history/HistoryResponse.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/history/HistoryResponse.java new file mode 100644 index 0000000..2c74dd6 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/history/HistoryResponse.java @@ -0,0 +1,95 @@ +package com.mnchatbot.myapplication.ui.history; + +import com.google.gson.annotations.SerializedName; + +import java.net.URL; + +public class HistoryResponse { + @SerializedName("statusCode") + private int code; + + @SerializedName("responseMessage") + private String message; + + @SerializedName("data") + public HistoryData data; + + public String getMessage() { + return message; + } + + public class HistoryData { + //검색 결과 내용 + @SerializedName("apptDate") + private String HistoryDate; + @SerializedName("apptTime") + private String HistoryTime; + @SerializedName("apptMemberName") + private String MemberName; + @SerializedName("apptMemberTell") + private String MemberTell; + @SerializedName("petName") + private String petName; + @SerializedName("petAge") + private int petAge; + @SerializedName("petSpecies") + private String petSpecies; + @SerializedName("petBreed") + private String petBreed; + @SerializedName("petGender") + private String petGender; + @SerializedName("isNeutralization") + private String Neutralization; + @SerializedName("underDisease") + private String underDisease; + @SerializedName("isSpecialNoteMedication") + private String SpecialNoteMedication; + @SerializedName("medication") + private String medication; + @SerializedName("isSurgeryOrAne") + private String SurgeryOrAne; + @SerializedName("isHyperExercise") + private String HyperExercise; + @SerializedName("etc") + private String etc; + @SerializedName("apptReasone") + private String apptReason; + @SerializedName("isCostRequest") + private String Bill; + @SerializedName("apptImage") + private URL apptImage; + + public String getHistoryDate() { + return HistoryDate; + } + public String getHistoryTime() { + return HistoryTime; + } + public String getMemberName() { + return MemberName; + } + public String getMemberTell() { return MemberTell;} + public String getpetName() { return petName;} + public int getpetAge() { + return petAge; + } + public String getpetSpecies() { + return petSpecies; + } + public String getpetBreed() { + return petBreed; + } + public String getpetGender() { return petGender;} + public String getNeutralization() { return Neutralization;} + public String getunderDisease() { return underDisease;} + public String getSpecialNoteMedication() { return SpecialNoteMedication;} + public String getmedication() { return medication;} + public String getSurgeryOrAne() { return SurgeryOrAne;} + public String getHyperExercise() { return HyperExercise;} + public String getEtc() { return etc;} + public String getapptReason() { return apptReason;} + public String getBill() { return Bill;} + public URL getapptImage() { return apptImage;} + + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/history/HistoryViewItem.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/history/HistoryViewItem.java new file mode 100644 index 0000000..1573237 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/history/HistoryViewItem.java @@ -0,0 +1,28 @@ +package com.mnchatbot.myapplication.ui.history; + +public class HistoryViewItem { + private int apptSerial; + private String HospitalName; + private String HospitalDate; + + public int getapptSerial() { + return apptSerial; + } + public void setapptSerial(int apptSerial) { + this.apptSerial = apptSerial; + } + + public String getHospitalName() { + return HospitalName; + } + public void setHospitalName(String Name) { + this.HospitalName = Name; + } + + public String getHospitalDate() { + return HospitalDate; + } + public void setHospitalDate(String hsDate) { + this.HospitalDate = hsDate; + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/hospital/Fragment_hospital.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/hospital/Fragment_hospital.java new file mode 100644 index 0000000..bd14f98 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/hospital/Fragment_hospital.java @@ -0,0 +1,283 @@ +/* +[동물병원 목록 화면] 등록된 동물병원을 시도/시군구 조건에 맞게 보여줌.*/ + +package com.mnchatbot.myapplication.ui.hospital; + +import static android.content.Context.MODE_PRIVATE; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.Spinner; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; +import com.mnchatbot.myapplication.ui.mainPage.MainActivity; + +import java.util.ArrayList; +import java.util.List; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class Fragment_hospital extends Fragment { + + MainActivity mainActivity; + + private RecyclerView mRecyclerView; + private ArrayList mList; + private HospitalAdapter mAdapter; + private Spinner City1, City2; + private ArrayAdapter City1_Adapter, City2_Adapter; + private Button btn_city; + private String City1Name, City2Name, type; + + HospitalListResponse dataList; + List hospdata; + private SharedPreferences preferences; + + @Override + public void onAttach(Context context) { + super.onAttach(context); + mainActivity = (MainActivity)getActivity(); + } + + @Override + public void onDetach() { + super.onDetach(); + mainActivity = null; + } + //서버통신 + public String getToken() { + preferences = getActivity().getSharedPreferences("TOKEN", MODE_PRIVATE); + String token = preferences.getString("TOKEN", null); + return token; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + ViewGroup rootview = (ViewGroup)inflater.inflate(R.layout.f_hospital,container,false); + mRecyclerView = rootview.findViewById(R.id.recyclerView); + City1 = rootview.findViewById(R.id.spn_city1); + City2 = rootview.findViewById(R.id.spn_city2); + btn_city = rootview.findViewById(R.id.btn_city); + + mList = new ArrayList<>(); + // 리사이클러뷰에 데이터추가 (함수가 밑에 구현되어있음) + + mAdapter = new HospitalAdapter(mList, getActivity()); + mRecyclerView.setAdapter(mAdapter); + + + mAdapter.setOnItemClickListener(new HospitalAdapter.OnItemClickListener() { + @Override + public void onItemClick(int pos) { + Toast.makeText(getActivity(), "상담신청 가능한 연계병원이 아직 없습니다.", Toast.LENGTH_SHORT).show(); + //mainActivity.onChangeFragment(7); + } + }); + + btn_city.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { call_totalList(); } + }); + + //스피너 + City1_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.city1, R.layout.row_spinner); + City1_Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + City1.setAdapter(City1_Adapter); + + + City1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + City1Name = City1_Adapter.getItem(i).toString(); + setCity2(); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + } + }); + + + City2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + City2Name = City2_Adapter.getItem(i).toString(); + } + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + + //최신 등록순으로 정렬, rootview return이 있으므로 모든 메소드의 제일 끝에 위치해야 함. + LinearLayoutManager manger = new LinearLayoutManager(getActivity()); + manger.setReverseLayout(true); + manger.setStackFromEnd(true); + mRecyclerView.setLayoutManager(manger); + return rootview; + } + // 리사이클러뷰에 데이터추가 + public void addItem(int HospSerial, String HospType, String HospitalName, String HospitalNum, String location, String email, String field){ + HospitalViewItem item = new HospitalViewItem(); + item.setHospitalSerial(HospSerial); + item.setHospitalType(HospType); + item.setHospitalName(HospitalName); + item.setHospitalNumber(HospitalNum); + item.setlocation(location); + item.setemail(email); + item.setfield(field); + mList.add(item); + } + //모든 동물병원 보기 + public void call_totalList(){ + String region = City1Name; + String city = City2Name; + hospdata = new ArrayList<>(); + + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + service.Allhosplist(region, city).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + dataList = response.body(); + hospdata = dataList.data; + if (mList.size() == 0){ + callCities(); + } else if (mList.size() > 0) { + for (int q = 0; q<= mList.size(); q++) { + mList.clear(); + mAdapter.notifyDataSetChanged(); + callCities(); + } + } + Log.d("hospList", "200"); + } else {Log.d("response 실패", "404");} + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + } + //조건 필터에 맞는 도시 불러오는 반복문 + public void callCities() { + for(int i=0; i< hospdata.size(); i++) { + int hospSerial = hospdata.get(i).getHospSerial(); + type = hospdata.get(i).getHospType(); + String a = hospdata.get(i).getHospName(); + String b = hospdata.get(i).getHospTel(); + String c = hospdata.get(i).getHospAddress(); + String d = hospdata.get(i).getHospEmail(); + String e = hospdata.get(i).getHospField(); + addItem(hospSerial, type, a, b, c, d, e); + mAdapter.notifyDataSetChanged(); + Log.d("hospList3", "200"); + } + } + public void setCity2() { + switch (City1Name) { + case "강원도" : + City2_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.강원도, R.layout.row_spinner); + break; + case "경기도" : + City2_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.경기도, R.layout.row_spinner); + break; + case "경상남도" : + City2_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.경상남도, R.layout.row_spinner); + break; + case "경상북도" : + City2_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.경상북도, R.layout.row_spinner); + break; + case "광주광역시" : + City2_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.광주광역시, R.layout.row_spinner); + break; + case "대구광역시" : + City2_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.대구광역시, R.layout.row_spinner); + break; + case "대전광역시" : + City2_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.대전광역시, R.layout.row_spinner); + break; + case "부산광역시" : + City2_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.부산광역시, R.layout.row_spinner); + break; + case "서울특별시" : + City2_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.서울특별시, R.layout.row_spinner); + break; + case "세종특별자치시" : + City2_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.세종특별자치시, R.layout.row_spinner); + break; + case "울산광역시" : + City2_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.울산광역시, R.layout.row_spinner); + break; + case "인천광역시" : + City2_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.인천광역시, R.layout.row_spinner); + break; + case "전라남도" : + City2_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.전라남도, R.layout.row_spinner); + break; + case "전라북도" : + City2_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.전라북도, R.layout.row_spinner); + break; + case "제주특별자치도" : + City2_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.제주특별자치도, R.layout.row_spinner); + break; + case "충청남도" : + City2_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.충청남도, R.layout.row_spinner); + break; + case "충청북도" : + City2_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.충청북도, R.layout.row_spinner); + break; + } + City2_Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + City2.setAdapter(City2_Adapter); + } + + +} + diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/hospital/Fragment_hospital_detail.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/hospital/Fragment_hospital_detail.java new file mode 100644 index 0000000..5ccff45 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/hospital/Fragment_hospital_detail.java @@ -0,0 +1,488 @@ +/* +[연계병원 상담신청 화면] 동물병원 중 연계병원에 한해 상담 신청 가능. +상담 일자(날짜, 시간), 보호자 이름, 번호, 신청 사유, 예상비용 안내 여부, 참고 이미지에 대해 입력받음. */ + +package com.mnchatbot.myapplication.ui.hospital; + +import static android.app.Activity.RESULT_OK; +import static android.content.Context.MODE_PRIVATE; + +import android.app.AlertDialog; +import android.app.DatePickerDialog; +import android.app.TimePickerDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Bundle; +import android.os.Environment; +import android.os.StrictMode; +import android.provider.MediaStore; +import android.telephony.PhoneNumberFormattingTextWatcher; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.DatePicker; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.RadioGroup; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.TimePicker; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.questionNaire.QnListResponse; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; +import com.mnchatbot.myapplication.ui.mainPage.MainActivity; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.HashMap; +import java.util.List; + +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.RequestBody; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class Fragment_hospital_detail extends Fragment { + + MainActivity mainActivity; + //서버 통신 + private SharedPreferences pre, pre2; + + List spnArray = new ArrayList<>(); + List Qndata; + ArrayAdapter adapter; + int mSerial; + + private EditText Name, Number, Reason; + private Spinner spn_quesionNaire; + private ImageView datePicker, camera; + private TextView Tdate, Ttime; + private Button timePicker, send, backTolist; + private RadioGroup radioGroup; + boolean check; + + //이미지 크롭 + private Uri mImageCaptureUri; + private String absoultePath, url, Ddate, Dtime; + + //임의 추가 + File directory_AAI; + MultipartBody.Part body; + + private static final int PICK_FROM_CAMERA = 0; + private static final int PICK_FROM_ALBUM = 1; + private static final int CROP_FROM_IMAGE = 2; + + DatePickerDialog datePickerDialog; + Calendar calendar = Calendar.getInstance(); + + @Override + public void onAttach(Context context) { + super.onAttach(context); + mainActivity = (MainActivity) getActivity(); + } + + @Override + public void onDetach() { + super.onDetach(); + mainActivity = null; + } + //서버통신 + public String getToken() { + pre = getActivity().getSharedPreferences("TOKEN", MODE_PRIVATE); + String token = pre.getString("TOKEN", null); + return token; + } + public int getpetSerial() { + pre2 = getActivity().getSharedPreferences("Serial", MODE_PRIVATE); + int petSerial = pre2.getInt("petSerial", 0); + return petSerial; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + ViewGroup rootview = (ViewGroup)inflater.inflate(R.layout.f_hospital_detail,container,false); + Name = rootview.findViewById(R.id.h_Name); + Number = rootview.findViewById(R.id.h_num); + spn_quesionNaire = rootview.findViewById(R.id.spn_questionNaire); + datePicker = rootview.findViewById(R.id.btn_DatePicker); + timePicker = rootview.findViewById(R.id.btn_TimePicker); + Tdate = rootview.findViewById(R.id.h_date); + Ttime = rootview.findViewById(R.id.h_time); + Reason = rootview.findViewById(R.id.h_reson); + camera = rootview.findViewById(R.id.btn_img); + send = rootview.findViewById(R.id.btn_send); + backTolist = rootview.findViewById(R.id.btn_backTolist); + radioGroup =rootview.findViewById(R.id.h_radioGroup); + + Number.addTextChangedListener(new PhoneNumberFormattingTextWatcher()); + + + datePicker.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + int pYear = calendar.get(Calendar.YEAR); + int pMonth = calendar.get(Calendar.MONTH); + int pDay = calendar.get(Calendar.DAY_OF_MONTH); + + datePickerDialog = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { + @Override + public void onDateSet(DatePicker datePicker, int year, int month, int day) { + month = month +1; + if(month < 10) { + Ddate = year + "-" + 0 + month + "-" + day; + if (day <10) { + Ddate = year + "-" + 0 + month + "-" + 0 + day; + } + Tdate.setText(Ddate);} + else { + Ddate = year + "-" + month + "-" + day; + if (day <10) { + Ddate = year + "-" + month + "-" + 0 + day; + } + Tdate.setText(Ddate);} + Log.d("날짜", Tdate.getText().toString()); + } + }, pYear, pMonth, pDay); + datePickerDialog.show(); + } + }); + timePicker.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + showTimePicker(); + } + }); + + radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup radioGroup, int checked) { + switch (checked) { + case R.id.h_radioYes: + check = true; + break; + case R.id.h_radioNo: + check = false; + break; + } + } + }); + + callQuestion(); + adapter = new ArrayAdapter<>(getActivity(), R.layout.row_spinner, spnArray); + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spn_quesionNaire.setAdapter(adapter); + spn_quesionNaire.setSelection(1); + + spn_quesionNaire.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + Log.d("spn", String.valueOf(spn_quesionNaire.getSelectedItem())); + Log.d("spn", String.valueOf(Qndata.get(i).getMedicalFormSerial())); + } + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + + + camera.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogInterface.OnClickListener cameraListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + TakePhoto(); + } + }; + DialogInterface.OnClickListener albumListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + TakeAlbum(); + } + }; + + DialogInterface.OnClickListener cancelListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }; + + new AlertDialog.Builder(getActivity()) + .setTitle("업로드할 이미지 선택") + .setPositiveButton("사진촬영", cameraListener) + .setNegativeButton("앨범선택", albumListener) + .setNeutralButton("취소", cancelListener) + .show(); + } + }); + + send.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if ( Name.getText().toString().isEmpty() || Number.getText().toString().isEmpty() + || (datePickerDialog.isShowing()==false) + || (Reason.getText().toString().isEmpty()) + || (radioGroup.getCheckedRadioButtonId()==-1)){ + Toast.makeText(getActivity(), "입력하지 않은 항목이 있습니다.", Toast.LENGTH_SHORT).show(); + } else {sendData();} + } + }); + backTolist.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + mainActivity.onChangeFragment(4); + } + }); + + return rootview; + } + public void callQuestion() { + Qndata = new ArrayList<>(); + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + service.getQnList(getpetSerial()).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + Qndata = response.body().data; + if (Qndata == null) { + Log.d("문진표 스피너", "데이터 없음"); + Toast.makeText(getActivity(), "문진표를 작성해주세요.", Toast.LENGTH_SHORT).show(); + } else { + for(int i=0; i< Qndata.size(); i++) { + mSerial = Qndata.get(i).getMedicalFormSerial(); + String Name = Qndata.get(i).getQnName(); + spnArray.add(Name); + adapter.notifyDataSetChanged(); + Log.d("spn", String.valueOf(mSerial)); + }} + + } else {Log.d("response 실패", "404");} + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + + + } + + //상담신청 정보 보내는 메소드 + public void sendData() { + String name = Name.getText().toString(); + String number = Number.getText().toString(); + + //스피너 sharedPreference로 불러와야함. + int mediSerial = mSerial; + + String date = Ddate; + String time = Dtime; + boolean bill = check; + String reason = Reason.getText().toString(); + + int hospSerial = pre2.getInt("hospSerial", 0); + + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + + RequestBody petSerial = RequestBody.create(MediaType.parse("text/plain"), String.valueOf(getpetSerial())); + RequestBody medicalSerial = RequestBody.create(MediaType.parse("text/plain"), String.valueOf(mediSerial)); + RequestBody partnerSerial = RequestBody.create(MediaType.parse("text/plain"),String.valueOf(hospSerial)); + RequestBody apptMemberName = RequestBody.create(MediaType.parse("text/plain"), name); + RequestBody apptMemberTel = RequestBody.create(MediaType.parse("text/plain"),number); + RequestBody apptDate = RequestBody.create(MediaType.parse("text/plain"),date); + RequestBody apptTime = RequestBody.create(MediaType.parse("text/plain"), time); + RequestBody apptBill = RequestBody.create(MediaType.parse("text/plain"), String.valueOf(bill)); + RequestBody apptReason = RequestBody.create(MediaType.parse("text/plain"), reason); + + HashMap map = new HashMap<>(); + map.put("petSerial", petSerial); + map.put("medicalSerial", medicalSerial); + map.put("partnerSerial", partnerSerial); + map.put("apptMemberName", apptMemberName); + map.put("apptMemberTel", apptMemberTel); + map.put("apptDate", apptDate); + map.put("apptTime", apptTime); + map.put("apptBill", apptBill); + map.put("apptReason", apptReason); + + //Uri 타입 파일 경로가지는 requestBody 객체 생성 + RequestBody requestFile = RequestBody.create(MediaType.parse("image/jpg"), String.valueOf(mImageCaptureUri)); + File IImage = directory_AAI; + //requestBody로 Multipart.Part 객체 생성 + if (IImage == null) {body = null;} + else { + body = MultipartBody.Part.createFormData("uploaded_file", directory_AAI.getName(), requestFile); + } + MultipartBody.Part bbody = body; + + service.apply(bbody, map).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + Toast.makeText(getActivity(),"신청되었습니다.", Toast.LENGTH_SHORT).show(); + mainActivity.onChangeFragment(4); + } else {Log.d("response 실패", "404");} + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + } + + public void showTimePicker() { + int pHour = calendar.get(Calendar.HOUR); + int pMinutes = calendar.get(Calendar.MINUTE); + + TimePickerDialog.OnTimeSetListener myTimeListener = new TimePickerDialog.OnTimeSetListener() { + @Override + public void onTimeSet(TimePicker view, int hourOfDay, int minute) { + if (view.isShown()) { + calendar.set(Calendar.HOUR, hourOfDay); + calendar.set(Calendar.MINUTE, minute); + Dtime = String.format("%02d:%02d", hourOfDay, minute); + Ttime.setText(Dtime); + Log.d("시간", Dtime); + } + } + }; + TimePickerDialog timePickerDialog = new TimePickerDialog(getActivity(), android.R.style.Theme_Holo_Light_Dialog_NoActionBar, myTimeListener, pHour, pMinutes, true); + timePickerDialog.setTitle("희망 시간대"); + timePickerDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); + timePickerDialog.show(); + } + + // 카메라 촬영 후 이미지 가져오기 + public void TakePhoto() { + //카메라 호출 + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder(); + StrictMode.setVmPolicy(builder.build()); + + // 임시로 사용할 파일의 경로를 생성 + url = "tmp_" + System.currentTimeMillis() + ".jpg"; + mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), url)); + + intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri); + startActivityForResult(intent, PICK_FROM_CAMERA); + } + // 앨범에서 이미지 가져오기 + public void TakeAlbum() { + // 앨범 호출 + Intent intent = new Intent(Intent.ACTION_PICK); + intent.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE); + startActivityForResult(intent, PICK_FROM_ALBUM); + } + @Override + + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode,resultCode,data); + if(resultCode != RESULT_OK) { return; } + switch(requestCode) { + case PICK_FROM_ALBUM: + { + mImageCaptureUri = data.getData(); + Log.d("AAI", String.valueOf(mImageCaptureUri.getPath())); + } + case PICK_FROM_CAMERA: + { + Intent intent = new Intent("com.android.camera.action.CROP"); + intent.setDataAndType(mImageCaptureUri, "image/*"); + + // CROP할 이미지를 200*200 크기로 저장 + intent.putExtra("outputX", 200); // CROP한 이미지의 x축 크기 + intent.putExtra("outputY", 200); // CROP한 이미지의 y축 크기 + intent.putExtra("aspectX", 1); // CROP 박스의 X축 비율 + intent.putExtra("aspectY", 1); // CROP 박스의 Y축 비율 + intent.putExtra("scale", true); + intent.putExtra("return-data", true); + Log.d("크롭", "성공"); + startActivityForResult(intent, CROP_FROM_IMAGE); // CROP_FROM_CAMERA case문 이동 + break; + } + + case CROP_FROM_IMAGE: + { + Log.d("크롭 이미지 보여주기", "성공"); + if(resultCode != RESULT_OK) { return;} + final Bundle extras = data.getExtras(); + // CROP된 이미지를 저장하기 위한 FILE 경로 >> Provider의 문제? + String filePath = Environment.getExternalStorageDirectory().getAbsolutePath()+ + "/AAI/"+System.currentTimeMillis()+".jpg"; + if(extras != null) { + Bitmap photo = extras.getParcelable("data"); // CROP된 BITMAP + camera.setImageBitmap(photo); // 레이아웃의 이미지칸에 CROP된 BITMAP을 보여줌 + storeCropImage(photo, filePath); // CROP된 이미지를 외부저장소, 앨범에 저장한다. + absoultePath = filePath; + break; + } else {Log.d("extras", "데이터 없음"); } + + // 임시 파일 삭제 + File f = new File(mImageCaptureUri.getPath()); + + if(f.exists()) { + f.delete(); + } + } + } + + } + private void storeCropImage(Bitmap bitmap, String filePath) { + String dirPath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/AAI"; + directory_AAI = new File(dirPath); + if(!directory_AAI.exists()) // AAI 디렉터리에 폴더가 없다면 (새로 이미지를 저장할 경우에 속한다.) + directory_AAI.mkdirs(); //디렉토리 새로 만드는 메소드 + + File copyFile = new File(filePath); + BufferedOutputStream out = null; + + try { + copyFile.createNewFile(); + out = new BufferedOutputStream(new FileOutputStream(copyFile)); + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); + + getActivity().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(copyFile))); + out.flush(); + out.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/hospital/HospitalAdapter.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/hospital/HospitalAdapter.java new file mode 100644 index 0000000..18ee828 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/hospital/HospitalAdapter.java @@ -0,0 +1,113 @@ +package com.mnchatbot.myapplication.ui.hospital; + +import static android.content.Context.MODE_PRIVATE; + +import android.content.Context; +import android.content.SharedPreferences; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.mnchatbot.myapplication.R; + +import java.util.ArrayList; + +public class HospitalAdapter extends RecyclerView.Adapter { + private Context context; + private SharedPreferences preferences; + + public HospitalAdapter(ArrayList mList, Context context) { + this.mList = mList; + this.context = context; + } + + public class ViewHolder extends RecyclerView.ViewHolder { + TextView HospitalName, HospitalNumber, location, email, field, tv_field; + Button btnHospital; + + public ViewHolder(@NonNull View itemView) { + super(itemView); + + HospitalName = itemView.findViewById(R.id.HospitalName); + HospitalNumber = itemView.findViewById(R.id.HospitalNumber); + location = itemView.findViewById(R.id.location); + email = itemView.findViewById(R.id.email); + field = itemView.findViewById(R.id.field); + tv_field = itemView.findViewById(R.id.tv_field); + + btnHospital = itemView.findViewById(R.id.btnHospital); + + btnHospital.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int position = getAdapterPosition(); + if (position != RecyclerView.NO_POSITION) { + if (onItemClickListener != null) { + onItemClickListener.onItemClick(position); + HospitalViewItem item = mList.get(position); + int hospSerial = item.getHospitalSerial(); + Log.d("hospSerial", String.valueOf(hospSerial)); + + preferences = context.getSharedPreferences("Serial", MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt("hospSerial", hospSerial); + editor.commit(); + Log.d("저장된 hospSerial", String.valueOf(preferences.getInt("hospSerial", 0))); + } + } + } + }); + } + } + + //ArrayList + private ArrayList mList = null; + + // 아이템 뷰를 위한 뷰홀더 객체를 생성하여 리턴 + @NonNull + @Override + public HospitalAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.f_hospital_item, parent, false); + HospitalAdapter.ViewHolder viewHolder = new HospitalAdapter.ViewHolder(view); + + return viewHolder; + } + + // position에 해당하는 데이터를 뷰홀더의 아이템뷰에 표시 + @Override + public void onBindViewHolder(@NonNull HospitalAdapter.ViewHolder holder, int position) { + HospitalViewItem item = mList.get(position); + + holder.HospitalName.setText(item.getHospitalName()); + holder.HospitalNumber.setText(item.getHospitalNumber()); + holder.location.setText(item.getlocation()); + holder.email.setText(item.getemail()); + holder.field.setText(item.getfield()); + holder.btnHospital.setVisibility(View.INVISIBLE); + if (item.getHospitalType().equals("PARTNER")) {holder.btnHospital.setVisibility(View.VISIBLE);} + } + + @Override + public int getItemCount() { + return mList.size(); + } + + // 리사이클러 뷰 클릭 이벤트를 위한 코드 + public interface OnItemClickListener { + void onItemClick(int pos); + } + + private HospitalAdapter.OnItemClickListener onItemClickListener = null; + + public void setOnItemClickListener(HospitalAdapter.OnItemClickListener listener) { + this.onItemClickListener = listener; + } + +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/hospital/HospitalListResponse.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/hospital/HospitalListResponse.java new file mode 100644 index 0000000..ef94c0c --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/hospital/HospitalListResponse.java @@ -0,0 +1,63 @@ +package com.mnchatbot.myapplication.ui.hospital; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class HospitalListResponse { + @SerializedName("statusCode") + private int code; + + @SerializedName("responseMessage") + private String message; + + @SerializedName("data") + public List data; + + @Override + public String toString() { + return "ProfileResponse{" + "data=" + data+ "}"; + } + + public class HospDataList { + @SerializedName("hospSerial") + private int hospSerial; + + @SerializedName("hospName") + private String hospName; + @SerializedName("hospAddress") + private String hospAddress; + @SerializedName("hospTel") + private String hospTel; + @SerializedName("hospEmail") + private String hospEmail; + @SerializedName("hospField") + private String hospField; + @SerializedName("hospType") + private String hospType; + + public int getHospSerial() { + return hospSerial; + } + public String getHospType() { + return hospType; + } + public String getHospName() { + return hospName; + } + public String getHospAddress() { + return hospAddress; + } + + public String getHospEmail() { + return hospEmail; + } + public String getHospTel() { + return hospTel; + } + public String getHospField() { + return hospField; + } + } + +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/hospital/HospitalViewItem.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/hospital/HospitalViewItem.java new file mode 100644 index 0000000..d9c8b45 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/hospital/HospitalViewItem.java @@ -0,0 +1,51 @@ +package com.mnchatbot.myapplication.ui.hospital; + +public class HospitalViewItem { + private String HospitalType, HospitalName, HospitalNumber, location, email, field; + private int HospitalSerial; + + public int getHospitalSerial() {return HospitalSerial;} + public void setHospitalSerial(int hospSerial) {this.HospitalSerial = hospSerial;} + + public String getHospitalType() { + return HospitalType; + } + public void setHospitalType(String Type) { + this.HospitalType = Type; + } + + public String getHospitalName() { + return HospitalName; + } + public void setHospitalName(String Name) { + this.HospitalName = Name; + } + + public String getHospitalNumber() { + return HospitalNumber; + } + public void setHospitalNumber(String Num) { + this.HospitalNumber = Num; + } + + public String getlocation() { + return location; + } + public void setlocation(String Hospitallocation) { + this.location = Hospitallocation; + } + + public String getemail() { + return email; + } + public void setemail(String Hospitalemail) { + this.email = Hospitalemail; + } + + public String getfield() { + return field; + } + public void setfield(String Hospitalfield) { + this.field = Hospitalfield; + } +} diff --git a/application/app/src/main/java/com/example/myapplication/ui/join/EmailCodeData.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/join/EmailCodeData.java similarity index 88% rename from application/app/src/main/java/com/example/myapplication/ui/join/EmailCodeData.java rename to application/app/src/main/java/com/mnchatbot/myapplication/ui/join/EmailCodeData.java index 83f8dd7..35f22d3 100644 --- a/application/app/src/main/java/com/example/myapplication/ui/join/EmailCodeData.java +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/join/EmailCodeData.java @@ -1,4 +1,4 @@ -package com.example.myapplication.ui.join; +package com.mnchatbot.myapplication.ui.join; import com.google.gson.annotations.SerializedName; diff --git a/application/app/src/main/java/com/example/myapplication/ui/join/EmailValidationData.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/join/EmailValidationData.java similarity index 84% rename from application/app/src/main/java/com/example/myapplication/ui/join/EmailValidationData.java rename to application/app/src/main/java/com/mnchatbot/myapplication/ui/join/EmailValidationData.java index 40eb48b..9daa235 100644 --- a/application/app/src/main/java/com/example/myapplication/ui/join/EmailValidationData.java +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/join/EmailValidationData.java @@ -1,4 +1,4 @@ -package com.example.myapplication.ui.join; +package com.mnchatbot.myapplication.ui.join; import com.google.gson.annotations.SerializedName; diff --git a/application/app/src/main/java/com/example/myapplication/ui/join/JoinActivity.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/join/JoinActivity.java similarity index 85% rename from application/app/src/main/java/com/example/myapplication/ui/join/JoinActivity.java rename to application/app/src/main/java/com/mnchatbot/myapplication/ui/join/JoinActivity.java index 8165d37..dc3bb7f 100644 --- a/application/app/src/main/java/com/example/myapplication/ui/join/JoinActivity.java +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/join/JoinActivity.java @@ -1,4 +1,4 @@ -package com.example.myapplication.ui.join; +package com.mnchatbot.myapplication.ui.join; import android.app.AlertDialog; import android.app.Dialog; @@ -16,10 +16,10 @@ import androidx.appcompat.app.AppCompatActivity; -import com.example.myapplication.R; -import com.example.myapplication.ui.login.LoginActivity; -import com.example.myapplication.ui.mainPage.NewActivity; -import com.example.myapplication.ui.petSelect.PetSelectActivity; +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; +import com.mnchatbot.myapplication.ui.login.LoginActivity; import retrofit2.Call; import retrofit2.Callback; @@ -29,12 +29,18 @@ public class JoinActivity extends AppCompatActivity { private JoinUserState joinUserState = new JoinUserState(); private boolean validate = false; - private ServiceAPI service = RetrofitClient.getClient().create(ServiceAPI.class); private Dialog enterCodeDialog; private AlertDialog dialog; private int codeEntered; private int codeReceived; + //서버 통신 + private String TOKEN = getToken(); + private ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, TOKEN); + public String getToken() { + return TOKEN; + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -70,7 +76,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) {} public void afterTextChanged(Editable s) { joinUserState.setPassword(passwordEditText.getText().toString()); if(!joinUserState.isPasswordValid()) { - passwordEditText.setError("비밀번호는 여섯자리 이상, 영어와 숫자로 구성해주세요."); + passwordEditText.setError("비밀번호는 여덟자리 이상, 영문자, 숫자, 특수문자(!,@,#,^,&,*,(,))를 포함하여 구성해주세요"); } } }; @@ -124,8 +130,8 @@ private void validateEmail(EmailValidationData data) { @Override public void onResponse(Call call, Response response) { JoinResponse result = response.body(); + // Toast.makeText(JoinActivity.this, result.getMessage(), Toast.LENGTH_SHORT).show(); if (result.getCode() == 200) { - // Toast.makeText(JoinActivity.this, result.getMessage(), Toast.LENGTH_SHORT).show(); AlertDialog.Builder builder = new AlertDialog.Builder(JoinActivity.this); dialog = builder.setMessage("사용할 수 있는 이메일입니다.") .setCancelable(false) @@ -138,13 +144,13 @@ public void onClick(DialogInterface dialog, int which) { dialog.show(); validate = true; } else { - string faileResult = "사용할 수 없는 이메일입니다."; + String faileResult = "사용할 수 없는 이메일입니다."; Toast.makeText(JoinActivity.this, faileResult, Toast.LENGTH_SHORT).show(); } } @Override public void onFailure(Call call, Throwable t) { - Toast.makeText(JoinActivity.this, "회원가입 에러 발생", Toast.LENGTH_SHORT).show(); + Toast.makeText(JoinActivity.this, "잠시 후 다시 시도해주세요.", Toast.LENGTH_SHORT).show(); Log.e("회원가입 에러 발생", t.getMessage()); t.printStackTrace(); // 에러 발생시 에러 발생 원인 단계별로 출력해줌 } @@ -164,13 +170,13 @@ public void onResponse(Call call, retrofit2.Response codeReceived = result.getData(); showEmailCodeEnterDialog(); } else { - string faileResult = "코드 전송에 실패하였습니다. 다시 시도해주세요."; + String faileResult = "코드 전송에 실패하였습니다. 다시 시도해주세요."; Toast.makeText(JoinActivity.this, faileResult, Toast.LENGTH_SHORT).show(); } } @Override public void onFailure(Call call, Throwable t) { - Toast.makeText(JoinActivity.this, "회원가입 에러 발생", Toast.LENGTH_SHORT).show(); + Toast.makeText(JoinActivity.this, "잠시 후 다시 시도해주세요.", Toast.LENGTH_SHORT).show(); Log.e("이메일 인증 에러 발생", t.getMessage()); t.printStackTrace(); // 에러 발생시 에러 발생 원인 단계별로 출력해줌 } @@ -184,9 +190,13 @@ public void showEmailCodeEnterDialog() { @Override public void onClick(View view) { EditText codeEditText = enterCodeDialog.findViewById(R.id.editTextNumberPassword); - codeEntered = Integer.parseInt(codeEditText.getText().toString()); - enterCodeDialog.cancel(); - startJoin(new JoinData(joinUserState.getEmail(),joinUserState.getPassword(),codeReceived,codeEntered)); + try { + codeEntered = Integer.parseInt(codeEditText.getText().toString()); + enterCodeDialog.cancel(); + startJoin(new JoinData(joinUserState.getEmail(),joinUserState.getPassword(),codeReceived,codeEntered)); + } catch (NumberFormatException e) { + Toast.makeText(JoinActivity.this, "숫자를 입력해주세요.", Toast.LENGTH_SHORT).show(); + } } }); } @@ -201,7 +211,7 @@ public void onResponse(Call call, Response response) Intent intent = new Intent(getApplicationContext(), LoginActivity.class); startActivity(intent); } else { - string faileResult = "회원가입에 실패하였습니다. 다시 시도해주세요."; + String faileResult = "회원가입에 실패하였습니다. 다시 시도해주세요."; Toast.makeText(JoinActivity.this, faileResult, Toast.LENGTH_SHORT).show(); } } @@ -213,4 +223,3 @@ public void onFailure(Call call, Throwable t) { }); } } - diff --git a/application/app/src/main/java/com/example/myapplication/ui/join/JoinData.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/join/JoinData.java similarity index 92% rename from application/app/src/main/java/com/example/myapplication/ui/join/JoinData.java rename to application/app/src/main/java/com/mnchatbot/myapplication/ui/join/JoinData.java index f4b19f5..251946f 100644 --- a/application/app/src/main/java/com/example/myapplication/ui/join/JoinData.java +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/join/JoinData.java @@ -1,4 +1,4 @@ -package com.example.myapplication.ui.join; +package com.mnchatbot.myapplication.ui.join; import com.google.gson.annotations.SerializedName; diff --git a/application/app/src/main/java/com/example/myapplication/ui/join/JoinResponse.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/join/JoinResponse.java similarity index 90% rename from application/app/src/main/java/com/example/myapplication/ui/join/JoinResponse.java rename to application/app/src/main/java/com/mnchatbot/myapplication/ui/join/JoinResponse.java index 980a793..a23ce0a 100644 --- a/application/app/src/main/java/com/example/myapplication/ui/join/JoinResponse.java +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/join/JoinResponse.java @@ -1,4 +1,4 @@ -package com.example.myapplication.ui.join; +package com.mnchatbot.myapplication.ui.join; import com.google.gson.annotations.SerializedName; diff --git a/application/app/src/main/java/com/example/myapplication/ui/join/JoinUserState.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/join/JoinUserState.java similarity index 54% rename from application/app/src/main/java/com/example/myapplication/ui/join/JoinUserState.java rename to application/app/src/main/java/com/mnchatbot/myapplication/ui/join/JoinUserState.java index a46fede..acb0ba1 100644 --- a/application/app/src/main/java/com/example/myapplication/ui/join/JoinUserState.java +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/join/JoinUserState.java @@ -1,7 +1,10 @@ -package com.example.myapplication.ui.join; +package com.mnchatbot.myapplication.ui.join; import com.google.gson.annotations.SerializedName; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class JoinUserState { private String email = null; @@ -17,7 +20,22 @@ public boolean isEmailValid() { } public boolean isPasswordValid() { - return password != null && password.trim().length() > 5 && isAlphaOrDigit(password); + // 비밀번호 유효성 검사식1 : 영문자 대소문자, 숫자, 특수문자 중 3가지 이상 포함되어야 한다. + String val_symbol = "^(?=.*[A-Za-z])(?=.*[0-9])(?=.*[$@$!%*#?&])[A-Za-z[0-9]$@$!%*#?&]{8,20}$"; // 영문, 숫자, 특수문자 + + // 정규표현식 컴파일 + Pattern pattern_symbol = Pattern.compile(val_symbol); + + if (password == null || password.length() == 0) + return false; + + Matcher matcher_symbol = pattern_symbol.matcher(password); + + if (!matcher_symbol.find()) { + return false; + } + + return true; } public boolean isPasswordSame(){ @@ -30,13 +48,6 @@ public boolean isValidData() { return isPasswordSame() && isPasswordValid() && isEmailValid(); } - private boolean isAlphaOrDigit(String password) { - for(int i=0;i call, retrofit2.Response response) { JoinResponse result = response.body(); + if (result.getCode() == 200) { Toast.makeText(PasswordChangeActivity.this, result.getMessage(), Toast.LENGTH_SHORT).show(); enterCodeDialog = new Dialog(PasswordChangeActivity.this); @@ -117,8 +121,8 @@ public void onResponse(Call call, retrofit2.Response codeReceived = result.getData(); showEmailCodeEnterDialog(); } else { - string faileResult = "입력하신 이메일로 코드를 전송하는데 실패하였습니다. 다시 시도해주세요."; - Toast.makeText(JoinActivity.this, faileResult, Toast.LENGTH_SHORT).show(); + String faileResult = "입력하신 이메일로 코드를 전송하는데 실패하였습니다. 다시 시도해주세요."; + Toast.makeText(PasswordChangeActivity.this, faileResult, Toast.LENGTH_SHORT).show(); } } @Override @@ -138,9 +142,13 @@ public void showEmailCodeEnterDialog() { @Override public void onClick(View view) { EditText codeEditText = enterCodeDialog.findViewById(R.id.editTextNumberPassword); - codeEntered = Integer.parseInt(codeEditText.getText().toString()); - enterCodeDialog.cancel(); - enterEmailCode(new EmailCodeData(codeReceived,codeEntered)); + try { + codeEntered = Integer.parseInt(codeEditText.getText().toString()); + enterCodeDialog.cancel(); + enterEmailCode(new EmailCodeData(codeReceived,codeEntered)); + } catch (NumberFormatException e) { + Toast.makeText(PasswordChangeActivity.this, "숫자를 입력해주세요.", Toast.LENGTH_SHORT).show(); + } } }); } @@ -155,15 +163,15 @@ public void onResponse(Call call, retrofit2.Response isEmailValidated = true; AlertDialog.Builder builder = new AlertDialog.Builder(PasswordChangeActivity.this); dialog = builder.setMessage("이메일이 인증되었습니다.") - .setPositiveButton("확인", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) {} - }) + .setPositiveButton("확인", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) {} + }) .create(); dialog.show(); } else { - string faileResult = "이메일로 인증에 실패하였습니다. 다시 시도해주세요."; - Toast.makeText(JoinActivity.this, faileResult, Toast.LENGTH_SHORT).show(); + String faileResult = "이메일로 인증에 실패하였습니다. 다시 시도해주세요."; + Toast.makeText(PasswordChangeActivity.this, faileResult, Toast.LENGTH_SHORT).show(); } } @Override @@ -175,25 +183,29 @@ public void onFailure(Call call, Throwable t) { }); } // 패스워드 변경 리퀘스트 - private void changePw(LoginRequest data) { + private void changePw(PasswordChangeRequest data) { service.changePw(data).enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { - JoinResponse result = response.body(); - Toast.makeText(PasswordChangeActivity.this, result.getMessage(), Toast.LENGTH_SHORT).show(); - if (result.getCode() == 200) { + if (response.isSuccessful()) { + Toast.makeText(PasswordChangeActivity.this, "비밀번호가 변경되었습니다.", Toast.LENGTH_SHORT).show(); AlertDialog.Builder builder = new AlertDialog.Builder(PasswordChangeActivity.this); Intent intent = new Intent(getApplicationContext(), LoginActivity.class); startActivity(intent); + } else if(response.code() == 400) { + Log.d("패스워드변경", String.valueOf(response.code())); + String faileResult = "존재하지 않은 아이디 입니다. 다시 시도해주세요."; + Toast.makeText(PasswordChangeActivity.this, faileResult, Toast.LENGTH_SHORT).show(); } else { - string faileResult = "비밀번호에 실패하였습니다. 다시 시도해주세요."; - Toast.makeText(JoinActivity.this, faileResult, Toast.LENGTH_SHORT).show(); + Log.d("패스워드변경", String.valueOf(response.code())); + String faileResult = "패스워드 변경 실패했습니다. 다시 시도해주세요."; + Toast.makeText(PasswordChangeActivity.this, faileResult, Toast.LENGTH_SHORT).show(); } } @Override public void onFailure(Call call, Throwable t) { - Toast.makeText(PasswordChangeActivity.this, "회원가입 에러 발생", Toast.LENGTH_SHORT).show(); - Log.e("회원가입 에러 발생", t.getMessage()); + Toast.makeText(PasswordChangeActivity.this, "잠시 후 다시 시도해주세요.", Toast.LENGTH_SHORT).show(); + Log.e("비밀번호 변경 통신 장애", t.getMessage()); t.printStackTrace(); // 에러 발생시 에러 발생 원인 단계별로 출력해줌 } }); diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/join/PasswordChangeRequest.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/join/PasswordChangeRequest.java new file mode 100644 index 0000000..044545d --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/join/PasswordChangeRequest.java @@ -0,0 +1,16 @@ +package com.mnchatbot.myapplication.ui.join; + +import com.google.gson.annotations.SerializedName; + +//비밀번호 변경 요청 +public class PasswordChangeRequest { + @SerializedName("memberEmail") + public String inputID; + + @SerializedName("memberNewPassword") + public String inputPw; + + public PasswordChangeRequest(String inputID, String inputPw) { + this.inputID = inputID; this.inputPw = inputPw; + } +} diff --git a/application/app/src/main/java/com/example/myapplication/ui/login/LoginActivity.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/login/LoginActivity.java similarity index 65% rename from application/app/src/main/java/com/example/myapplication/ui/login/LoginActivity.java rename to application/app/src/main/java/com/mnchatbot/myapplication/ui/login/LoginActivity.java index 8c1539e..b0f26ba 100644 --- a/application/app/src/main/java/com/example/myapplication/ui/login/LoginActivity.java +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/login/LoginActivity.java @@ -1,25 +1,32 @@ -package com.example.myapplication.ui.login; +package com.mnchatbot.myapplication.ui.login; +import android.app.Activity; import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; +import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.Button; +import android.widget.CheckBox; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; -import com.example.myapplication.R; -import com.example.myapplication.ui.join.JoinActivity; -import com.example.myapplication.ui.join.PasswordChangeActivity; -import com.example.myapplication.ui.join.RetrofitClient; -import com.example.myapplication.ui.petSelect.PetSelectActivity; +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; +import com.mnchatbot.myapplication.ui.join.JoinActivity; +import com.mnchatbot.myapplication.ui.join.PasswordChangeActivity; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.petSelect.PetSelectActivity; import retrofit2.Call; import retrofit2.Callback; @@ -28,12 +35,19 @@ public class LoginActivity extends AppCompatActivity { - private LoginAPI loginAPI = RetrofitClient.getClient().create(LoginAPI.class); + String ID; + private TextView pw_change; private EditText login_email, login_password; - private Button login_button, join_button, pw_change; + private Button login_button, join_button; + private CheckBox autoLogin; private LoginFormState LoginFormState = new LoginFormState(); + private SharedPreferences preferences; + + //서버 통신 + private ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class); + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate( savedInstanceState ); @@ -41,6 +55,7 @@ protected void onCreate(Bundle savedInstanceState) { login_email = findViewById( R.id.username ); login_password = findViewById( R.id.password ); + autoLogin = findViewById(R.id.autoLogin); join_button = findViewById( R.id.signup ); join_button.setOnClickListener( new View.OnClickListener() { @@ -85,7 +100,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) {} public void afterTextChanged(Editable s) { LoginFormState.setPassword(login_password.getText().toString()); if(!LoginFormState.isPasswordValid()) { - login_password.setError("6자리 이상 입력해주세요."); + login_password.setError("8자리 이상 입력해주세요."); } //data 형식이 유효하면 로그인 버튼 활성화 login_button.setEnabled(LoginFormState.isValidData()); @@ -108,14 +123,46 @@ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { } }); + //(TEST) 자동 로그인 체크됨에 따라 저장하기 + autoLogin.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + preferences = getSharedPreferences("autoLogin", Activity.MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + editor.putString("userId", String.valueOf(login_email.getText())); + editor.commit(); + ID = preferences.getString("userId", null); + Log.d("아이디", ID); + } + }); + + if (ID == null) { + Login(); + } else { + Toast.makeText(this, "자동 로그인", Toast.LENGTH_SHORT).show(); + Intent intent = new Intent(LoginActivity.this, PetSelectActivity.class); + startActivity(intent); + LoginActivity.this.finish(); + } + + } + + public void Login() { login_button = findViewById( R.id.login ); login_button.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { + AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this); + builder.setTitle("알림") + .setMessage("서버를 옮기는 중입니다! 지금은 서비스를 이용하실 수 없습니다.🥺") + .setPositiveButton("확인", null) + .create() + .show(); LoginResponse(); } }); } + public void LoginResponse() { String userID = login_email.getText().toString().trim(); String userPassword = login_password.getText().toString().trim(); @@ -124,7 +171,7 @@ public void LoginResponse() { LoginRequest loginRequest = new LoginRequest(userID, userPassword); //loginRequest에 저장된 데이터와 함께 LoginAPI에서 정의한 getLoginResponse 함수를 실행한 후 응답을 받음 - loginAPI.getLoginResponse(loginRequest).enqueue(new Callback() { + service.getLoginResponse(loginRequest).enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { //response.body()를 result에 저장 @@ -132,8 +179,14 @@ public void onResponse(Call call, Response respons //받은 코드 저장 int statusCode = result.getStatusCode(); - - if (result.getStatusCode()==200) { + preferences = getSharedPreferences("TOKEN", Context.MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + String token = response.headers().value(3); + editor.putString("TOKEN", token); + editor.commit(); + Log.d("Token", token); + + if (statusCode==200) { String userID = login_email.getText().toString(); Toast.makeText(LoginActivity.this, userID + "님 환영합니다.", Toast.LENGTH_SHORT).show(); @@ -142,7 +195,15 @@ public void onResponse(Call call, Response respons startActivity(intent); LoginActivity.this.finish(); - } else { + } else if(result.getMessage().equals("잘못된 접근")) { + Log.d("토큰 만료", "401"); + AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this); + builder.setTitle("알림") + .setMessage("일정 시간이 경과하여 로그아웃 되었습니다. 다시 로그인 해주세요. :)") + .setPositiveButton("확인", null) + .create() + .show(); + } else { AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this); builder.setTitle("알림") .setMessage("아이디 혹은 비밀번호 오류입니다.") diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/login/LoginFormState.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/login/LoginFormState.java new file mode 100644 index 0000000..5b81c18 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/login/LoginFormState.java @@ -0,0 +1,60 @@ +package com.mnchatbot.myapplication.ui.login; + + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Data validation state of the login form. + * 로그인 양식의 데이터 유효성 검사 상태입니다. + */ +class LoginFormState { + private String email; + private String password; + + //로그인 폼 상태가 유효한가 + public boolean isEmailValid() { + if (email == null || !email.contains("@")) { + return false; + } else { + return !email.trim().isEmpty(); + } + } + + // A placeholder password validation check + public boolean isPasswordValid() { + // 비밀번호 유효성 검사식1 : 숫자, 특수문자가 포함되어야 한다. + String val_symbol = "([0-9].*[!,@,#,^,&,*,(,)])|([!,@,#,^,&,*,(,)].*[0-9])"; + // 비밀번호 유효성 검사식2 : 영문자 대소문자가 적어도 하나씩은 포함되어야 한다. + String val_alpha = "([a-z].*[A-Z])|([A-Z].*[a-z])"; + // 정규표현식 컴파일 + Pattern pattern_symbol = Pattern.compile(val_symbol); + Pattern pattern_alpha = Pattern.compile(val_alpha); + + if (password == null) { + return false; + } + + Matcher matcher_symbol = pattern_symbol.matcher(password); + Matcher matcher_alpha = pattern_alpha.matcher(password); + + if (!matcher_symbol.find() || !matcher_alpha.find()) { + return false; + } + + return password.trim().length() > 7; + } + + public boolean isValidData() { + return isPasswordValid() && isEmailValid(); + } + + public void setEmail(String email) { + this.email = email; + } + + public void setPassword(String password) { + this.password = password; + } + +} diff --git a/application/app/src/main/java/com/example/myapplication/ui/login/LoginRequest.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/login/LoginRequest.java similarity index 89% rename from application/app/src/main/java/com/example/myapplication/ui/login/LoginRequest.java rename to application/app/src/main/java/com/mnchatbot/myapplication/ui/login/LoginRequest.java index 9c32bf3..67e89fa 100644 --- a/application/app/src/main/java/com/example/myapplication/ui/login/LoginRequest.java +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/login/LoginRequest.java @@ -1,4 +1,4 @@ -package com.example.myapplication.ui.login; +package com.mnchatbot.myapplication.ui.login; import com.google.gson.annotations.SerializedName; diff --git a/application/app/src/main/java/com/example/myapplication/ui/login/LoginResponse.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/login/LoginResponse.java similarity index 71% rename from application/app/src/main/java/com/example/myapplication/ui/login/LoginResponse.java rename to application/app/src/main/java/com/mnchatbot/myapplication/ui/login/LoginResponse.java index 9ab7fb0..9764c7a 100644 --- a/application/app/src/main/java/com/example/myapplication/ui/login/LoginResponse.java +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/login/LoginResponse.java @@ -1,4 +1,4 @@ -package com.example.myapplication.ui.login; +package com.mnchatbot.myapplication.ui.login; import com.google.gson.annotations.SerializedName; @@ -9,6 +9,8 @@ public class LoginResponse { @SerializedName("responseMessage") private String message; + @SerializedName("data") + private String data; public int getStatusCode() { return statusCode; } @@ -16,4 +18,6 @@ public String getMessage() { return message; } + public String getData() { return data; } + } diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/mainPage/ChatbotResponse.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/mainPage/ChatbotResponse.java new file mode 100644 index 0000000..ca4186e --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/mainPage/ChatbotResponse.java @@ -0,0 +1,26 @@ +package com.mnchatbot.myapplication.ui.mainPage; + +import com.google.gson.annotations.SerializedName; + +public class ChatbotResponse { + @SerializedName("statusCode") + private int code; + + @SerializedName("responseMessage") + private String message; + + @SerializedName("data") + private int data; + + public int getCode() { + return code; + } + + public String getMessage() { + return message; + } + + public int getData() { + return data; + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/mainPage/ChatbotWeb.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/mainPage/ChatbotWeb.java new file mode 100644 index 0000000..00c2ec4 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/mainPage/ChatbotWeb.java @@ -0,0 +1,112 @@ +/* +[챗봇 화면] 웹뷰를 통해 반려동물 질병을 상담할 수 있음. +하단의 상담 내용 저장 버튼을 통해 저장 가능함.*/ + +package com.mnchatbot.myapplication.ui.mainPage; + +import static android.content.Context.MODE_PRIVATE; + +import android.app.AlertDialog; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebChromeClient; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.Button; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class ChatbotWeb extends Fragment { + + private String TAG = ChatbotWeb.class.getSimpleName(); + private WebView webView; + private Button btnSave; + private SharedPreferences pre, pre2; + + //서버통신 + public String getToken() { + pre = getActivity().getSharedPreferences("TOKEN", MODE_PRIVATE); + String token = pre.getString("TOKEN", null); + return token; + } + public int getpetSerial() { + pre2 = getActivity().getSharedPreferences("Serial", MODE_PRIVATE); + int petSerial = pre2.getInt("petSerial", 0); + return petSerial; + } + + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + ViewGroup rootview = (ViewGroup)inflater.inflate(R.layout.f_chatbot,container,false); + btnSave = rootview.findViewById(R.id.webBtnSave); + webView = rootview.findViewById(R.id.webview); + webView.setWebViewClient(new WebViewClient()); // 새 창 띄우기 않기 + webView.setWebChromeClient(new WebChromeClient()); + + webView.getSettings().setLoadWithOverviewMode(false); // WebView 화면크기에 맞추도록 설정 - setUseWideViewPort 와 같이 써야함 + webView.getSettings().setUseWideViewPort(false); // wide viewport 설정 - setLoadWithOverviewMode 와 같이 써야함 + + webView.getSettings().setSupportZoom(false); // 줌 설정 여부 + webView.getSettings().setBuiltInZoomControls(false); // 줌 확대/축소 버튼 여부 + + webView.getSettings().setJavaScriptEnabled(true); // 자바스크립트 사용여부 +// webview.addJavascriptInterface(new AndroidBridge(), "android"); + webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); // javascript가 window.open()을 사용할 수 있도록 설정 + webView.getSettings().setSupportMultipleWindows(true); // 멀티 윈도우 사용 여부 + + webView.getSettings().setDomStorageEnabled(true); // 로컬 스토리지 (localStorage) 사용여부 + + //웹 뷰 호출 + webView.loadUrl("http://43.200.87.239:8000"); + btnSave.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + SendInfo(); + } + }); + + return rootview; + } + + public void SendInfo() { + ServiceAPI ChatbotAPI = ServiceGenerator.createService(ServiceAPI.class, getToken()); + Call call = ChatbotAPI.addDiag(getpetSerial()); + + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + Toast.makeText(getActivity(), "저장되었습니다!", Toast.LENGTH_SHORT).show(); + Log.d("예상진단 저장", "성공"); + } else {Log.d("response 실패", "404");} + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/mainPage/HomeTutor.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/mainPage/HomeTutor.java new file mode 100644 index 0000000..d368ffc --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/mainPage/HomeTutor.java @@ -0,0 +1,64 @@ +/* +[튜토리얼 화면] 앱에 대한 소개와 하단 탭 기능별 설명을 보여줌.*/ + +package com.mnchatbot.myapplication.ui.mainPage; + +import android.content.Context; +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ImageView; + +import com.mnchatbot.myapplication.R; + +public class HomeTutor extends Fragment { + + MainActivity mainActivity; + private ImageView Img_tutor; + private Button btn_tutor; + + @Override + public void onAttach(Context context) { + super.onAttach(context); + mainActivity = (MainActivity)getActivity(); + } + + @Override + public void onDetach() { + super.onDetach(); + mainActivity = null; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + ViewGroup rootview = (ViewGroup)inflater.inflate(R.layout.a_home_main2,container,false); + + Img_tutor = rootview.findViewById(R.id.Img_tutor); + btn_tutor = rootview.findViewById(R.id.btn_tutor); + + btn_tutor.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Img_tutor.setImageResource(R.drawable.home_2); + } + }); + btn_tutor.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View view) { + Img_tutor.setImageResource(R.drawable.home_1); + return false; + } + }); + + return rootview; + } +} \ No newline at end of file diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/mainPage/MainActivity.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/mainPage/MainActivity.java new file mode 100644 index 0000000..b39ba6d --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/mainPage/MainActivity.java @@ -0,0 +1,243 @@ +/* +[메인화면] 튜토리얼/챗봇/문진표/예상진단/동물병원/질병백과 화면을 출력함. +상단 툴바를 통해 로그인, 펫 선택, 상담신청 내역 화면을 볼 수 있음.*/ + +package com.mnchatbot.myapplication.ui.mainPage; + +import android.app.AlertDialog; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.util.Log; +import android.view.Gravity; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageButton; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.drawerlayout.widget.DrawerLayout; + +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.dictionary.Fragment_Dictionary; +import com.mnchatbot.myapplication.ui.dictionary.Fragment_Dictionary_detail; +import com.mnchatbot.myapplication.ui.questionNaire.Fragment_Question; +import com.mnchatbot.myapplication.ui.questionNaire.Fragment_Question_detail; +import com.mnchatbot.myapplication.ui.questionNaire.Fragment_Question_detail2; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; +import com.mnchatbot.myapplication.ui.diagnosis.Fragment_diagnosis; +import com.mnchatbot.myapplication.ui.diagnosis.Fragment_diagnosis_detail; +import com.mnchatbot.myapplication.ui.history.HistoryActivity; +import com.mnchatbot.myapplication.ui.hospital.Fragment_hospital; +import com.mnchatbot.myapplication.ui.hospital.Fragment_hospital_detail; +import com.mnchatbot.myapplication.ui.login.LoginActivity; +import com.mnchatbot.myapplication.ui.petSelect.PetSelectActivity; +import com.mnchatbot.myapplication.ui.setting.PetProfileResponse; +import com.mnchatbot.myapplication.ui.setting.SettingActivity; +import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.google.android.material.navigation.NavigationView; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class MainActivity extends AppCompatActivity { + + private SharedPreferences pre, pre2; + PetProfileResponse.PetDataObject petdata; + + HomeTutor homeTutor; + + ChatbotWeb chatbotWeb; + Fragment_diagnosis diagnosis; + Fragment_diagnosis_detail diagnosis_detail; + Fragment_hospital hospital; + Fragment_hospital_detail hospital_detail; + Fragment_Dictionary dictionary; + Fragment_Dictionary_detail dictionary_detail; + Fragment_Question question; + Fragment_Question_detail question_detail; + Fragment_Question_detail2 question_detail2; + + //서버통신 + public String getToken() { + pre = getSharedPreferences("TOKEN", MODE_PRIVATE); + String token = pre.getString("TOKEN", null); + return token; + } + public int getpetSerial() { + pre2 = getSharedPreferences("Serial", MODE_PRIVATE); + int petSerial = pre2.getInt("petSerial", 0); + return petSerial; + } + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.a_home_main); + + homeTutor = new HomeTutor(); + chatbotWeb = new ChatbotWeb(); + diagnosis = new Fragment_diagnosis(); + diagnosis_detail = new Fragment_diagnosis_detail(); + hospital = new Fragment_hospital(); + hospital_detail = new Fragment_hospital_detail(); + dictionary = new Fragment_Dictionary(); + dictionary_detail = new Fragment_Dictionary_detail(); + question = new Fragment_Question(); + question_detail = new Fragment_Question_detail(); + question_detail2 = new Fragment_Question_detail2(); + + + //툴바 + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + getSupportActionBar().setTitle(0); + + ImageButton settingBtn = (ImageButton) findViewById(R.id.setting_btn); + ImageButton drawerBtn = (ImageButton) findViewById(R.id.toolbar_btn); + TextView drawerLogo = findViewById(R.id.toolbar_logo); + + + onChangeFragment(0); + + BottomNavigationView bottomNavigation = findViewById(R.id.bottom_navigation); + NavigationView Navigation = findViewById(R.id.drawer_navigation); + + bottomNavigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.tab_chatbot: + getSupportFragmentManager().beginTransaction().replace(R.id.container,chatbotWeb).commit(); + return true; + case R.id.tab_2: + getSupportFragmentManager().beginTransaction().replace(R.id.container, question).commit(); + return true; + + case R.id.tab_3: + getSupportFragmentManager().beginTransaction().replace(R.id.container, diagnosis).commit(); + Toast.makeText(MainActivity.this, "챗봇 상담을 진행해주세요.", Toast.LENGTH_SHORT).show(); + return true; + case R.id.tab_4: + getSupportFragmentManager().beginTransaction().replace(R.id.container,hospital).commit(); + return true; + case R.id.tab_5: + getSupportFragmentManager().beginTransaction().replace(R.id.container, dictionary).commit(); + return true; + } + return false; + } + }); + + // 툴바 드로어 버튼 눌렀을 때 동작 + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer); + + //로고 클릭하면 홈화면으로 이동. + drawerLogo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getSupportFragmentManager().beginTransaction().replace(R.id.container, homeTutor).commit(); + } + }); + drawerBtn.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View view){ + if(!drawer.isDrawerOpen(Gravity.LEFT)) {drawer.openDrawer(Gravity.LEFT); callpetName();} + else drawer. closeDrawer(Gravity.LEFT); + } + }); + settingBtn.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View view){ + Intent intent = new Intent(getApplicationContext(), SettingActivity.class); + startActivity(intent); + } + }); + + Navigation.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem item) { + onOptionsItemSelected(item); + Log.d("item", item.toString()); + return false; + } + }); + + } + + public void onChangeFragment(int index){ + if(index == 0){ + getSupportFragmentManager().beginTransaction().replace(R.id.container, homeTutor).commit(); + }else if(index ==1){ + getSupportFragmentManager().beginTransaction().replace(R.id.container,chatbotWeb).commit(); + }else if(index ==2){ + getSupportFragmentManager().beginTransaction().replace(R.id.container,question).commit(); + }else if(index ==3){ + getSupportFragmentManager().beginTransaction().replace(R.id.container,diagnosis).commit(); + }else if(index ==4){ + getSupportFragmentManager().beginTransaction().replace(R.id.container,hospital).commit(); + }else if(index ==5){ + getSupportFragmentManager().beginTransaction().replace(R.id.container,dictionary).commit(); + } + else if(index ==6){ + getSupportFragmentManager().beginTransaction().replace(R.id.container,diagnosis_detail).commit(); + }else if(index ==7){ + getSupportFragmentManager().beginTransaction().replace(R.id.container,hospital_detail).commit(); + }else if(index ==8){ + getSupportFragmentManager().beginTransaction().replace(R.id.container,dictionary_detail).commit(); + }else if(index ==9){ + getSupportFragmentManager().beginTransaction().replace(R.id.container,question_detail).commit(); + }else if(index ==10){ + getSupportFragmentManager().beginTransaction().replace(R.id.container,question_detail2).commit(); + } + } + + public void callpetName() { + TextView petName = (TextView) findViewById(R.id.petName); + + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + service.getPetinfo(getpetSerial()).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + petdata = response.body().data; + petName.setText(petdata.getPetName()); + } else {Log.d("response 실패", "404");} + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + Log.d("~", t.toString()); + } + }); + } + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()){ + case R.id.logout: + Intent intent = new Intent(getApplicationContext(), LoginActivity.class); + startActivity(intent); + return true; + case R.id.petSelect: + Intent intent2 = new Intent(getApplicationContext(), PetSelectActivity.class); + startActivity(intent2); + return true; + case R.id.showHistory: + Intent intent3 = new Intent(getApplicationContext(), HistoryActivity.class); + startActivity(intent3); + return true; + } + return false; + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/petSelect/AddPetActivity.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/petSelect/AddPetActivity.java new file mode 100644 index 0000000..176c2d1 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/petSelect/AddPetActivity.java @@ -0,0 +1,208 @@ +/* +[펫 추가 화면] 새로운 펫 추가. +축종, 품종, 이름, 나이, 성별, 중성화여부의 내용을 설정함. */ + +package com.mnchatbot.myapplication.ui.petSelect; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.NumberPicker; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.appcompat.app.AppCompatActivity; + +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; +import com.mnchatbot.myapplication.ui.setting.PetProfileResponse; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.button.MaterialButtonToggleGroup; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class AddPetActivity extends AppCompatActivity { + private MaterialButtonToggleGroup Gendertoggle, Neuteringtoggle; + private MaterialButton man, woman, NeuteringYes, NeuteringNo; + private String CATDOG = "DOG"; + private ImageView petprofile; + private TextView petAge; + private EditText petBreed,petNickName; + private Button btnAge, btnSave, btnCancel, selectCatButton, selectDogButton; + + int count = 0; + private SharedPreferences preferences; + + //서버통신 + public String getToken() { + preferences = getSharedPreferences("TOKEN", MODE_PRIVATE); + String token = preferences.getString("TOKEN", null); + return token; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.a_newpetprofile); + + petprofile = findViewById(R.id.pic); + btnAge = findViewById(R.id.btnAge); + btnSave = findViewById(R.id.btnAddPetSave); + btnCancel = findViewById(R.id.btnAddPetCancel); + selectCatButton = findViewById(R.id.selectCat); + selectDogButton = findViewById(R.id.selectDog); + + Gendertoggle = findViewById(R.id.Gendertoggle); + Neuteringtoggle = findViewById(R.id.Neuteringtoggle); + man = Gendertoggle.findViewById(R.id.man); + woman = Gendertoggle.findViewById(R.id.woman); + NeuteringYes = Neuteringtoggle.findViewById(R.id.Neuteringyes); + NeuteringNo = Neuteringtoggle.findViewById(R.id.Neuteringno); + + petBreed = findViewById(R.id.petbreed); + petNickName = findViewById(R.id.petNickname); + petAge = findViewById(R.id.petAge); + + + btnSave.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View view){ + if ( petNickName.getText().toString().isEmpty() || petAge.getText().toString().isEmpty() || petBreed.getText().toString().isEmpty() + || (man.isChecked() == false && woman.isChecked()==false) + || (NeuteringYes.isChecked() == false && NeuteringNo.isChecked()==false) + || (count == 0)){ + Toast.makeText(AddPetActivity.this, "입력하지 않은 항목이 있습니다.", Toast.LENGTH_SHORT).show(); + } else { + AlertDialog.Builder builder = new AlertDialog.Builder(AddPetActivity.this); + builder.setTitle("알림") + .setMessage("개/고양이 선택 정보는 바꿀 수 없습니다. 확인하셨습니까?") + .setPositiveButton("확인", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int i) { + setPetinfo(); + } + }) + .setNegativeButton("취소", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int i) { + dialog.dismiss(); + } + }) + .create() + .show(); + } + } + }); + btnCancel.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View view){ + Intent intent = new Intent(getApplicationContext(), PetSelectActivity.class); + startActivity(intent); + } + }); + + //나이 변경 + btnAge.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + AlertDialog.Builder AgePicker = new AlertDialog.Builder(AddPetActivity.this); + + AgePicker.setTitle("나이변경"); + final NumberPicker AP = new NumberPicker(AddPetActivity.this); + AgePicker.setView(AP); + + AP.setMinValue(0); + AP.setMaxValue(30); + AP.setWrapSelectorWheel(false); + AP.setValue(0); + + AP.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + } + }); + + AgePicker.setPositiveButton("설정", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int i) { + petAge.setText(String.valueOf(AP.getValue())); + dialog.dismiss(); + } + }); + AgePicker.setNegativeButton("취소", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int i) { + dialog.dismiss(); + } + }); + AgePicker.show(); + } + }); + //개/고양이 버튼 클릭 시에 해당 사진으로 이미지뷰 변경 + selectDogButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + petprofile.setImageResource(R.drawable.dog2); + CATDOG = "DOG"; + count = 1; + } + }); + selectCatButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + petprofile.setImageResource(R.drawable.cat2); + CATDOG = "CAT"; + count = 2; + } + }); + + } + //반려동물 정보 설정 + public void setPetinfo(){ + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + + String Species = CATDOG; + String Name = petNickName.getText().toString().trim(); + int Age = Integer.parseInt(petAge.getText().toString()); + String Breed = petBreed.getText().toString().trim(); + String Gender = null; + String Neutering = null; + if (man.isChecked()) { Gender = "MALE"; + } else if (woman.isChecked()) { Gender = "FEMALE";} + + if (NeuteringYes.isChecked()) { Neutering = "NEUTER"; + } else if (NeuteringNo.isChecked()) { Neutering = "NOTNEUTER"; } + + + Petinfo petinfo = new Petinfo(Species, Name, Age, Breed, Gender, Neutering); + service.setPetinfo(petinfo).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + Toast.makeText(getApplicationContext(),"등록되었습니다.", Toast.LENGTH_SHORT).show(); + } else {Log.d("response 실패", "404");} + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(AddPetActivity.this); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + } +} \ No newline at end of file diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/petSelect/PetSelectActivity.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/petSelect/PetSelectActivity.java new file mode 100644 index 0000000..c7bb893 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/petSelect/PetSelectActivity.java @@ -0,0 +1,139 @@ +/* +[펫 선택 화면] 등록된 펫 목록을 불러오고, 원하는 펫을 선택함. */ + +package com.mnchatbot.myapplication.ui.petSelect; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.Toast; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; +import com.mnchatbot.myapplication.ui.mainPage.MainActivity; + +import java.util.ArrayList; +import java.util.List; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class PetSelectActivity extends AppCompatActivity { + + private Context context; + + private RecyclerView mRecyclerView; + private ArrayList mList; + private RecyclerViewAdapter mRecyclerViewAdapter; + petListResponse dataList; + List petdata; + + private SharedPreferences pre; + + //서버통신 + public String getToken() { + pre = getSharedPreferences("TOKEN", MODE_PRIVATE); + String token = pre.getString("TOKEN", null); + return token; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.a_pet_main); + + mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView); + mList = new ArrayList<>(); + + //서버에 등록된 반려동물 목록 불러오기 + callPetList(); + + mRecyclerViewAdapter = new RecyclerViewAdapter(mList, context); + mRecyclerView.setAdapter(mRecyclerViewAdapter); + mRecyclerView.setLayoutManager(new LinearLayoutManager(this, RecyclerView.HORIZONTAL, false)); + + // 리사이클러뷰 안의 아이템(반려동물 아이콘) 클릭시 메인화면으로 이동 + mRecyclerViewAdapter.setOnItemClickListener(new RecyclerViewAdapter.OnItemClickListener() { + @Override + public void onItemClick(int pos) { + Intent intent = new Intent(getApplicationContext(), MainActivity.class); + startActivity(intent); + Toast.makeText(getApplicationContext(), "안녕!" + mList.get(pos).getMainText(), Toast.LENGTH_SHORT).show(); + } + }); + + // 반려동물 추가 버튼 클릭 + Button addButton = (Button) findViewById(R.id.addButton); + addButton.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View view){ + Intent intent = new Intent(getApplicationContext(), AddPetActivity.class); + startActivity(intent); + } + + }); + + } + + // 리사이클러뷰에 데이터추가 + public void addItem(String mainText, String imgName, int petSerial){ + RecyclerViewItem item = new RecyclerViewItem(); + item.setImgName(imgName); + item.setMainText(mainText); + item.setPetSerial(petSerial); + mList.add(item); + } + + //등록한 반려동물 목록 보기 + public void callPetList(){ + petdata = new ArrayList<>(); + ServiceAPI petListAPI = ServiceGenerator.createService(ServiceAPI.class, getToken()); + + Call call = petListAPI.setPetlist(); + Log.d("petList", "hi"); + + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + dataList = response.body(); + if (dataList.data == null ) { Toast.makeText(PetSelectActivity.this, "펫 등록 해주세요 :)", Toast.LENGTH_SHORT).show(); } + else{ + petdata = dataList.data; + for(int i=0; i< petdata.size(); i++) { + String a = petdata.get(i).getPetName(); + String b = petdata.get(i).getpetSpecies(); + int c = petdata.get(i).getpetSerial(); + addItem(a, b, c); + mRecyclerViewAdapter.notifyDataSetChanged(); + } + Log.d("petList", "200"); + } + } else {Log.d("response 실패", "404");} + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(PetSelectActivity.this); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + } +} \ No newline at end of file diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/petSelect/Petinfo.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/petSelect/Petinfo.java new file mode 100644 index 0000000..a0d5f68 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/petSelect/Petinfo.java @@ -0,0 +1,35 @@ +package com.mnchatbot.myapplication.ui.petSelect; + +import com.google.gson.annotations.SerializedName; + +public class Petinfo { + //축종 + @SerializedName("petSpecies") + public String petSpecies; + + @SerializedName("petName") + public String petName; + + //품종 + @SerializedName("petBreed") + public String petBreed; + + @SerializedName("petAge") + public int petAge; + + @SerializedName("petGender") + public String petGender; + + @SerializedName("petNeutralization") + public String petNeutering; + + public Petinfo(String petSpecies, String petName, int petAge, String petBreed, String petGender, String petNeutering) { + this.petSpecies = petSpecies; + this.petName = petName; + this.petAge = petAge; + this.petBreed = petBreed; + this.petGender = petGender; + this.petNeutering = petNeutering; + + } +} diff --git a/application/app/src/main/java/com/example/myapplication/ui/petSelect/RecyclerViewAdapter.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/petSelect/RecyclerViewAdapter.java similarity index 57% rename from application/app/src/main/java/com/example/myapplication/ui/petSelect/RecyclerViewAdapter.java rename to application/app/src/main/java/com/mnchatbot/myapplication/ui/petSelect/RecyclerViewAdapter.java index aed9ec9..b3c5cb1 100644 --- a/application/app/src/main/java/com/example/myapplication/ui/petSelect/RecyclerViewAdapter.java +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/petSelect/RecyclerViewAdapter.java @@ -1,32 +1,42 @@ -package com.example.myapplication.ui.petSelect; +package com.mnchatbot.myapplication.ui.petSelect; import android.content.Context; +import android.content.SharedPreferences; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; -import com.example.myapplication.R; +import com.mnchatbot.myapplication.R; + +import org.json.JSONArray; import java.util.ArrayList; public class RecyclerViewAdapter extends RecyclerView.Adapter { + private Context context; + private SharedPreferences preferences; + private ArrayList mList; + + public RecyclerViewAdapter(ArrayList mList, Context context) { + this.mList = mList; this.context = context; + } + public class ViewHolder extends RecyclerView.ViewHolder { ImageView imgView_item; - TextView txt_main; - TextView txt_sub; - + TextView petNickName; public ViewHolder(@NonNull View itemView) { super(itemView); imgView_item = (ImageView) itemView.findViewById(R.id.imgView_item); - txt_main = (TextView) itemView.findViewById(R.id.txt_main); - txt_sub = (TextView) itemView.findViewById(R.id.txt_sub); + petNickName = (TextView) itemView.findViewById(R.id.petName); imgView_item.setOnClickListener(new View.OnClickListener() { @Override @@ -35,6 +45,26 @@ public void onClick(View v) { if (position != RecyclerView.NO_POSITION) { if (onItemClickListener != null) { onItemClickListener.onItemClick(position); + RecyclerViewItem item = mList.get(position); + int Serial = item.getPetSerial(); + Log.d("petSerial", String.valueOf(Serial)); + + //간단한 data의 경우 사용. 앱 폴더 내 파일로 저장되는 형태. + JSONArray a = new JSONArray(); + preferences = context.getSharedPreferences("Serial", Context.MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt("petSerial", Serial); + //펫 리스트(arraylist), string화 하여 넘기기 + for (int i = 0; i < mList.size(); i++) { + a.put(mList.get(i)); + } + if (!mList.isEmpty()) { + editor.putString("key", a.toString()); + } else { + editor.putString("key", null); + } + editor.commit(); + Log.d("!", String.valueOf(preferences.getInt("petSerial", 0))); } } } @@ -56,20 +86,14 @@ public boolean onLongClick(View v) { } } - private ArrayList mList = null; - - public RecyclerViewAdapter(ArrayList mList) { - this.mList = mList; - } - // 아이템 뷰를 위한 뷰홀더 객체를 생성하여 리턴 @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - Context context = parent.getContext(); + context = parent.getContext(); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - View view = inflater.inflate(R.layout.pet_activity_recycler_item, parent, false); + View view = inflater.inflate(R.layout.a_pet_item, parent, false); RecyclerViewAdapter.ViewHolder vh = new RecyclerViewAdapter.ViewHolder(view); return vh; } @@ -79,13 +103,15 @@ public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public void onBindViewHolder(@NonNull RecyclerViewAdapter.ViewHolder holder, int position) { RecyclerViewItem item = mList.get(position); - if(item.getImgName()=="cat") // 아이템의 이미지 이름이 cat이면 고양이 사진으로 설정 - holder.imgView_item.setImageResource(R.drawable.cat); - else - holder.imgView_item.setImageResource(R.drawable.dog); - - holder.txt_main.setText(item.getMainText()); - holder.txt_sub.setText(item.getSubText()); + if (item.getImgName() != null) { + // 아이템의 이미지 이름이 cat이면 고양이 사진으로 설정 + if (item.getImgName().equals("CAT")) { + holder.imgView_item.setImageResource(R.drawable.cat); + } else { + holder.imgView_item.setImageResource(R.drawable.dog); + } + holder.petNickName.setText(item.getMainText());} + else {Toast.makeText(context, "이미지 설정을 해주세요.", Toast.LENGTH_SHORT).show();} } @Override diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/petSelect/RecyclerViewItem.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/petSelect/RecyclerViewItem.java new file mode 100644 index 0000000..cec8140 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/petSelect/RecyclerViewItem.java @@ -0,0 +1,32 @@ +package com.mnchatbot.myapplication.ui.petSelect; + +public class RecyclerViewItem { + private String mpetSpecies; + private String mpetName; + private int mpetSerial; + + public String getImgName() { + return mpetSpecies; + } + + public void setImgName(String imgName) { + this.mpetSpecies = imgName; + } + + public String getMainText() { + return mpetName; + } + + public void setMainText(String mainText) { + this.mpetName = mainText; + } + + public int getPetSerial() { + return mpetSerial; + } + + public void setPetSerial(int petSerial) { + this.mpetSerial = petSerial; + } + +} \ No newline at end of file diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/petSelect/petListResponse.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/petSelect/petListResponse.java new file mode 100644 index 0000000..0795843 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/petSelect/petListResponse.java @@ -0,0 +1,50 @@ +package com.mnchatbot.myapplication.ui.petSelect; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class petListResponse { + @SerializedName("statusCode") + private int code; + + @SerializedName("responseMessage") + private String message; + + @SerializedName("data") + public List data; + + public int getCode() { + return code; + } + + public String getMessage() { + return message; + } + + @Override + public String toString() { + return "ProfileResponse{" + "data=" + data+ "}"; + } + + public class PetDataList { + //반려동물 + @SerializedName("petSerial") + private int petSerial; + @SerializedName("petSpecies") + private String petSpecies; + @SerializedName("petName") + private String petName; + + public int getpetSerial() { + return petSerial; + } + public String getpetSpecies() { + return petSpecies; + } + public String getPetName() { + return petName; + } + } + +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/Fragment_Question.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/Fragment_Question.java new file mode 100644 index 0000000..0e2dfea --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/Fragment_Question.java @@ -0,0 +1,199 @@ +/* +[문진표 목록 화면] 등록된 문진표 목록을 불러오고, 원하는 문진표를 선택하여 볼 수 있음. */ + +package com.mnchatbot.myapplication.ui.questionNaire; + +import static android.content.Context.MODE_PRIVATE; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; +import com.mnchatbot.myapplication.ui.mainPage.MainActivity; +import com.google.android.material.floatingactionbutton.FloatingActionButton; + +import java.util.ArrayList; +import java.util.List; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class Fragment_Question extends Fragment { + + MainActivity mainActivity; + + private RecyclerView mRecyclerView; + private ArrayList mList; + private QuestionAdapter mAdapter; + private FloatingActionButton btnAdd; + + List Qndata; + private SharedPreferences pre, pre2; + + @Override + public void onAttach(Context context) { + super.onAttach(context); + mainActivity = (MainActivity)getActivity(); + } + + @Override + public void onDetach() { + super.onDetach(); + mainActivity = null; + } + + //서버통신 + public String getToken() { + pre = getActivity().getSharedPreferences("TOKEN", MODE_PRIVATE); + String token = pre.getString("TOKEN", null); + return token; + } + public int getpetSerial() { + pre2 = getActivity().getSharedPreferences("Serial", MODE_PRIVATE); + int petSerial = pre2.getInt("petSerial", 0); + return petSerial; + } + public int getmedicalSerial() { + pre2 = getActivity().getSharedPreferences("Serial", MODE_PRIVATE); + int medicalSerial = pre2.getInt("medicalSerial", 0); + return medicalSerial; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + ViewGroup rootview = (ViewGroup)inflater.inflate(R.layout.f_question,container,false); + mRecyclerView = rootview.findViewById(R.id.recyclerView); + btnAdd = rootview.findViewById(R.id.btnAdd); + + mList = new ArrayList<>(); + + mAdapter = new QuestionAdapter(mList, getActivity()); + mRecyclerView.setAdapter(mAdapter); + + getQuestion(); + + mAdapter.setOnItemClickListener(new QuestionAdapter.OnItemClickListener() { + @Override + public void onItemClick(int pos) { + mainActivity.onChangeFragment(10); + } + }); + mAdapter.setOnLongItemClickListener(new QuestionAdapter.OnLongItemClickListener() { + @Override + public void onLongItemClick(int pos) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("문진표 삭제") + .setMessage("정말로 삭제하시겠습니까?") + .setPositiveButton("아니오", null) + .setNegativeButton("예", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + DeleteQuestion(pos); + } + }) + .create() + .show(); + } + }); + + btnAdd.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + mainActivity.onChangeFragment(9); + } + }); + + //최신 등록순으로 정렬 + LinearLayoutManager manger = new LinearLayoutManager(getActivity()); + manger.setReverseLayout(true); + manger.setStackFromEnd(true); + mRecyclerView.setLayoutManager(manger); + return rootview; + } + // 리사이클러뷰에 데이터추가 + public void addItem(int MedicalSerial, String QuestionName, String Date){ + QuestionViewItem item = new QuestionViewItem(); + item.setMedicalSerial(MedicalSerial); + item.setQuestionName(QuestionName); + item.setQuestionDate(Date); + mList.add(item); + } + + //문진표 목록 + public void getQuestion() { + Qndata = new ArrayList<>(); + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + service.getQnList(getpetSerial()).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + Qndata = response.body().data; + if (Qndata == null) { + {Log.d("문진표", "데이터 없음");} + } else { + for(int i=0; i< Qndata.size(); i++) { + int mSerial = Qndata.get(i).getMedicalFormSerial(); + String Name = Qndata.get(i).getQnName(); + String ID = Qndata.get(i).getQnDate(); + addItem(mSerial, Name, ID); + mAdapter.notifyDataSetChanged(); + }} + } else {Log.d("response 실패", "404");} + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + + + } + + //문진표 삭제 + private void DeleteQuestion(int pos) { + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + service.deleteQuestion(getmedicalSerial()).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + QuestionViewItem item = mList.get(pos); + mList.remove(item); + mAdapter.notifyDataSetChanged(); + } else {Log.d("response 실패", "404");} + } + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/Fragment_Question_detail.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/Fragment_Question_detail.java new file mode 100644 index 0000000..ed208e7 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/Fragment_Question_detail.java @@ -0,0 +1,242 @@ +/* +[문진표 추가 화면] 새로운 문진표 추가. +문진표 제목, 사유, 기저질환, 약 특이사항, 수술여부, 운동여부, 기타 사항에 대해 입력받음. */ + +package com.mnchatbot.myapplication.ui.questionNaire; + +import static android.content.Context.MODE_PRIVATE; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.EditText; +import android.widget.RadioGroup; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.petSelect.AddPetActivity; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; +import com.mnchatbot.myapplication.ui.mainPage.MainActivity; + +import java.text.SimpleDateFormat; +import java.util.Date; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class Fragment_Question_detail extends Fragment { + + MainActivity mainActivity; + private EditText q_Name, q_reason, q_medichine, q_etc; + private TextView q_Date, q_time; + private Spinner spn_Disease; + private ArrayAdapter Disease_Adapter; + private String DiseaseName, etc; + private RadioGroup q_radioGroup1, q_radioGroup2, q_radioGroup3; + private boolean radio1, radio2, radio3; + private Button btn_back, btn_save; + DateTime date; + + private SharedPreferences pre, pre2; + + @Override + public void onAttach(Context context) { + super.onAttach(context); + mainActivity = (MainActivity) getActivity(); + } + + @Override + public void onDetach() { + super.onDetach(); + mainActivity = null; + } + + //서버통신 + public String getToken() { + pre = getActivity().getSharedPreferences("TOKEN", MODE_PRIVATE); + String token = pre.getString("TOKEN", null); + return token; + } + public int getpetSerial() { + pre2 = getActivity().getSharedPreferences("Serial", MODE_PRIVATE); + int petSerial = pre2.getInt("petSerial", 0); + return petSerial; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + ViewGroup rootview = (ViewGroup)inflater.inflate(R.layout.f_question_detail,container,false); + q_Name = rootview.findViewById(R.id.q_Name); + q_reason = rootview.findViewById(R.id.q_reson); + q_medichine = rootview.findViewById(R.id.q_medichine); + q_etc = rootview.findViewById(R.id.q_etc); + q_Date = rootview.findViewById(R.id.q_Date); + q_time = rootview.findViewById(R.id.q_time); + spn_Disease = rootview.findViewById(R.id.spn_Disease); + q_radioGroup1 = rootview.findViewById(R.id.q_radioGroup1); + q_radioGroup2 = rootview.findViewById(R.id.q_radioGroup2); + q_radioGroup3 = rootview.findViewById(R.id.q_radioGroup3); + btn_back = rootview.findViewById(R.id.btn_back); + btn_save = rootview.findViewById(R.id.btn_save); + + + date = new DateTime(); + q_Date.setText(date.getDate()); + q_time.setText(date.getTime()); + + Disease_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.기저질환, R.layout.row_spinner); + Disease_Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spn_Disease.setAdapter(Disease_Adapter); + spn_Disease.setSelection(4); + + spn_Disease.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + DiseaseName = Disease_Adapter.getItem(i).toString(); + } + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + + q_radioGroup1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup radioGroup, int i) { + switch (i) { + case R.id.q_radioYes1: + radio1 = true; + q_medichine.setVisibility(View.VISIBLE); + break; + case R.id.q_radioNo1: + radio1 = false; + q_medichine.setVisibility(View.GONE); + break; + } + } + }); + + q_radioGroup2.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup radioGroup, int i) { + switch (i) { + case R.id.q_radioYes2: + radio2 = true; + break; + case R.id.q_radioNo2: + radio2 = false; + break; + } + } + }); + q_radioGroup3.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup radioGroup, int i) { + switch (i) { + case R.id.q_radioYes3: + radio3 = true; + break; + case R.id.q_radioNo3: + radio3 = false; + break; + } + } + }); + + + btn_save.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if ( q_Name.getText().toString().isEmpty() || q_reason.getText().toString().isEmpty() + || (q_radioGroup1.getCheckedRadioButtonId() == -1) + || (q_radioGroup2.getCheckedRadioButtonId() == -1) + || (q_radioGroup3.getCheckedRadioButtonId() == -1)){ + Toast.makeText(getActivity(), "입력하지 않은 항목이 있습니다.", Toast.LENGTH_SHORT).show(); + } else {addQuestion();} + } + }); + + btn_back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + mainActivity.onChangeFragment(2); + } + }); + + return rootview; + } + + public class DateTime { + long now = System.currentTimeMillis(); + Date date = new Date(now); + + public String getDate() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + String getDate = sdf.format(date); + return getDate; + } + + public String getTime() { + SimpleDateFormat sdT= new SimpleDateFormat("hh:mm"); + String getTime = sdT.format(date); + return getTime; + } + } + + public void addQuestion() { + String Qname = q_Name.getText().toString(); + String Date = date.getDate(); + String Time = date.getTime(); + String Qreason = q_reason.getText().toString(); + String Disease = DiseaseName; + boolean Radio1 = radio1; + boolean Radio2 = radio2; + boolean Radio3 = radio3; + String Qmedichine = q_medichine.getText().toString(); + String Qetc = null; etc = q_etc.getText().toString(); + if (etc.getBytes().length<=0) {Qetc = "특이사항 없음";} + else if (etc.getBytes().length>0){Qetc = q_etc.getText().toString(); } + + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + + Question questionNaire = new Question(getpetSerial(), Qname, Date, Time, Qreason, Disease, Radio1, Qmedichine, Radio2, Radio3, Qetc); + + service.setQuestion(questionNaire).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + Toast.makeText(getActivity(), "저장되었습니다.", Toast.LENGTH_SHORT).show(); + mainActivity.onChangeFragment(2); + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + + } + +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/Fragment_Question_detail2.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/Fragment_Question_detail2.java new file mode 100644 index 0000000..7588527 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/Fragment_Question_detail2.java @@ -0,0 +1,266 @@ +/* +[문진표 수정 화면] 기존 문진표 내용 수정. +문진표 제목, 사유, 기저질환, 약 특이사항, 수술여부, 운동여부, 기타 사항에 대해 수정할 수 있음. */ + +package com.mnchatbot.myapplication.ui.questionNaire; + +import static android.content.Context.MODE_PRIVATE; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.EditText; +import android.widget.RadioGroup; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; +import com.mnchatbot.myapplication.ui.mainPage.MainActivity; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class Fragment_Question_detail2 extends Fragment { + MainActivity mainActivity; + private EditText q_Name, q_reason, q_medichine, q_etc; + private TextView q_Date, q_time; + private Spinner spn_Disease; + private ArrayAdapter Disease_Adapter; + private String DiseaseName, etc; + private RadioGroup q_radioGroup1, q_radioGroup2, q_radioGroup3; + private boolean radio1, radio2, radio3; + private Button btn_back, btn_save; + + QnResponse.QnData Qndata; + private SharedPreferences pre, pre2; + + @Override + public void onAttach(Context context) { + super.onAttach(context); + mainActivity = (MainActivity) getActivity(); + } + + @Override + public void onDetach() { + super.onDetach(); + mainActivity = null; + } + + //서버통신 + public String getToken() { + pre = getActivity().getSharedPreferences("TOKEN", MODE_PRIVATE); + String token = pre.getString("TOKEN", null); + return token; + } + public int getmedicalSerial() { + pre2 = getActivity().getSharedPreferences("Serial", MODE_PRIVATE); + int medicalSerial = pre2.getInt("medicalSerial", 0); + return medicalSerial; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + ViewGroup rootview = (ViewGroup)inflater.inflate(R.layout.f_question_detail,container,false); + q_Name = rootview.findViewById(R.id.q_Name); + q_reason = rootview.findViewById(R.id.q_reson); + q_medichine = rootview.findViewById(R.id.q_medichine); + q_etc = rootview.findViewById(R.id.q_etc); + q_Date = rootview.findViewById(R.id.q_Date); + q_time = rootview.findViewById(R.id.q_time); + spn_Disease = rootview.findViewById(R.id.spn_Disease); + q_radioGroup1 = rootview.findViewById(R.id.q_radioGroup1); + q_radioGroup2 = rootview.findViewById(R.id.q_radioGroup2); + q_radioGroup3 = rootview.findViewById(R.id.q_radioGroup3); + btn_back = rootview.findViewById(R.id.btn_back); + btn_save = rootview.findViewById(R.id.btn_save); + + callQuestion(); + + Disease_Adapter = ArrayAdapter.createFromResource(getActivity(), + R.array.기저질환, R.layout.row_spinner); + Disease_Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spn_Disease.setAdapter(Disease_Adapter); + + spn_Disease.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + DiseaseName = Disease_Adapter.getItem(i).toString(); + } + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + + q_radioGroup1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup radioGroup, int i) { + switch (i) { + case R.id.q_radioYes1: + radio1 = true; + q_medichine.setVisibility(View.VISIBLE); + break; + case R.id.q_radioNo1: + radio1 = false; + q_medichine.setVisibility(View.GONE); + break; + } + } + }); + + q_radioGroup2.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup radioGroup, int i) { + switch (i) { + case R.id.q_radioYes2: + radio2 = true; + break; + case R.id.q_radioNo2: + radio2 = false; + break; + } + } + }); + q_radioGroup3.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup radioGroup, int i) { + switch (i) { + case R.id.q_radioYes3: + radio3 = true; + break; + case R.id.q_radioNo3: + radio3 = false; + break; + } + } + }); + + btn_save.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + updatePetPost(); + mainActivity.onChangeFragment(2); + Toast.makeText(getActivity(), "수정되었습니다.", Toast.LENGTH_SHORT).show(); + } + }); + btn_back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + mainActivity.onChangeFragment(2); + } + }); + + return rootview; + } + + + public void callQuestion() { + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + service.getQuestion(getmedicalSerial()).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + Qndata = response.body().data; + q_Name.setText(Qndata.getQnName()); + q_Date.setText(Qndata.getQnDate().substring(0, 10)); + Log.d("날짜", Qndata.getQnDate()); + q_time.setText(Qndata.getQnTime().substring(0, 5)); + q_reason.setText(Qndata.getQnReason()); + switch (Qndata.getQnDisease()) { + case "내분비질환": + spn_Disease.setSelection(0); + break; + case "피부질환": + spn_Disease.setSelection(1); + break; + case "근골격계질환": + spn_Disease.setSelection(2); + break; + case "순환기질환": + spn_Disease.setSelection(3); + break; + case "없음": + spn_Disease.setSelection(4); + break; + } + if (Qndata.getQnMedichine()) { + q_radioGroup1.check(R.id.q_radioYes1); + q_medichine.setVisibility(View.VISIBLE); + q_medichine.setText(Qndata.getQnMedichine2()); + } else if (Qndata.getQnMedichine() == false){q_radioGroup1.check(R.id.q_radioNo1);} + if (Qndata.getQnSurgery()) {q_radioGroup2.check(R.id.q_radioYes2);} + else if (Qndata.getQnSurgery() == false) {q_radioGroup2.check(R.id.q_radioNo2);} + if (Qndata.getQnExercise()) {q_radioGroup3.check(R.id.q_radioYes3);} + else if (Qndata.getQnExercise() == false) {q_radioGroup3.check(R.id.q_radioNo3);} + + q_etc.setText(Qndata.getQnEtc()); + } else {Log.d("response 실패", "404");} + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + + } + + //문진표 수정 + public void updatePetPost(){ + String Qname = q_Name.getText().toString(); + String Qreason = q_reason.getText().toString(); + String Disease = DiseaseName; + boolean Radio1 = radio1; + boolean Radio2 = radio2; + boolean Radio3 = radio3; + String Qmedichine = q_medichine.getText().toString(); + String Qetc = null; etc = q_etc.getText().toString(); + if (etc.getBytes().length<=0) {Qetc = "특이사항 없음";} + else if (etc.getBytes().length>0){Qetc = q_etc.getText().toString(); } + + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + QuestionEdit questionNaire = new QuestionEdit(getmedicalSerial(), Qname, Qreason, Disease, Radio1, Qmedichine, Radio2, Radio3, Qetc); + + service.EditQuestion(questionNaire).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + Log.d("response 성공", "200"); + } else {Log.d("response 실패", "404");} + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/QnListResponse.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/QnListResponse.java new file mode 100644 index 0000000..0c1e589 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/QnListResponse.java @@ -0,0 +1,38 @@ +package com.mnchatbot.myapplication.ui.questionNaire; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class QnListResponse { + @SerializedName("statusCode") + private int code; + + @SerializedName("responseMessage") + private String message; + + @SerializedName("data") + public List data; + + public int getCode() { + return code; + } + + public String getMessage() { + return message; + } + + public class QnDataList { + @SerializedName("medicalFormSerial") + private int medicalFormSerial; + + @SerializedName("medicalFormName") + private String QnName; + @SerializedName("medicalFormDate") + private String QnDate; + + public int getMedicalFormSerial() {return medicalFormSerial;} + public String getQnName() { return QnName; } + public String getQnDate() { return QnDate; } + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/QnResponse.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/QnResponse.java new file mode 100644 index 0000000..65b201c --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/QnResponse.java @@ -0,0 +1,59 @@ +package com.mnchatbot.myapplication.ui.questionNaire; +import com.google.gson.annotations.SerializedName; + +public class QnResponse { + @SerializedName("statusCode") + private int code; + + @SerializedName("responseMessage") + private String message; + + @SerializedName("data") + public QnResponse.QnData data; + + public int getCode() { + return code; + } + + public String getMessage() { + return message; + } + + public class QnData { + @SerializedName("medicalFormName") + private String QnName; + @SerializedName("medicalFormDate") + private String QnDate; + @SerializedName("medicalFormTime") + private String QnTime; + + @SerializedName("medicalFormQ1") + private String QnReason; + @SerializedName("medicalFormQ2") + private String QnDisease; + @SerializedName("medicalFormQ3") + private boolean QnMedichine; + @SerializedName("medicalFormQ4") + private String QnMedichine2; + + @SerializedName("medicalFormQ5") + private boolean QnSurgery; + @SerializedName("medicalFormQ6") + private boolean QnExercise; + @SerializedName("medicalFormQ7") + private String QnEtc; + + public String getQnName() { return QnName; } + public String getQnDate() { return QnDate; } + public String getQnTime() { return QnTime; } + + public String getQnReason() { return QnReason;} + public String getQnDisease() { return QnDisease;} + public boolean getQnMedichine() { return QnMedichine;} + public String getQnMedichine2() { return QnMedichine2;} + + public boolean getQnSurgery() { return QnSurgery;} + public boolean getQnExercise() { return QnExercise;} + public String getQnEtc() { return QnEtc;} + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/Question.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/Question.java new file mode 100644 index 0000000..1466058 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/Question.java @@ -0,0 +1,43 @@ +package com.mnchatbot.myapplication.ui.questionNaire; + +import com.google.gson.annotations.SerializedName; + +public class Question { + @SerializedName("petSerial") + public int petSerial; + + @SerializedName("medicalFormName") + private String QnName; + @SerializedName("medicalFormDate") + private String QnDate; + @SerializedName("medicalFormTime") + private String QnTime; + @SerializedName("medicalFormQ1") + private String QnReason; + @SerializedName("medicalFormQ2") + private String QnDisease; + @SerializedName("medicalFormQ3") + private boolean QnMedichine; + @SerializedName("medicalFormQ4") + private String QnMedichine2; + @SerializedName("medicalFormQ5") + private boolean QnSurgery; + @SerializedName("medicalFormQ6") + private boolean QnExercise; + @SerializedName("medicalFormQ7") + private String QnEtc; + + public Question(int petSerial, String QnName, String QnDate, String QnTime, String QnReason, String QnDisease, boolean QnMedichine, String QnMedichine2, boolean QnSurgery, boolean QnExercise, String QnEtc) { + this.petSerial = petSerial; + this.QnName = QnName; + this.QnDate = QnDate; + this.QnTime = QnTime; + this.QnReason = QnReason; + this.QnDisease = QnDisease; + this.QnMedichine = QnMedichine; + this.QnMedichine2 = QnMedichine2; + this.QnSurgery = QnSurgery; + this.QnExercise = QnExercise; + this.QnEtc = QnEtc; + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/QuestionAdapter.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/QuestionAdapter.java new file mode 100644 index 0000000..55bb20a --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/QuestionAdapter.java @@ -0,0 +1,130 @@ +package com.mnchatbot.myapplication.ui.questionNaire; + +import android.content.Context; +import android.content.SharedPreferences; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.mnchatbot.myapplication.R; + +import java.util.ArrayList; + +public class QuestionAdapter extends RecyclerView.Adapter { + + private SharedPreferences preferences; + private Context context; + private ArrayList mList; + + public class ViewHolder extends RecyclerView.ViewHolder { + TextView QuestionName, QuestionDate; + + public ViewHolder(@NonNull View itemView) { + super(itemView); + + QuestionName = itemView.findViewById(R.id.QuestionName); + QuestionDate = itemView.findViewById(R.id.QuestionDate); + + itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int position = getAdapterPosition(); + if (position != RecyclerView.NO_POSITION) { + if (onItemClickListener != null) { + onItemClickListener.onItemClick(position); + + QuestionViewItem item = mList.get(position); + int medicalSerial = item.getMedicalSerial(); + Log.d("mSerial", String.valueOf(medicalSerial)); + + preferences = context.getSharedPreferences("Serial", Context.MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt("medicalSerial", medicalSerial); + editor.commit(); + } + } + } + }); + + + itemView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + int position = getAdapterPosition(); + if (position != RecyclerView.NO_POSITION) { + if (onLongItemClickListener != null) { + onLongItemClickListener.onLongItemClick(position); + + QuestionViewItem item = mList.get(position); + int medicalSerial = item.getMedicalSerial(); + Log.d("mSerial", String.valueOf(medicalSerial)); + + preferences = context.getSharedPreferences("Serial", Context.MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt("medicalSerial", medicalSerial); + editor.commit(); + } + } + return false; + } + }); + } + } + + public QuestionAdapter(ArrayList mList, Context context) { + this.mList = mList; this.context = context; + } + + // 아이템 뷰를 위한 뷰홀더 객체를 생성하여 리턴 + @NonNull + @Override + public QuestionAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.f_question_item, parent, false); + QuestionAdapter.ViewHolder viewHolder = new QuestionAdapter.ViewHolder(view); + + return viewHolder; + } + + // position에 해당하는 데이터를 뷰홀더의 아이템뷰에 표시 + @Override + public void onBindViewHolder(@NonNull QuestionAdapter.ViewHolder holder, int position) { + QuestionViewItem item = mList.get(position); + + holder.QuestionName.setText(item.getQuestionName()); + holder.QuestionDate.setText(item.getQuestionDate()); + } + + @Override + public int getItemCount() { + return mList.size(); + } + + // 리사이클러 뷰 클릭 이벤트를 위한 코드 + public interface OnItemClickListener { + void onItemClick(int pos); + } + + private QuestionAdapter.OnItemClickListener onItemClickListener = null; + + public void setOnItemClickListener(QuestionAdapter.OnItemClickListener listener) { + this.onItemClickListener = listener; + } + + + public interface OnLongItemClickListener { + void onLongItemClick(int pos); + } + + private QuestionAdapter.OnLongItemClickListener onLongItemClickListener = null; + + public void setOnLongItemClickListener(QuestionAdapter.OnLongItemClickListener listener) { + this.onLongItemClickListener = listener; + } + +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/QuestionEdit.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/QuestionEdit.java new file mode 100644 index 0000000..2ad6557 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/QuestionEdit.java @@ -0,0 +1,37 @@ +package com.mnchatbot.myapplication.ui.questionNaire; + +import com.google.gson.annotations.SerializedName; + +public class QuestionEdit { + @SerializedName("medicalFormSerial") + public int medicalSerial; + + @SerializedName("medicalFormName") + private String QnName; + @SerializedName("medicalFormQ1") + private String QnReason; + @SerializedName("medicalFormQ2") + private String QnDisease; + @SerializedName("medicalFormQ3") + private boolean QnMedichine; + @SerializedName("medicalFormQ4") + private String QnMedichine2; + @SerializedName("medicalFormQ5") + private boolean QnSurgery; + @SerializedName("medicalFormQ6") + private boolean QnExercise; + @SerializedName("medicalFormQ7") + private String QnEtc; + + public QuestionEdit(int medicalSerial, String QnName, String QnReason, String QnDisease, boolean QnMedichine, String QnMedichine2, boolean QnSurgery, boolean QnExercise, String QnEtc) { + this.medicalSerial = medicalSerial; + this.QnName = QnName; + this.QnReason = QnReason; + this.QnDisease = QnDisease; + this.QnMedichine = QnMedichine; + this.QnMedichine2 = QnMedichine2; + this.QnSurgery = QnSurgery; + this.QnExercise = QnExercise; + this.QnEtc = QnEtc; + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/QuestionViewItem.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/QuestionViewItem.java new file mode 100644 index 0000000..bdda120 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/questionNaire/QuestionViewItem.java @@ -0,0 +1,31 @@ +package com.mnchatbot.myapplication.ui.questionNaire; + +public class QuestionViewItem { + private int MedicalSerial; + private String QuestionName; + private String QuestionDate; + + public int getMedicalSerial() { + return MedicalSerial; + } + + public void setMedicalSerial(int medicalSerial) { + this.MedicalSerial = medicalSerial; + } + + public String getQuestionName() { + return QuestionName; + } + + public void setQuestionName(String Name) { + this.QuestionName = Name; + } + + public String getQuestionDate() { + return QuestionDate; + } + + public void setQuestionDate(String Date) { + this.QuestionDate = Date; + } +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/serviceSetting/AuthenticationInterceptor.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/serviceSetting/AuthenticationInterceptor.java new file mode 100644 index 0000000..6d7e22a --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/serviceSetting/AuthenticationInterceptor.java @@ -0,0 +1,28 @@ +package com.mnchatbot.myapplication.ui.serviceSetting; + +import java.io.IOException; + +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; + +//HTTP 통신에 사용하는 Request 객체 생성. +public class AuthenticationInterceptor implements Interceptor { + + private String authToken; + + public AuthenticationInterceptor(String token) { + this.authToken = token; + } + + @Override + public Response intercept(Chain chain) throws IOException { + Request original = chain.request(); + + Request.Builder builder = original.newBuilder() + .header("Authorization", authToken); + + Request request = builder.build(); + return chain.proceed(request); + } +} \ No newline at end of file diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/serviceSetting/ServiceAPI.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/serviceSetting/ServiceAPI.java new file mode 100644 index 0000000..110f009 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/serviceSetting/ServiceAPI.java @@ -0,0 +1,172 @@ +package com.mnchatbot.myapplication.ui.serviceSetting; + +import com.mnchatbot.myapplication.ui.dictionary.DsResponse; +import com.mnchatbot.myapplication.ui.dictionary.DsListResponse; +import com.mnchatbot.myapplication.ui.dictionary.DsPageResponse; +import com.mnchatbot.myapplication.ui.questionNaire.QnResponse; +import com.mnchatbot.myapplication.ui.questionNaire.Question; +import com.mnchatbot.myapplication.ui.questionNaire.QuestionEdit; +import com.mnchatbot.myapplication.ui.questionNaire.QnListResponse; +import com.mnchatbot.myapplication.ui.diagnosis.DiagListResponse; +import com.mnchatbot.myapplication.ui.diagnosis.DiagResponse; +import com.mnchatbot.myapplication.ui.history.HistoryListResponse; +import com.mnchatbot.myapplication.ui.history.HistoryResponse; +import com.mnchatbot.myapplication.ui.hospital.HospitalListResponse; +import com.mnchatbot.myapplication.ui.join.EmailCodeData; +import com.mnchatbot.myapplication.ui.join.EmailValidationData; +import com.mnchatbot.myapplication.ui.join.JoinData; +import com.mnchatbot.myapplication.ui.join.JoinResponse; +import com.mnchatbot.myapplication.ui.join.PasswordChangeRequest; +import com.mnchatbot.myapplication.ui.login.LoginRequest; +import com.mnchatbot.myapplication.ui.login.LoginResponse; +import com.mnchatbot.myapplication.ui.mainPage.ChatbotResponse; +import com.mnchatbot.myapplication.ui.petSelect.Petinfo; +import com.mnchatbot.myapplication.ui.petSelect.petListResponse; +import com.mnchatbot.myapplication.ui.setting.PetinfoData; +import com.mnchatbot.myapplication.ui.setting.PetProfileResponse; +import com.mnchatbot.myapplication.ui.setting.ProfileResponse; + +import java.util.HashMap; + +import okhttp3.MultipartBody; +import okhttp3.RequestBody; +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.DELETE; +import retrofit2.http.GET; +import retrofit2.http.Multipart; +import retrofit2.http.PATCH; +import retrofit2.http.POST; +import retrofit2.http.Part; +import retrofit2.http.PartMap; +import retrofit2.http.Path; + +public interface ServiceAPI { + //로그인 + @POST("/login") + Call getLoginResponse(@Body LoginRequest loginRequest); + + //회원가입, 이메일 중복 확인 + @POST("/validateDuplicateEmail") + Call emailValidation(@Body EmailValidationData data); + + //이메일 + @POST("/sendEmailCode") + Call sendEmail(@Body EmailValidationData data); + + //회원가입, 인증코드 + @POST("/enterEmailCode/join") + Call userJoin(@Body JoinData data); + + //비밀번호 변경, 인증코드 + @POST("/enterEmailCode") + Call enterEmailCode(@Body EmailCodeData data); + + //비밀번호 변경 + @PATCH("/member/changePw") + Call changePw(@Body PasswordChangeRequest data); + + //회원 이메일(ID) 받아오는 api + @GET("/member/email") + Call GetmemberEmail(); + + //회원 탈퇴 + @DELETE("/member/delete/{memberEmail}") + Call deletePost (@Path("memberEmail")String id); + + //반려동물 정보 등록 + @POST("/pet/add") + Call setPetinfo(@Body Petinfo petinfo); + + //====================== + //반려동물 목록 보여주기 + @GET("/pet/petList") + Call setPetlist(); + + //반려동물 정보 보여주기, 초기 셋팅값 + @GET("/pet/{petSerial}") + Call getPetinfo(@Path("petSerial")int Serial); + + //반려동물 정보 수정 + @PATCH("/pet/changeInfo") + Call EditPetPost(@Body PetinfoData petinfoData); + + //반려동물 삭제 + @DELETE("/pet/delete/{petSerial}") + Call deletePetPost(@Path("petSerial")int Serial); + + //====================== + //질병백과 페이징처리 + @GET("/disease/totalDisease/{page}/{diseaseCnt}") + Call callDsinfo(@Path("page")int page, @Path("diseaseCnt")int itemCnt); + + //질병백과 검색 결과 + @GET("/disease/dsList/{dsName}") + Call getDsinfo(@Path("dsName")String dsName); + + //질병백과 검색 결과 내용 + @GET("/disease/{dsId}") + Call getDsSearchinfo(@Path("dsId")String dsId); + + //====================== + //연계병원 목록 보여주기 + @GET("/hospital/{region}/{city}") + Call Allhosplist(@Path("region")String region, @Path("city")String city); + + //연계병원 상담신청 + @Multipart + @POST("/hospital/apply") + Call apply(@Part MultipartBody.Part postImg, + @PartMap HashMap data); + + //====================== + //문진표 작성 + @POST("/medicalForm/add") + Call setQuestion(@Body Question questionNaire); + + //문진표 목록 + @GET("/medicalForm/medicalFormList/{petSerial}") + Call getQnList(@Path("petSerial")int Serial); + + //문진표 세부 내용 + @GET("/medicalForm/{medicalFormSerial}") + Call getQuestion(@Path("medicalFormSerial")int mSerial); + + //문진표 정보 수정 + @PATCH("/medicalForm/update") + Call EditQuestion(@Body QuestionEdit questionNaire); + + //문진표 삭제 + @DELETE("/medicalForm/delete/{medicalFormSerial}") + Call deleteQuestion(@Path("medicalFormSerial")int mSerial); + + //======================= + //예상진단 목록 + @GET("/expectDiag/expectDiagList/{petSerial}") + Call getDiagList(@Path("petSerial")int Serial); + + //예상진단 세부목록 + @GET("/expectDiag/{expectDiagSerial}") + Call getDiag(@Path("expectDiagSerial")int DiagSerial); + + //예상진단 삭제 + @DELETE("/expectDiag/delete/{expectDiagSerial}") + Call deleteDiag(@Path("expectDiagSerial")int DiagSerial); + + //예상진단 추가 + @POST("/expectDiag/add/{petSerial}") + Call addDiag(@Path("petSerial")int Serial); + + //======================= + //상담신청 내역 + @GET("/appointment/appointmentList/{petSerial}") + Call getHistoryList(@Path("petSerial")int Serial); + + //상담신청 내역 세부정보 + @GET("/appointment/{appointmentSerial}") + Call getHistoryObject(@Path("appointmentSerial")int apptSerial); + + //상담신청 삭제 + @DELETE("/appointment/delete/{appointmentSerial}") + Call deleteHistory(@Path("appointmentSerial")int apptSerial); +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/serviceSetting/ServiceGenerator.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/serviceSetting/ServiceGenerator.java new file mode 100644 index 0000000..81fa710 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/serviceSetting/ServiceGenerator.java @@ -0,0 +1,46 @@ +package com.mnchatbot.myapplication.ui.serviceSetting; + +import android.text.TextUtils; + +import okhttp3.OkHttpClient; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +public class ServiceGenerator { + + public static final String BASE_URL = "http://43.200.87.239:8080"; + //aws 서버 : http://43.200.87.239:8080 + //옌 post 서버 : https://12b969e5-87a6-4fca-a942-178ea253fdbc.mock.pstmn.io + //주현 서버 : https://7919ceb2-3999-4ed8-8bcc-16baaf4e62d4.mock.pstmn.io + + private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); + + private static Retrofit.Builder builder = + new Retrofit.Builder() + .baseUrl(BASE_URL) + .addConverterFactory(GsonConverterFactory.create()); + + private static Retrofit retrofit = builder.build(); + + public static S createService(Class serviceClass) { + return createService(serviceClass, null); + } + + public static S createService( + Class serviceClass, final String authToken) { + + if (!TextUtils.isEmpty(authToken)) { + AuthenticationInterceptor interceptor = + new AuthenticationInterceptor("Bearer " + authToken); + + if (!httpClient.interceptors().contains(interceptor)) { + httpClient.addInterceptor(interceptor); + + builder.client(httpClient.build()); + retrofit = builder.build(); + } + } + + return retrofit.create(serviceClass); + } +} \ No newline at end of file diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/PetProfileActivity.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/PetProfileActivity.java new file mode 100644 index 0000000..861436f --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/PetProfileActivity.java @@ -0,0 +1,277 @@ +/* +[반려동물 프로필 화면] 초기에 등록한 반려동물 정보를 수정하거나 삭제함. +품종, 이름, 나이, 성별, 중성화여부의 내용에 대해 입력받음. */ + +package com.mnchatbot.myapplication.ui.setting; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.NumberPicker; +import android.widget.TextView; +import android.widget.Toast; + +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.petSelect.PetSelectActivity; +import com.mnchatbot.myapplication.ui.petSelect.RecyclerViewAdapter; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.button.MaterialButtonToggleGroup; + +import org.json.JSONArray; +import org.json.JSONException; + +import java.util.ArrayList; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class PetProfileActivity extends SettingActivity { + private MaterialButtonToggleGroup Gendertoggle, Neuteringtoggle; + private MaterialButton man, woman, NeuteringYes, NeuteringNo; + private String CATDOG; + private ImageView petSpecies; + private TextView petAge; + private EditText petBreed,petNickName; + private Button btnAge, btnSave, btnDelete; + + private RecyclerViewAdapter mRecyclerViewAdapter = null; + private Context context; + + private SharedPreferences pre, pre2; + PetProfileResponse.PetDataObject petdata; + + //서버통신 + public String getToken() { + pre = getSharedPreferences("TOKEN", MODE_PRIVATE); + String token = pre.getString("TOKEN", null); + return token; + } + public int getpetSerial() { + pre2 = getSharedPreferences("Serial", MODE_PRIVATE); + int petSerial = pre2.getInt("petSerial", 0); + return petSerial; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.a_petprofile); + + petNickName = findViewById(R.id.petNickname); + petAge = findViewById(R.id.petAge); + petBreed = findViewById(R.id.petBreed); + btnAge = findViewById(R.id.btnAge); + btnSave = findViewById(R.id.btnSave); + btnDelete = findViewById(R.id.btnDelete); + petSpecies = findViewById(R.id.pic); + + Gendertoggle = findViewById(R.id.Gendertoggle); + Neuteringtoggle = findViewById(R.id.Neuteringtoggle); + man = Gendertoggle.findViewById(R.id.man); + woman = Gendertoggle.findViewById(R.id.woman); + NeuteringYes = Neuteringtoggle.findViewById(R.id.Neuteringyes); + NeuteringNo = Neuteringtoggle.findViewById(R.id.Neuteringno); + + //반려동물 정보 불러오기 + callPetinfo(); + + //나이 변경 + btnAge.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + AlertDialog.Builder AgePicker = new AlertDialog.Builder(PetProfileActivity.this); + + AgePicker.setTitle("나이변경"); + final NumberPicker AP = new NumberPicker(PetProfileActivity.this); + AgePicker.setView(AP); + + AP.setMinValue(0); + AP.setMaxValue(30); + AP.setWrapSelectorWheel(false); + AP.setValue(0); + + AP.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + } + }); + + AgePicker.setPositiveButton("설정", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int i) { + petAge.setText(String.valueOf(AP.getValue())); + dialog.dismiss(); + } + }); + AgePicker.setNegativeButton("취소", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int i) { + dialog.dismiss(); + } + }); + AgePicker.show(); + } + }); + + //저장 버튼 + btnSave.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + updatePetPost(); + } + }); + + //삭제 버튼 + btnDelete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + AlertDialog.Builder name = new AlertDialog.Builder(PetProfileActivity.this); + name.setTitle("반려동물 삭제"); + name.setMessage("정말로 삭제하시겠습니까?"); + + name.setPositiveButton("삭제", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int i) { + PetProfileDelete(i); + } + }); + name.setNegativeButton("취소", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int i) { + dialog.dismiss(); + } + }); + name.show(); + } + }); + } + + //반려동물 정보 변경 + public void updatePetPost(){ + String Name = petNickName.getText().toString().trim(); + int Age = Integer.parseInt(petAge.getText().toString()); + String Breed = petBreed.getText().toString().trim(); + String Gender = null; + String Neutering = null; + if (man.isChecked()) { Gender = "MALE"; + } else if (woman.isChecked()) { Gender = "FEMALE";} + + if (NeuteringYes.isChecked()) { Neutering = "NEUTER"; + } else if (NeuteringNo.isChecked()) { Neutering = "NOTNEUTER"; } + + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + PetinfoData petinfoData = new PetinfoData(getpetSerial(), null, Breed, Name, Age, Gender, Neutering); + + service.EditPetPost(petinfoData).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + Toast.makeText(getApplicationContext(),"변경되었습니다.", Toast.LENGTH_SHORT).show(); + PetProfileActivity.this.finish(); + } else {Log.d("response 실패", "404");} + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(PetProfileActivity.this); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + } + + //반려동물 정보 삭제 + private void PetProfileDelete(int pos) { + ArrayList List = new ArrayList(); + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + service.deletePetPost(getpetSerial()).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + //펫 리스트 목록으로 받기 + String json = pre2.getString("key", null); + if (json != null) { + try { + JSONArray a = new JSONArray(json); + for (int i = 0; i < a.length(); i++) { + String list = a.optString(i); + List.add(list); + } + mRecyclerViewAdapter = new RecyclerViewAdapter(List, context); + Intent intent = new Intent(PetProfileActivity.this, PetSelectActivity.class); + Object item = List.get(pos +1); + List.remove(item); + mRecyclerViewAdapter.notifyDataSetChanged(); + Log.d("~", String.valueOf(item)); + startActivity(intent); + PetProfileActivity.this.finish(); + } catch (JSONException e) { + e.printStackTrace(); + } + } + } else {Log.d("response 실패", "404");} + } + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(PetProfileActivity.this); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + } + + //반려동물 정보 불러오기 + public void callPetinfo(){ + Log.d("!!", String.valueOf(getpetSerial())); + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + service.getPetinfo(getpetSerial()).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + petdata = response.body().data; + CATDOG = petdata.getpetSpecies(); + if (CATDOG.equals("CAT")) {petSpecies.setImageResource(R.drawable.cat2);} + else {petSpecies.setImageResource(R.drawable.dog2);} + petNickName.setText(petdata.getPetName()); + petBreed.setText(petdata.getPetBreed()); + petAge.setText(String.valueOf(petdata.getPetAge())); + if (petdata.getPetGender().equals("MALE")) { + man.setChecked(true); + } else { woman.setChecked(true); } + if (petdata.getPetNeutering().equals("NEUTER")) { + NeuteringYes.setChecked(true); + } else { NeuteringNo.setChecked(true); } + } else {Log.d("response 실패", "404");} + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(PetProfileActivity.this); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + Log.d("펫 프로필 통신", t.toString()); + } + }); + } + +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/PetProfileResponse.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/PetProfileResponse.java new file mode 100644 index 0000000..6f2b374 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/PetProfileResponse.java @@ -0,0 +1,64 @@ +package com.mnchatbot.myapplication.ui.setting; + +import com.google.gson.annotations.SerializedName; + +public class PetProfileResponse { + @SerializedName("statusCode") + private int code; + + @SerializedName("responseMessage") + private String message; + + @SerializedName("data") + public PetDataObject data; + + public int getCode() { + return code; + } + + public String getMessage() { + return message; + } + + @Override + public String toString() { + return "ProfileResponse{" + "data=" + data + "}"; + } + + public class PetDataObject { + //반려동물 + @SerializedName("petSerial") + private int petSerial; + @SerializedName("petSpecies") + private String petSpecies; + @SerializedName("petName") + private String petName; + @SerializedName("petBreed") + private String petBreed; + @SerializedName("petAge") + private int petAge; + @SerializedName("petGender") + private String petGender; + @SerializedName("petNeutralization") + private String petNeutering; + + public int getpetSerial() { + return petSerial; + } + public String getpetSpecies() { + return petSpecies; + } + public String getPetName() { + return petName; + } + public String getPetBreed() { + return petBreed; + } + public int getPetAge() { + return petAge; + } + public String getPetGender() { return petGender;} + public String getPetNeutering() { return petNeutering;} + } + +} diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/PetinfoData.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/PetinfoData.java new file mode 100644 index 0000000..6332b52 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/PetinfoData.java @@ -0,0 +1,41 @@ +package com.mnchatbot.myapplication.ui.setting; + +import com.google.gson.annotations.SerializedName; + +public class PetinfoData { + + //식별번호 + @SerializedName("petSerial") + public int petSerial; + + //축종 + @SerializedName("petSpecies") + public String petSpecies; + + @SerializedName("petName") + public String petName; + + //품종 + @SerializedName("petBreed") + public String petBreed; + + @SerializedName("petAge") + public int petAge; + + @SerializedName("petGender") + public String petGender; + + @SerializedName("petNeutralization") + public String petNeutering; + + public PetinfoData(int petSerial, String petSpecies, String petBreed, String petName, int petAge, String petGender, String petNeutering) { + this.petSerial = petSerial; + this.petSpecies = petSpecies; + this.petName = petName; + this.petAge = petAge; + this.petBreed = petBreed; + this.petGender = petGender; + this.petNeutering = petNeutering; + + } +} diff --git a/application/app/src/main/java/com/example/myapplication/ui/setting/ProfileActivity.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/ProfileActivity.java similarity index 52% rename from application/app/src/main/java/com/example/myapplication/ui/setting/ProfileActivity.java rename to application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/ProfileActivity.java index 32d1276..331173b 100644 --- a/application/app/src/main/java/com/example/myapplication/ui/setting/ProfileActivity.java +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/ProfileActivity.java @@ -1,35 +1,54 @@ -package com.example.myapplication.ui.setting; +/* +[내 프로필 화면] 로그아웃/비밀번호 변경/회원 탈퇴를 보여주고 각 화면으로 연결함.*/ +package com.mnchatbot.myapplication.ui.setting; + +import android.app.Activity; import android.app.AlertDialog; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; +import android.util.Log; import android.view.View; import android.widget.TextView; -import com.example.myapplication.R; -import com.example.myapplication.ui.join.RetrofitClient; -import com.example.myapplication.ui.login.LoginActivity; -import com.example.myapplication.ui.join.PasswordChangeActivity; +import com.mnchatbot.myapplication.R; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceGenerator; +import com.mnchatbot.myapplication.ui.join.PasswordChangeActivity; +import com.mnchatbot.myapplication.ui.serviceSetting.ServiceAPI; +import com.mnchatbot.myapplication.ui.login.LoginActivity; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; public class ProfileActivity extends SettingActivity { - private Intent intent; + private Context context; + private TextView ID, pwchange, logout, deleteinfo; + private SharedPreferences preferences, pre2; - private ProfileAPI profileAPI = RetrofitClient.getClient().create(ProfileAPI.class); + //서버통신 + public String getToken() { + preferences = context.getSharedPreferences("TOKEN", MODE_PRIVATE); + String token = preferences.getString("TOKEN", null); + return token; + } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.profile); + setContentView(R.layout.a_profile); + + context = getApplicationContext(); - TextView ID = findViewById(R.id.userID); - TextView pwchange = findViewById(R.id.pwchange); - TextView logout = findViewById(R.id.logout); - TextView deleteinfo = findViewById(R.id.deleteinfo); + ID = findViewById(R.id.userID); + pwchange = findViewById(R.id.pwchange); + logout = findViewById(R.id.logout); + deleteinfo = findViewById(R.id.deleteinfo); + + calluserInfo(); //비밀번호 변경 pwchange.setOnClickListener(new View.OnClickListener() { @@ -45,6 +64,11 @@ public void onClick(View view) { @Override public void onClick(View view) { //로그인 화면으로 돌아가기 + pre2 = context.getSharedPreferences("autoLogin", Activity.MODE_PRIVATE); + SharedPreferences.Editor editor = pre2.edit(); + editor.clear(); + editor.commit(); + Intent intent = new Intent(getApplicationContext(), LoginActivity.class); startActivity(intent); } @@ -77,15 +101,37 @@ public void onClick(DialogInterface dialog, int i) { //회원 탈퇴 private void ProfileDelete() { - Call call = profileAPI.deletePost(10); //이게 무슨 의미인지 잘 모르겠음. 그러나 작동은 됨. - call.enqueue(new Callback() { + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + String userID = ID.getText().toString(); + service.deletePost(userID).enqueue(new Callback() { @Override - public void onResponse(Call call, Response response) { - if (!response.equals(200)) { + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { Intent intent = new Intent(ProfileActivity.this, LoginActivity.class); startActivity(intent); ProfileActivity.this.finish(); - } + } else { Log.d("response 실패", "404");} + } + + @Override + public void onFailure(Call call, Throwable t) { + AlertDialog.Builder builder = new AlertDialog.Builder(ProfileActivity.this); + builder.setTitle("알림") + .setMessage("잠시 후에 다시 시도해주세요.") + .setPositiveButton("확인", null) + .create() + .show(); + } + }); + } + public void calluserInfo(){ + ServiceAPI service = ServiceGenerator.createService(ServiceAPI.class, getToken()); + service.GetmemberEmail().enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + ID.setText(response.body().memberEmail); + } else { Log.d("response 실패", "404");} } @Override @@ -98,5 +144,7 @@ public void onFailure(Call call, Throwable t) { .show(); } }); + + } } diff --git a/application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/ProfileResponse.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/ProfileResponse.java new file mode 100644 index 0000000..81c69d2 --- /dev/null +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/ProfileResponse.java @@ -0,0 +1,14 @@ +package com.mnchatbot.myapplication.ui.setting; + +import com.google.gson.annotations.SerializedName; + +public class ProfileResponse { + @SerializedName("statusCode") + private int code; + + @SerializedName("responseMessage") + private String message; + + @SerializedName("data") + public String memberEmail; +} diff --git a/application/app/src/main/java/com/example/myapplication/ui/setting/SettingActivity.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/SettingActivity.java similarity index 62% rename from application/app/src/main/java/com/example/myapplication/ui/setting/SettingActivity.java rename to application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/SettingActivity.java index 7af7b8d..b675094 100644 --- a/application/app/src/main/java/com/example/myapplication/ui/setting/SettingActivity.java +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/SettingActivity.java @@ -1,27 +1,27 @@ -package com.example.myapplication.ui.setting; +/* +[설정 화면] 내 프로필, 반려동물 프로필을 선택할 수 있음.*/ + +package com.mnchatbot.myapplication.ui.setting; import androidx.appcompat.app.AppCompatActivity; -import androidx.drawerlayout.widget.DrawerLayout; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.view.Gravity; -import android.view.View; import android.widget.ImageButton; import java.util.ArrayList; -import com.example.myapplication.R; +import com.mnchatbot.myapplication.R; public class SettingActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.setting_page); + setContentView(R.layout.a_setting_page); //설정 목록 생성 ArrayList listSet = new ArrayList<>(); @@ -29,15 +29,12 @@ protected void onCreate(Bundle savedInstanceState) { listSet.add("반려동물 프로필"); RecyclerView recyclerView = findViewById(R.id.recyclerView); - ImageButton drawerBtn = (ImageButton) findViewById(R.id.toolbar_btn); - - LinearLayoutManager linearLayoutManager = new LinearLayoutManager((Context) this); - recyclerView.setLayoutManager(linearLayoutManager); //LayoutManger 설정 + SettingAdapter settingAdapter = new SettingAdapter(listSet); + recyclerView.setAdapter(settingAdapter); //어댑터 설정 + recyclerView.setLayoutManager(new LinearLayoutManager(this, recyclerView.VERTICAL, false)); //LayoutManger 설정 - CustomAdapter customAdapter = new CustomAdapter(listSet); - //==========[Click 이벤트]========= - customAdapter.setOnItemClickListener(new CustomAdapter.OnItemclickListener() { + settingAdapter.setOnItemClickListener(new SettingAdapter.OnItemclickListener() { @Override public void onItemclicked(int position, String data) { if(position==0) { @@ -51,8 +48,5 @@ public void onItemclicked(int position, String data) { } } }); - //==================================== - - recyclerView.setAdapter(customAdapter); //어댑터 설정 } } \ No newline at end of file diff --git a/application/app/src/main/java/com/example/myapplication/ui/setting/CustomAdapter.java b/application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/SettingAdapter.java similarity index 77% rename from application/app/src/main/java/com/example/myapplication/ui/setting/CustomAdapter.java rename to application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/SettingAdapter.java index 70cddfc..7f93ecc 100644 --- a/application/app/src/main/java/com/example/myapplication/ui/setting/CustomAdapter.java +++ b/application/app/src/main/java/com/mnchatbot/myapplication/ui/setting/SettingAdapter.java @@ -1,4 +1,4 @@ -package com.example.myapplication.ui.setting; +package com.mnchatbot.myapplication.ui.setting; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -9,27 +9,13 @@ import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; -import com.example.myapplication.R; +import com.mnchatbot.myapplication.R; -public class CustomAdapter extends RecyclerView.Adapter { +public class SettingAdapter extends RecyclerView.Adapter { private Context context; private ArrayList listSet; - //================[Click 이벤트 구현을 위한 코드]============= - //onItemClickListener 인터페이스 선언 - public interface OnItemclickListener { - void onItemclicked(int position, String data); - } - //OnItemClickListener 참조변수 선언 - private OnItemclickListener itemclickListener; - - //OnItemclickListener 전달 메소드 - public void setOnItemClickListener (OnItemclickListener listener) { - itemclickListener = listener; - } - //======================================================= - //뷰홀더 클래스 public class ViewHolder extends RecyclerView.ViewHolder{ private TextView textView; @@ -46,18 +32,17 @@ public void setTextView(TextView textView) { } } //생성자, 데이터 전달받게 하기 위함. - public CustomAdapter(ArrayList list) { + public SettingAdapter(ArrayList list) { listSet = list; } @NonNull @Override //ViewHolder 객체 생성, 리턴. - public CustomAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + public SettingAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) - .inflate(R.layout.recyclerview_item, parent, false); - CustomAdapter.ViewHolder viewHolder = new CustomAdapter.ViewHolder(view); - - //=================[Click 이벤트]============= + .inflate(R.layout.a_setting_item, parent, false); + SettingAdapter.ViewHolder viewHolder = new SettingAdapter.ViewHolder(view); + view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -84,5 +69,17 @@ public int getItemCount() { return listSet.size(); } + //onItemClickListener 인터페이스 선언 + public interface OnItemclickListener { + void onItemclicked(int position, String data); + } + //OnItemClickListener 참조변수 선언 + private OnItemclickListener itemclickListener; + + //OnItemclickListener 전달 메소드 + public void setOnItemClickListener (OnItemclickListener listener) { + itemclickListener = listener; + } + } diff --git a/application/app/src/main/res/drawable-anydpi/ic_option.xml b/application/app/src/main/res/drawable-anydpi/ic_option.xml index 0a4ca26..f5ad0ce 100644 --- a/application/app/src/main/res/drawable-anydpi/ic_option.xml +++ b/application/app/src/main/res/drawable-anydpi/ic_option.xml @@ -3,7 +3,7 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24" - android:tint="#333333" + android:tint="#FFFFFF" android:alpha="0.6"> - - - - - - diff --git a/application/app/src/main/res/drawable-mdpi/icon_app2back.png b/application/app/src/main/res/drawable-mdpi/icon_app2back.png new file mode 100644 index 0000000..1d54b9e Binary files /dev/null and b/application/app/src/main/res/drawable-mdpi/icon_app2back.png differ diff --git a/application/app/src/main/res/drawable-xxhdpi/cat.png b/application/app/src/main/res/drawable-xxhdpi/cat.png new file mode 100644 index 0000000..47878bb Binary files /dev/null and b/application/app/src/main/res/drawable-xxhdpi/cat.png differ diff --git a/application/app/src/main/res/drawable-xxhdpi/cat2.png b/application/app/src/main/res/drawable-xxhdpi/cat2.png new file mode 100644 index 0000000..1148d2d Binary files /dev/null and b/application/app/src/main/res/drawable-xxhdpi/cat2.png differ diff --git a/application/app/src/main/res/drawable-xxhdpi/dog.png b/application/app/src/main/res/drawable-xxhdpi/dog.png index 97e1bd0..f9d7f68 100644 Binary files a/application/app/src/main/res/drawable-xxhdpi/dog.png and b/application/app/src/main/res/drawable-xxhdpi/dog.png differ diff --git a/application/app/src/main/res/drawable-xxhdpi/dog2.png b/application/app/src/main/res/drawable-xxhdpi/dog2.png new file mode 100644 index 0000000..9a5cc4c Binary files /dev/null and b/application/app/src/main/res/drawable-xxhdpi/dog2.png differ diff --git a/application/app/src/main/res/drawable-xxhdpi/nav_1.png b/application/app/src/main/res/drawable-xxhdpi/nav_1.png new file mode 100644 index 0000000..9a6b598 Binary files /dev/null and b/application/app/src/main/res/drawable-xxhdpi/nav_1.png differ diff --git a/application/app/src/main/res/drawable-xxhdpi/user.png b/application/app/src/main/res/drawable-xxhdpi/user.png new file mode 100644 index 0000000..7513a1f Binary files /dev/null and b/application/app/src/main/res/drawable-xxhdpi/user.png differ diff --git a/application/app/src/main/res/drawable/background_default.png b/application/app/src/main/res/drawable/background_default.png new file mode 100644 index 0000000..d899f5c Binary files /dev/null and b/application/app/src/main/res/drawable/background_default.png differ diff --git a/application/app/src/main/res/drawable/background_detail.png b/application/app/src/main/res/drawable/background_detail.png new file mode 100644 index 0000000..573120c Binary files /dev/null and b/application/app/src/main/res/drawable/background_detail.png differ diff --git a/application/app/src/main/res/drawable/background_setting.png b/application/app/src/main/res/drawable/background_setting.png new file mode 100644 index 0000000..a8ae523 Binary files /dev/null and b/application/app/src/main/res/drawable/background_setting.png differ diff --git a/application/app/src/main/res/drawable/cat.png b/application/app/src/main/res/drawable/cat.png deleted file mode 100644 index ad3a43f..0000000 Binary files a/application/app/src/main/res/drawable/cat.png and /dev/null differ diff --git a/application/app/src/main/res/drawable/home_3.png b/application/app/src/main/res/drawable/home_3.png new file mode 100644 index 0000000..f1aa347 Binary files /dev/null and b/application/app/src/main/res/drawable/home_3.png differ diff --git a/application/app/src/main/res/drawable/home_4.png b/application/app/src/main/res/drawable/home_4.png new file mode 100644 index 0000000..10393b8 Binary files /dev/null and b/application/app/src/main/res/drawable/home_4.png differ diff --git a/application/app/src/main/res/drawable/icon_app.png b/application/app/src/main/res/drawable/icon_app.png new file mode 100644 index 0000000..0eca406 Binary files /dev/null and b/application/app/src/main/res/drawable/icon_app.png differ diff --git a/application/app/src/main/res/drawable/icon_app0.png b/application/app/src/main/res/drawable/icon_app0.png new file mode 100644 index 0000000..863baa4 Binary files /dev/null and b/application/app/src/main/res/drawable/icon_app0.png differ diff --git a/application/app/src/main/res/drawable/icon_app2.png b/application/app/src/main/res/drawable/icon_app2.png new file mode 100644 index 0000000..046a3c0 Binary files /dev/null and b/application/app/src/main/res/drawable/icon_app2.png differ diff --git a/application/app/src/main/res/drawable/icon_app3.png b/application/app/src/main/res/drawable/icon_app3.png new file mode 100644 index 0000000..56cc12e Binary files /dev/null and b/application/app/src/main/res/drawable/icon_app3.png differ diff --git a/application/app/src/main/res/drawable/icon_appname.png b/application/app/src/main/res/drawable/icon_appname.png new file mode 100644 index 0000000..762bbd9 Binary files /dev/null and b/application/app/src/main/res/drawable/icon_appname.png differ diff --git a/application/app/src/main/res/drawable/icon_appname2.png b/application/app/src/main/res/drawable/icon_appname2.png new file mode 100644 index 0000000..e6646dc Binary files /dev/null and b/application/app/src/main/res/drawable/icon_appname2.png differ diff --git a/application/app/src/main/res/drawable/icon_appname3.png b/application/app/src/main/res/drawable/icon_appname3.png new file mode 100644 index 0000000..9797e7f Binary files /dev/null and b/application/app/src/main/res/drawable/icon_appname3.png differ diff --git a/application/app/src/main/res/drawable/icon_appname4.png b/application/app/src/main/res/drawable/icon_appname4.png new file mode 100644 index 0000000..1192e5c Binary files /dev/null and b/application/app/src/main/res/drawable/icon_appname4.png differ diff --git a/application/app/src/main/res/drawable/img_customize.xml b/application/app/src/main/res/drawable/img_customize.xml new file mode 100644 index 0000000..7c44fb6 --- /dev/null +++ b/application/app/src/main/res/drawable/img_customize.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/application/app/src/main/res/drawable/img_customize2.xml b/application/app/src/main/res/drawable/img_customize2.xml new file mode 100644 index 0000000..e6a60e1 --- /dev/null +++ b/application/app/src/main/res/drawable/img_customize2.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/application/app/src/main/res/drawable/img_customize3.xml b/application/app/src/main/res/drawable/img_customize3.xml new file mode 100644 index 0000000..c202f67 --- /dev/null +++ b/application/app/src/main/res/drawable/img_customize3.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/application/app/src/main/res/drawable/img_customize4.xml b/application/app/src/main/res/drawable/img_customize4.xml new file mode 100644 index 0000000..4fe52cd --- /dev/null +++ b/application/app/src/main/res/drawable/img_customize4.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/application/app/src/main/res/drawable/nav_2.png b/application/app/src/main/res/drawable/nav_2.png new file mode 100644 index 0000000..e83038e Binary files /dev/null and b/application/app/src/main/res/drawable/nav_2.png differ diff --git a/application/app/src/main/res/drawable/nav_3.png b/application/app/src/main/res/drawable/nav_3.png new file mode 100644 index 0000000..9f67acd Binary files /dev/null and b/application/app/src/main/res/drawable/nav_3.png differ diff --git a/application/app/src/main/res/drawable/nav_4.png b/application/app/src/main/res/drawable/nav_4.png new file mode 100644 index 0000000..6e12181 Binary files /dev/null and b/application/app/src/main/res/drawable/nav_4.png differ diff --git a/application/app/src/main/res/drawable/nav_5.png b/application/app/src/main/res/drawable/nav_5.png new file mode 100644 index 0000000..288159f Binary files /dev/null and b/application/app/src/main/res/drawable/nav_5.png differ diff --git a/application/app/src/main/res/layout-w1240dp/activity_login.xml b/application/app/src/main/res/layout-w1240dp/activity_login.xml index 2445403..f42c0e9 100644 --- a/application/app/src/main/res/layout-w1240dp/activity_login.xml +++ b/application/app/src/main/res/layout-w1240dp/activity_login.xml @@ -9,6 +9,7 @@ android:paddingTop="@dimen/activity_vertical_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingBottom="@dimen/activity_vertical_margin" + android:background="@drawable/background_default" tools:context=".ui.login.LoginActivity"> + app:layout_constraintTop_toTopOf="parent" + android:textColor="@color/white" + android:textColorHint="@color/white" + android:backgroundTint="@color/white"/> + app:layout_constraintTop_toBottomOf="@+id/username" + android:textColor="@color/white" + android:textColorHint="@color/white" + android:backgroundTint="@color/white"/>