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 @@
-
-
-
-
-
-
-
-
-
- generateDebugSources
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ 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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- generateDebugSources
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ 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 @@
-
-
-
-
-
-
-
-
-
- generateDebugSources
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ 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 @@
-
-
-
-
-
-
-
-
-
- generateDebugSources
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ 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