diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e8067ba
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+/.idea/
+/.gradle/
+local.properties
\ No newline at end of file
diff --git a/.gradle/4.4/fileChanges/last-build.bin b/.gradle/4.4/fileChanges/last-build.bin
deleted file mode 100644
index f76dd23..0000000
Binary files a/.gradle/4.4/fileChanges/last-build.bin and /dev/null differ
diff --git a/.gradle/4.4/fileContent/fileContent.lock b/.gradle/4.4/fileContent/fileContent.lock
deleted file mode 100644
index ef41a23..0000000
Binary files a/.gradle/4.4/fileContent/fileContent.lock and /dev/null differ
diff --git a/.gradle/4.4/fileHashes/fileHashes.bin b/.gradle/4.4/fileHashes/fileHashes.bin
deleted file mode 100644
index 057744f..0000000
Binary files a/.gradle/4.4/fileHashes/fileHashes.bin and /dev/null differ
diff --git a/.gradle/4.4/fileHashes/fileHashes.lock b/.gradle/4.4/fileHashes/fileHashes.lock
deleted file mode 100644
index 81faeb0..0000000
Binary files a/.gradle/4.4/fileHashes/fileHashes.lock and /dev/null differ
diff --git a/.gradle/4.4/fileHashes/resourceHashesCache.bin b/.gradle/4.4/fileHashes/resourceHashesCache.bin
deleted file mode 100644
index d54e608..0000000
Binary files a/.gradle/4.4/fileHashes/resourceHashesCache.bin and /dev/null differ
diff --git a/.gradle/4.4/javaCompile/classAnalysis.bin b/.gradle/4.4/javaCompile/classAnalysis.bin
deleted file mode 100644
index 7f876da..0000000
Binary files a/.gradle/4.4/javaCompile/classAnalysis.bin and /dev/null differ
diff --git a/.gradle/4.4/javaCompile/jarAnalysis.bin b/.gradle/4.4/javaCompile/jarAnalysis.bin
deleted file mode 100644
index 4da0364..0000000
Binary files a/.gradle/4.4/javaCompile/jarAnalysis.bin and /dev/null differ
diff --git a/.gradle/4.4/javaCompile/javaCompile.lock b/.gradle/4.4/javaCompile/javaCompile.lock
deleted file mode 100644
index 9e37d6c..0000000
Binary files a/.gradle/4.4/javaCompile/javaCompile.lock and /dev/null differ
diff --git a/.gradle/4.4/javaCompile/taskHistory.bin b/.gradle/4.4/javaCompile/taskHistory.bin
deleted file mode 100644
index 41dbcd6..0000000
Binary files a/.gradle/4.4/javaCompile/taskHistory.bin and /dev/null differ
diff --git a/.gradle/4.4/javaCompile/taskJars.bin b/.gradle/4.4/javaCompile/taskJars.bin
deleted file mode 100644
index 51d01e4..0000000
Binary files a/.gradle/4.4/javaCompile/taskJars.bin and /dev/null differ
diff --git a/.gradle/4.4/taskHistory/taskHistory.bin b/.gradle/4.4/taskHistory/taskHistory.bin
deleted file mode 100644
index 5cee9d8..0000000
Binary files a/.gradle/4.4/taskHistory/taskHistory.bin and /dev/null differ
diff --git a/.gradle/4.4/taskHistory/taskHistory.lock b/.gradle/4.4/taskHistory/taskHistory.lock
deleted file mode 100644
index 4775c66..0000000
Binary files a/.gradle/4.4/taskHistory/taskHistory.lock and /dev/null differ
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
deleted file mode 100644
index 7456a09..0000000
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and /dev/null differ
diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties
deleted file mode 100644
index b804183..0000000
--- a/.gradle/buildOutputCleanup/cache.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Wed Jul 22 13:59:39 CEST 2020
-gradle.version=4.4
diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin
deleted file mode 100644
index efda7b6..0000000
Binary files a/.gradle/buildOutputCleanup/outputFiles.bin and /dev/null differ
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 5c98b42..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# Default ignored files
-/workspace.xml
\ No newline at end of file
diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
deleted file mode 100644
index d2e245f..0000000
Binary files a/.idea/caches/build_file_checksums.ser and /dev/null differ
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
deleted file mode 100644
index 681f41a..0000000
--- a/.idea/codeStyles/Project.xml
+++ /dev/null
@@ -1,116 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- xmlns:android
-
- ^$
-
-
-
-
-
-
-
-
- xmlns:.*
-
- ^$
-
-
- BY_NAME
-
-
-
-
-
-
- .*:id
-
- http://schemas.android.com/apk/res/android
-
-
-
-
-
-
-
-
- .*:name
-
- http://schemas.android.com/apk/res/android
-
-
-
-
-
-
-
-
- name
-
- ^$
-
-
-
-
-
-
-
-
- style
-
- ^$
-
-
-
-
-
-
-
-
- .*
-
- ^$
-
-
- BY_NAME
-
-
-
-
-
-
- .*
-
- http://schemas.android.com/apk/res/android
-
-
- ANDROID_ATTRIBUTE_ORDER
-
-
-
-
-
-
- .*
-
- .*
-
-
- BY_NAME
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index ac6b0ae..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index 2be040e..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__android_arch_core_common_1_1_1_jar.xml b/.idea/libraries/Gradle__android_arch_core_common_1_1_1_jar.xml
deleted file mode 100644
index bf16fff..0000000
--- a/.idea/libraries/Gradle__android_arch_core_common_1_1_1_jar.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__android_arch_core_runtime_1_1_1_aar.xml b/.idea/libraries/Gradle__android_arch_core_runtime_1_1_1_aar.xml
deleted file mode 100644
index 95e24ac..0000000
--- a/.idea/libraries/Gradle__android_arch_core_runtime_1_1_1_aar.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__android_arch_lifecycle_common_1_1_1_jar.xml b/.idea/libraries/Gradle__android_arch_lifecycle_common_1_1_1_jar.xml
deleted file mode 100644
index 27b1867..0000000
--- a/.idea/libraries/Gradle__android_arch_lifecycle_common_1_1_1_jar.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__android_arch_lifecycle_livedata_1_1_1_aar.xml b/.idea/libraries/Gradle__android_arch_lifecycle_livedata_1_1_1_aar.xml
deleted file mode 100644
index dbd0443..0000000
--- a/.idea/libraries/Gradle__android_arch_lifecycle_livedata_1_1_1_aar.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__android_arch_lifecycle_livedata_core_1_1_1_aar.xml b/.idea/libraries/Gradle__android_arch_lifecycle_livedata_core_1_1_1_aar.xml
deleted file mode 100644
index 6b3c46e..0000000
--- a/.idea/libraries/Gradle__android_arch_lifecycle_livedata_core_1_1_1_aar.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__android_arch_lifecycle_runtime_1_1_1_aar.xml b/.idea/libraries/Gradle__android_arch_lifecycle_runtime_1_1_1_aar.xml
deleted file mode 100644
index 0baccee..0000000
--- a/.idea/libraries/Gradle__android_arch_lifecycle_runtime_1_1_1_aar.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__android_arch_lifecycle_viewmodel_1_1_1_aar.xml b/.idea/libraries/Gradle__android_arch_lifecycle_viewmodel_1_1_1_aar.xml
deleted file mode 100644
index 8bbdbf3..0000000
--- a/.idea/libraries/Gradle__android_arch_lifecycle_viewmodel_1_1_1_aar.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_animated_vector_drawable_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_animated_vector_drawable_28_0_0_aar.xml
deleted file mode 100644
index a4a3649..0000000
--- a/.idea/libraries/Gradle__com_android_support_animated_vector_drawable_28_0_0_aar.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_appcompat_v7_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_appcompat_v7_28_0_0_aar.xml
deleted file mode 100644
index 79c3eb5..0000000
--- a/.idea/libraries/Gradle__com_android_support_appcompat_v7_28_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_asynclayoutinflater_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_asynclayoutinflater_28_0_0_aar.xml
deleted file mode 100644
index 5aa3756..0000000
--- a/.idea/libraries/Gradle__com_android_support_asynclayoutinflater_28_0_0_aar.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_cardview_v7_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_cardview_v7_28_0_0_aar.xml
deleted file mode 100644
index 2a1a3c0..0000000
--- a/.idea/libraries/Gradle__com_android_support_cardview_v7_28_0_0_aar.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_collections_28_0_0_jar.xml b/.idea/libraries/Gradle__com_android_support_collections_28_0_0_jar.xml
deleted file mode 100644
index 80e4d73..0000000
--- a/.idea/libraries/Gradle__com_android_support_collections_28_0_0_jar.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_coordinatorlayout_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_coordinatorlayout_28_0_0_aar.xml
deleted file mode 100644
index 44d5034..0000000
--- a/.idea/libraries/Gradle__com_android_support_coordinatorlayout_28_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_cursoradapter_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_cursoradapter_28_0_0_aar.xml
deleted file mode 100644
index d89ecac..0000000
--- a/.idea/libraries/Gradle__com_android_support_cursoradapter_28_0_0_aar.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_customview_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_customview_28_0_0_aar.xml
deleted file mode 100644
index f8f55c6..0000000
--- a/.idea/libraries/Gradle__com_android_support_customview_28_0_0_aar.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_documentfile_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_documentfile_28_0_0_aar.xml
deleted file mode 100644
index b1bd9bd..0000000
--- a/.idea/libraries/Gradle__com_android_support_documentfile_28_0_0_aar.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_drawerlayout_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_drawerlayout_28_0_0_aar.xml
deleted file mode 100644
index 791da13..0000000
--- a/.idea/libraries/Gradle__com_android_support_drawerlayout_28_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_interpolator_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_interpolator_28_0_0_aar.xml
deleted file mode 100644
index dc895bd..0000000
--- a/.idea/libraries/Gradle__com_android_support_interpolator_28_0_0_aar.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_loader_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_loader_28_0_0_aar.xml
deleted file mode 100644
index a0b9284..0000000
--- a/.idea/libraries/Gradle__com_android_support_loader_28_0_0_aar.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_localbroadcastmanager_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_localbroadcastmanager_28_0_0_aar.xml
deleted file mode 100644
index 0bae025..0000000
--- a/.idea/libraries/Gradle__com_android_support_localbroadcastmanager_28_0_0_aar.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_print_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_print_28_0_0_aar.xml
deleted file mode 100644
index 8dda0c4..0000000
--- a/.idea/libraries/Gradle__com_android_support_print_28_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_recyclerview_v7_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_recyclerview_v7_28_0_0_aar.xml
deleted file mode 100644
index cabc9c1..0000000
--- a/.idea/libraries/Gradle__com_android_support_recyclerview_v7_28_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_slidingpanelayout_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_slidingpanelayout_28_0_0_aar.xml
deleted file mode 100644
index 1d6b56d..0000000
--- a/.idea/libraries/Gradle__com_android_support_slidingpanelayout_28_0_0_aar.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_annotations_28_0_0_jar.xml b/.idea/libraries/Gradle__com_android_support_support_annotations_28_0_0_jar.xml
deleted file mode 100644
index 0fdecce..0000000
--- a/.idea/libraries/Gradle__com_android_support_support_annotations_28_0_0_jar.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_compat_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_compat_28_0_0_aar.xml
deleted file mode 100644
index 5f9d32b..0000000
--- a/.idea/libraries/Gradle__com_android_support_support_compat_28_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_core_ui_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_core_ui_28_0_0_aar.xml
deleted file mode 100644
index 4aa05e1..0000000
--- a/.idea/libraries/Gradle__com_android_support_support_core_ui_28_0_0_aar.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_core_utils_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_core_utils_28_0_0_aar.xml
deleted file mode 100644
index 1286d75..0000000
--- a/.idea/libraries/Gradle__com_android_support_support_core_utils_28_0_0_aar.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_fragment_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_fragment_28_0_0_aar.xml
deleted file mode 100644
index d48f642..0000000
--- a/.idea/libraries/Gradle__com_android_support_support_fragment_28_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_vector_drawable_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_vector_drawable_28_0_0_aar.xml
deleted file mode 100644
index 8b7479b..0000000
--- a/.idea/libraries/Gradle__com_android_support_support_vector_drawable_28_0_0_aar.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_swiperefreshlayout_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_swiperefreshlayout_28_0_0_aar.xml
deleted file mode 100644
index 5ddf78f..0000000
--- a/.idea/libraries/Gradle__com_android_support_swiperefreshlayout_28_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_versionedparcelable_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_versionedparcelable_28_0_0_aar.xml
deleted file mode 100644
index 6b6df9b..0000000
--- a/.idea/libraries/Gradle__com_android_support_versionedparcelable_28_0_0_aar.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_viewpager_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_viewpager_28_0_0_aar.xml
deleted file mode 100644
index f239ec7..0000000
--- a/.idea/libraries/Gradle__com_android_support_viewpager_28_0_0_aar.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_google_code_gson_gson_2_7_jar.xml b/.idea/libraries/Gradle__com_google_code_gson_gson_2_7_jar.xml
deleted file mode 100644
index 2f5eebc..0000000
--- a/.idea/libraries/Gradle__com_google_code_gson_gson_2_7_jar.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_google_dagger_dagger_2_16_jar.xml b/.idea/libraries/Gradle__com_google_dagger_dagger_2_16_jar.xml
deleted file mode 100644
index 284170c..0000000
--- a/.idea/libraries/Gradle__com_google_dagger_dagger_2_16_jar.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_jakewharton_butterknife_8_8_1_aar.xml b/.idea/libraries/Gradle__com_jakewharton_butterknife_8_8_1_aar.xml
deleted file mode 100644
index 444b821..0000000
--- a/.idea/libraries/Gradle__com_jakewharton_butterknife_8_8_1_aar.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_jakewharton_butterknife_annotations_8_8_1_jar.xml b/.idea/libraries/Gradle__com_jakewharton_butterknife_annotations_8_8_1_jar.xml
deleted file mode 100644
index 18477cf..0000000
--- a/.idea/libraries/Gradle__com_jakewharton_butterknife_annotations_8_8_1_jar.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_8_0_jar.xml b/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_8_0_jar.xml
deleted file mode 100644
index 2320883..0000000
--- a/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_8_0_jar.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_squareup_okio_okio_1_13_0_jar.xml b/.idea/libraries/Gradle__com_squareup_okio_okio_1_13_0_jar.xml
deleted file mode 100644
index 3e834aa..0000000
--- a/.idea/libraries/Gradle__com_squareup_okio_okio_1_13_0_jar.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_squareup_retrofit2_adapter_rxjava_2_3_0_jar.xml b/.idea/libraries/Gradle__com_squareup_retrofit2_adapter_rxjava_2_3_0_jar.xml
deleted file mode 100644
index 08860f1..0000000
--- a/.idea/libraries/Gradle__com_squareup_retrofit2_adapter_rxjava_2_3_0_jar.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_squareup_retrofit2_converter_gson_2_3_0_jar.xml b/.idea/libraries/Gradle__com_squareup_retrofit2_converter_gson_2_3_0_jar.xml
deleted file mode 100644
index 23dc45f..0000000
--- a/.idea/libraries/Gradle__com_squareup_retrofit2_converter_gson_2_3_0_jar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_squareup_retrofit2_retrofit_2_3_0_jar.xml b/.idea/libraries/Gradle__com_squareup_retrofit2_retrofit_2_3_0_jar.xml
deleted file mode 100644
index 3981ae6..0000000
--- a/.idea/libraries/Gradle__com_squareup_retrofit2_retrofit_2_3_0_jar.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__io_reactivex_rxandroid_1_2_1_aar.xml b/.idea/libraries/Gradle__io_reactivex_rxandroid_1_2_1_aar.xml
deleted file mode 100644
index c503080..0000000
--- a/.idea/libraries/Gradle__io_reactivex_rxandroid_1_2_1_aar.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__io_reactivex_rxjava_1_3_8_jar.xml b/.idea/libraries/Gradle__io_reactivex_rxjava_1_3_8_jar.xml
deleted file mode 100644
index 8a47df0..0000000
--- a/.idea/libraries/Gradle__io_reactivex_rxjava_1_3_8_jar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__javax_inject_javax_inject_1_jar.xml b/.idea/libraries/Gradle__javax_inject_javax_inject_1_jar.xml
deleted file mode 100644
index 5ac7d7b..0000000
--- a/.idea/libraries/Gradle__javax_inject_javax_inject_1_jar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__junit_junit_4_12_jar.xml b/.idea/libraries/Gradle__junit_junit_4_12_jar.xml
deleted file mode 100644
index 24e5b72..0000000
--- a/.idea/libraries/Gradle__junit_junit_4_12_jar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__net_bytebuddy_byte_buddy_1_8_15_jar.xml b/.idea/libraries/Gradle__net_bytebuddy_byte_buddy_1_8_15_jar.xml
deleted file mode 100644
index 889c54a..0000000
--- a/.idea/libraries/Gradle__net_bytebuddy_byte_buddy_1_8_15_jar.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__net_bytebuddy_byte_buddy_agent_1_8_15_jar.xml b/.idea/libraries/Gradle__net_bytebuddy_byte_buddy_agent_1_8_15_jar.xml
deleted file mode 100644
index d46c1ba..0000000
--- a/.idea/libraries/Gradle__net_bytebuddy_byte_buddy_agent_1_8_15_jar.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3_jar.xml b/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3_jar.xml
deleted file mode 100644
index 6b1e2e7..0000000
--- a/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3_jar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__org_mockito_mockito_core_2_21_0_jar.xml b/.idea/libraries/Gradle__org_mockito_mockito_core_2_21_0_jar.xml
deleted file mode 100644
index be6b6a8..0000000
--- a/.idea/libraries/Gradle__org_mockito_mockito_core_2_21_0_jar.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__org_objenesis_objenesis_2_6_jar.xml b/.idea/libraries/Gradle__org_objenesis_objenesis_2_6_jar.xml
deleted file mode 100644
index 699ee35..0000000
--- a/.idea/libraries/Gradle__org_objenesis_objenesis_2_6_jar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index 7bfef59..0000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index 885b2f7..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules/GithubRepos.iml b/.idea/modules/GithubRepos.iml
deleted file mode 100644
index e885953..0000000
--- a/.idea/modules/GithubRepos.iml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules/app/app.iml b/.idea/modules/app/app.iml
deleted file mode 100644
index 3597cad..0000000
--- a/.idea/modules/app/app.iml
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- generateDebugSources
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
deleted file mode 100644
index 7f68460..0000000
--- a/.idea/runConfigurations.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 35eb1dd..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/.gitignore b/app/.gitignore
index 796b96d..42afabf 100644
--- a/app/.gitignore
+++ b/app/.gitignore
@@ -1 +1 @@
-/build
+/build
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9fd5c1f..2caee88 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,17 +1,17 @@
-
+
-
-
+
+
@@ -20,4 +20,6 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/azimolabs/mobile/task/GithubAppComponent.java b/app/src/main/java/com/azimolabs/mobile/task/GithubAppComponent.java
index 4ad0374..24903df 100644
--- a/app/src/main/java/com/azimolabs/mobile/task/GithubAppComponent.java
+++ b/app/src/main/java/com/azimolabs/mobile/task/GithubAppComponent.java
@@ -2,6 +2,7 @@
import com.azimolabs.mobile.task.github.GitHubApiClientModule;
import com.azimolabs.mobile.task.main.MainActivityComponent;
+import com.azimolabs.mobile.task.di.UserProfileActivityComponent;
import dagger.Component;
@@ -16,4 +17,6 @@ public interface GithubAppComponent {
void inject(GithubApplication application);
MainActivityComponent plus(MainActivityComponent.MainActivityModule mainActivityModule);
+
+ UserProfileActivityComponent plus(UserProfileActivityComponent.UserProfileActivityModule userProfileActivityModule);
}
diff --git a/app/src/main/java/com/azimolabs/mobile/task/di/UserProfileActivityComponent.java b/app/src/main/java/com/azimolabs/mobile/task/di/UserProfileActivityComponent.java
new file mode 100644
index 0000000..1da98f2
--- /dev/null
+++ b/app/src/main/java/com/azimolabs/mobile/task/di/UserProfileActivityComponent.java
@@ -0,0 +1,26 @@
+package com.azimolabs.mobile.task.di;
+
+import com.azimolabs.mobile.task.base.BaseActivityModule;
+import com.azimolabs.mobile.task.github.ActivityComponent;
+import com.azimolabs.mobile.task.view.UserProfileActivity;
+
+import javax.inject.Singleton;
+
+import dagger.Module;
+import dagger.Subcomponent;
+
+@Singleton
+@Subcomponent(
+ modules = UserProfileActivityComponent.UserProfileActivityModule.class
+)
+public interface UserProfileActivityComponent extends ActivityComponent {
+ UserProfileActivity inject(UserProfileActivity activity);
+
+ @Module
+ class UserProfileActivityModule extends BaseActivityModule {
+
+ public UserProfileActivityModule(UserProfileActivity activity) {
+ super(activity);
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/azimolabs/mobile/task/di/UserProfileActivityPresenter.java b/app/src/main/java/com/azimolabs/mobile/task/di/UserProfileActivityPresenter.java
new file mode 100644
index 0000000..5b0e344
--- /dev/null
+++ b/app/src/main/java/com/azimolabs/mobile/task/di/UserProfileActivityPresenter.java
@@ -0,0 +1,50 @@
+package com.azimolabs.mobile.task.di;
+
+import com.azimolabs.mobile.task.base.BasePresenter;
+import com.azimolabs.mobile.task.main.UserFieldErrorDisposer;
+import com.azimolabs.mobile.task.model.Repository;
+import com.azimolabs.mobile.task.model.User;
+import com.azimolabs.mobile.task.model.UserDetailsDownloader;
+import com.azimolabs.mobile.task.view.UserProfileActivity;
+
+import java.util.List;
+
+import javax.inject.Inject;
+
+import static com.azimolabs.mobile.task.utils.ErrorType.NO_REPOSITORIES;
+import static com.azimolabs.mobile.task.utils.ErrorType.UNKNOWN_USER;
+
+public class UserProfileActivityPresenter extends BasePresenter implements UserDetailsDownloader.OnFinishedListener {
+ private final UserProfileActivity view;
+ private final UserFieldErrorDisposer userFieldErrorDisposer;
+
+ @Inject
+ public UserProfileActivityPresenter(UserProfileActivity view, UserFieldErrorDisposer userFieldErrorDisposer) {
+ this.view = view;
+ this.userFieldErrorDisposer = userFieldErrorDisposer;
+ }
+
+ public void getUserDetails(String userName) {
+ UserDetailsDownloader.getInstance().getUserDetails(userName, this);
+ UserDetailsDownloader.getInstance().getUserRepoDetails(userName, this);
+ }
+
+ @Override
+ public void onUserDetailsDownloaded(User user) {
+ if(user != null) {
+ view.showUserDetails(user);
+ } else {
+ view.showError(userFieldErrorDisposer.getErrorText(UNKNOWN_USER));
+ }
+ }
+
+ @Override
+ public void onUserReposDownloaded(List userRepoList) {
+ if(userRepoList.size() > 0) {
+ view.showUserRepoDetails(userRepoList);
+ } else {
+ view.showError(userFieldErrorDisposer.getErrorText(NO_REPOSITORIES));
+ }
+
+ }
+}
diff --git a/app/src/main/java/com/azimolabs/mobile/task/github/GitHubApiClientModule.java b/app/src/main/java/com/azimolabs/mobile/task/github/GitHubApiClientModule.java
index 384fd45..8c04fb7 100644
--- a/app/src/main/java/com/azimolabs/mobile/task/github/GitHubApiClientModule.java
+++ b/app/src/main/java/com/azimolabs/mobile/task/github/GitHubApiClientModule.java
@@ -12,8 +12,10 @@
@Module
public class GitHubApiClientModule {
-
- //TODO: Initialize Api interface
+ @Provides
+ public GithubApi gitHubApi(Retrofit retrofit){
+ return retrofit.create(GithubApi.class);
+ }
@Provides
public Retrofit retrofit(OkHttpClient okHttpClient, GsonConverterFactory gsonConverterFactory) {
diff --git a/app/src/main/java/com/azimolabs/mobile/task/github/GithubApi.java b/app/src/main/java/com/azimolabs/mobile/task/github/GithubApi.java
new file mode 100644
index 0000000..fbf1dee
--- /dev/null
+++ b/app/src/main/java/com/azimolabs/mobile/task/github/GithubApi.java
@@ -0,0 +1,19 @@
+package com.azimolabs.mobile.task.github;
+
+import com.azimolabs.mobile.task.model.Repository;
+import com.azimolabs.mobile.task.model.User;
+
+import java.util.List;
+
+import retrofit2.Call;
+import retrofit2.http.GET;
+import retrofit2.http.Path;
+
+public interface GithubApi {
+
+ @GET("users/{name}")
+ Call getUserDetails(@Path("name") String name);
+
+ @GET("users/{name}/repos")
+ Call> getUserRepoDetails(@Path("name") String name);
+}
diff --git a/app/src/main/java/com/azimolabs/mobile/task/github/GithubApiComponent.java b/app/src/main/java/com/azimolabs/mobile/task/github/GithubApiComponent.java
new file mode 100644
index 0000000..d604b72
--- /dev/null
+++ b/app/src/main/java/com/azimolabs/mobile/task/github/GithubApiComponent.java
@@ -0,0 +1,8 @@
+package com.azimolabs.mobile.task.github;
+
+import dagger.Component;
+
+@Component(modules = GitHubApiClientModule.class)
+public interface GithubApiComponent {
+ GithubApi getGitHubApi();
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/azimolabs/mobile/task/main/MainActivity.java b/app/src/main/java/com/azimolabs/mobile/task/main/MainActivity.java
index 2f2e8b4..3cd50e2 100644
--- a/app/src/main/java/com/azimolabs/mobile/task/main/MainActivity.java
+++ b/app/src/main/java/com/azimolabs/mobile/task/main/MainActivity.java
@@ -22,8 +22,6 @@
public class MainActivity extends BaseActivity {
- @BindView(R.id.pbLoadingRepos)
- ProgressBar pbLoadingRepos;
@BindView(R.id.etUserName)
EditText etUserName;
@BindView(R.id.tvUserError)
@@ -73,14 +71,6 @@ public void hideError() {
etUserName.getBackground().mutate().setColorFilter(getResources().getColor(R.color.colorAccent), PorterDuff.Mode.SRC_ATOP);
}
- public void showLoading() {
- pbLoadingRepos.setVisibility(View.VISIBLE);
- }
-
- public void hideLoading() {
- pbLoadingRepos.setVisibility(View.INVISIBLE);
- }
-
public void hideKeyboard() {
keyboardHelper.hideKeyboard();
}
diff --git a/app/src/main/java/com/azimolabs/mobile/task/main/UserFieldError.java b/app/src/main/java/com/azimolabs/mobile/task/main/UserFieldError.java
index 3a67c0e..3c5dd58 100644
--- a/app/src/main/java/com/azimolabs/mobile/task/main/UserFieldError.java
+++ b/app/src/main/java/com/azimolabs/mobile/task/main/UserFieldError.java
@@ -15,4 +15,8 @@ public UserFieldError(ErrorType type, String errorMessage) {
public String getErrorMessage() {
return errorMessage;
}
+
+ public ErrorType getType() {
+ return type;
+ }
}
diff --git a/app/src/main/java/com/azimolabs/mobile/task/model/Repository.java b/app/src/main/java/com/azimolabs/mobile/task/model/Repository.java
new file mode 100644
index 0000000..5b93794
--- /dev/null
+++ b/app/src/main/java/com/azimolabs/mobile/task/model/Repository.java
@@ -0,0 +1,26 @@
+package com.azimolabs.mobile.task.model;
+
+import com.google.gson.annotations.SerializedName;
+
+public class Repository {
+ @SerializedName("name")
+ private String name;
+ @SerializedName("description")
+ private String description;
+
+ public String getName() {
+ return name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+}
diff --git a/app/src/main/java/com/azimolabs/mobile/task/model/User.java b/app/src/main/java/com/azimolabs/mobile/task/model/User.java
new file mode 100644
index 0000000..1c852be
--- /dev/null
+++ b/app/src/main/java/com/azimolabs/mobile/task/model/User.java
@@ -0,0 +1,57 @@
+package com.azimolabs.mobile.task.model;
+
+import com.google.gson.annotations.SerializedName;
+
+public class User {
+ @SerializedName("name")
+ private String name;
+ @SerializedName("company")
+ private String company;
+ @SerializedName("location")
+ private String location;
+ @SerializedName("followers")
+ private int followers;
+ @SerializedName("following")
+ private int following;
+
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getCompany() {
+ return company;
+ }
+
+ public void setCompany(String company) {
+ this.company = company;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public int getFollowers() {
+ return followers;
+ }
+
+ public void setFollowers(int followers) {
+ this.followers = followers;
+ }
+
+ public int getFollowing() {
+ return following;
+ }
+
+ public void setFollowing(int following) {
+ this.following = following;
+ }
+}
diff --git a/app/src/main/java/com/azimolabs/mobile/task/model/UserDetailsDownloader.java b/app/src/main/java/com/azimolabs/mobile/task/model/UserDetailsDownloader.java
new file mode 100644
index 0000000..ddbec19
--- /dev/null
+++ b/app/src/main/java/com/azimolabs/mobile/task/model/UserDetailsDownloader.java
@@ -0,0 +1,87 @@
+package com.azimolabs.mobile.task.model;
+
+import android.util.Log;
+
+import com.azimolabs.mobile.task.github.DaggerGithubApiComponent;
+import com.azimolabs.mobile.task.github.GithubApi;
+import com.azimolabs.mobile.task.github.GithubApiComponent;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+
+public class UserDetailsDownloader {
+ private final String TAG = UserDetailsDownloader.class.getSimpleName();
+
+ private static UserDetailsDownloader userDetailsDownloader = null;
+ private GithubApi githubApi;
+
+ public UserDetailsDownloader() {
+ GithubApiComponent gitHubAPIClientComponent = DaggerGithubApiComponent.builder().build();
+ githubApi = gitHubAPIClientComponent.getGitHubApi();
+ }
+
+ public static UserDetailsDownloader getInstance() {
+ if (userDetailsDownloader == null) {
+ userDetailsDownloader = new UserDetailsDownloader();
+ }
+ return userDetailsDownloader;
+ }
+
+ public void getUserDetails(final String user, OnFinishedListener listener) {
+ Call call = githubApi.getUserDetails(user);
+
+ call.enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+ User user = null;
+ if (response.isSuccessful()) {
+ user = response.body();
+ }
+
+ listener.onUserDetailsDownloaded(user);
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ call.cancel();
+ listener.onUserDetailsDownloaded(null);
+ }
+ });
+ }
+
+ public void getUserRepoDetails(final String user, OnFinishedListener listener) {
+ Call> call = githubApi.getUserRepoDetails(user);
+
+ call.enqueue(new Callback>() {
+ @Override
+ public void onResponse(Call> call, Response> response) {
+ List userRepoList = new ArrayList<>();
+ if (response.isSuccessful()) {
+ userRepoList = response.body();
+
+ for (Repository repo : userRepoList) {
+ Log.d(TAG, ">> " + repo.getName());
+ }
+ }
+
+ listener.onUserReposDownloaded(userRepoList);
+ }
+
+ @Override
+ public void onFailure(Call> call, Throwable t) {
+ call.cancel();
+ listener.onUserDetailsDownloaded(null);
+ }
+ });
+ }
+
+ public interface OnFinishedListener {
+ void onUserDetailsDownloaded(User user);
+
+ void onUserReposDownloaded(List userRepoList);
+ }
+}
diff --git a/app/src/main/java/com/azimolabs/mobile/task/utils/Navigator.java b/app/src/main/java/com/azimolabs/mobile/task/utils/Navigator.java
index 4cafaaa..48e8854 100644
--- a/app/src/main/java/com/azimolabs/mobile/task/utils/Navigator.java
+++ b/app/src/main/java/com/azimolabs/mobile/task/utils/Navigator.java
@@ -1,8 +1,9 @@
package com.azimolabs.mobile.task.utils;
-import android.widget.Toast;
+import android.content.Intent;
import com.azimolabs.mobile.task.base.BaseActivity;
+import com.azimolabs.mobile.task.view.UserProfileActivity;
import javax.inject.Inject;
@@ -16,7 +17,8 @@ public Navigator(BaseActivity activity) {
}
public void navigateToUserDetailsActivity(String userName) {
- //TODO: Navigate to user details screen
- Toast.makeText(activity, "Here is the place for your solution!", Toast.LENGTH_SHORT).show();
+ Intent intent = new Intent(activity, UserProfileActivity.class);
+ intent.putExtra("userName", userName);
+ activity.startActivity(intent);
}
}
diff --git a/app/src/main/java/com/azimolabs/mobile/task/view/UserProfileActivity.java b/app/src/main/java/com/azimolabs/mobile/task/view/UserProfileActivity.java
new file mode 100644
index 0000000..6212424
--- /dev/null
+++ b/app/src/main/java/com/azimolabs/mobile/task/view/UserProfileActivity.java
@@ -0,0 +1,194 @@
+package com.azimolabs.mobile.task.view;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.widget.DividerItemDecoration;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+import com.azimolabs.mobile.task.GithubAppComponent;
+import com.azimolabs.mobile.task.R;
+import com.azimolabs.mobile.task.base.BaseActivity;
+import com.azimolabs.mobile.task.base.BasePresenter;
+import com.azimolabs.mobile.task.github.ActivityComponent;
+import com.azimolabs.mobile.task.main.UserFieldError;
+import com.azimolabs.mobile.task.di.UserProfileActivityComponent;
+import com.azimolabs.mobile.task.di.UserProfileActivityPresenter;
+import com.azimolabs.mobile.task.model.Repository;
+import com.azimolabs.mobile.task.model.User;
+import com.azimolabs.mobile.task.utils.ErrorType;
+
+import java.util.List;
+
+import javax.inject.Inject;
+
+import butterknife.BindView;
+
+public class UserProfileActivity extends BaseActivity {
+ @Inject
+ UserProfileActivityPresenter presenter;
+
+ @BindView(R.id.pbLoadingRepos)
+ ProgressBar pbLoadingRepos;
+ @BindView(R.id.tvUserDetailsError)
+ TextView tvUserDetailsError;
+ @BindView(R.id.tvUserRepoError)
+ TextView tvUserRepoError;
+ @BindView(R.id.llUserDetails)
+ LinearLayout llUserDetails;
+ @BindView(R.id.tvUserName)
+ TextView tvUserName;
+ @BindView(R.id.tvUserDetails)
+ TextView tvUserDetails;
+ @BindView(R.id.tvFollow)
+ TextView tvFollow;
+ @BindView(R.id.rvRepoList)
+ RecyclerView rvRepoList;
+
+ private boolean userDetailsLoaded;
+ private boolean userRepoDetailsLoaded;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_user_profile);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
+ showLoading();
+
+ Intent intent = getIntent();
+ String userName = intent.getStringExtra("userName");
+ presenter.getUserDetails(userName);
+ }
+
+ @Override
+ protected ActivityComponent onCreateComponent(GithubAppComponent githubAppComponent) {
+ UserProfileActivityComponent component = githubAppComponent.plus(new UserProfileActivityComponent.UserProfileActivityModule(this));
+ component.inject(this);
+ return component;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ finish();
+ return true;
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ protected BasePresenter getBasePresenter() {
+ return presenter;
+ }
+
+ public void showError(UserFieldError error) {
+ if (error.getType() == ErrorType.UNKNOWN_USER) {
+ tvUserDetailsError.setText(error.getErrorMessage());
+ tvUserDetailsError.setVisibility(View.VISIBLE);
+ llUserDetails.setVisibility(View.GONE);
+ hideLoading();
+ } else if (error.getType() == ErrorType.NO_REPOSITORIES) {
+ tvUserRepoError.setText(error.getErrorMessage());
+ tvUserRepoError.setVisibility(View.VISIBLE);
+ rvRepoList.setVisibility(View.GONE);
+
+ userRepoDetailsLoaded = true;
+ if (userDetailsLoaded && userRepoDetailsLoaded) {
+ hideLoading();
+ }
+ }
+ }
+
+ public void showUserDetails(User user) {
+ tvUserName.setText(user.getName());
+ tvUserDetails.setText(String.format(getString(R.string.user_details_txt),
+ user.getCompany() == null ? getString(R.string.na_txt) : user.getCompany(),
+ user.getLocation() == null ? getString(R.string.na_txt) : user.getLocation()));
+ tvFollow.setText(String.format(getString(R.string.follow_txt), user.getFollowing(), user.getFollowers()));
+ tvUserDetailsError.setVisibility(View.GONE);
+ llUserDetails.setVisibility(View.VISIBLE);
+
+ userDetailsLoaded = true;
+ if (userDetailsLoaded && userRepoDetailsLoaded) {
+ hideLoading();
+ }
+ }
+
+ public void showUserRepoDetails(List userRepoList) {
+ RepoListAdapter adapter = new RepoListAdapter(userRepoList);
+ rvRepoList.setAdapter(adapter);
+ rvRepoList.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
+ rvRepoList.setLayoutManager(new LinearLayoutManager(this));
+
+ userRepoDetailsLoaded = true;
+ if (userDetailsLoaded && userRepoDetailsLoaded) {
+ hideLoading();
+ }
+ }
+
+ public void showLoading() {
+ pbLoadingRepos.setVisibility(View.VISIBLE);
+ }
+
+ public void hideLoading() {
+ pbLoadingRepos.setVisibility(View.INVISIBLE);
+ }
+
+
+ public class RepoListAdapter extends RecyclerView.Adapter {
+ private List repositoryList;
+
+ public RepoListAdapter(List repositoryList) {
+ this.repositoryList = repositoryList;
+ }
+
+ @Override
+ public RepoListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ Context context = parent.getContext();
+ LayoutInflater inflater = LayoutInflater.from(context);
+
+ View repoView = inflater.inflate(R.layout.item_repo_list, parent, false);
+
+ ViewHolder viewHolder = new ViewHolder(repoView);
+ return viewHolder;
+ }
+
+ @Override
+ public void onBindViewHolder(RepoListAdapter.ViewHolder holder, int position) {
+ Repository repository = repositoryList.get(position);
+
+ TextView tvRepoName = holder.tvRepoName;
+ tvRepoName.setText(repository.getName());
+ TextView tvRepoDescription = holder.tvRepoDescription;
+ tvRepoDescription.setText(repository.getDescription());
+ }
+
+ @Override
+ public int getItemCount() {
+ return repositoryList.size();
+ }
+
+ public class ViewHolder extends RecyclerView.ViewHolder {
+ public TextView tvRepoName;
+ public TextView tvRepoDescription;
+
+ public ViewHolder(View itemView) {
+ super(itemView);
+
+ tvRepoName = (TextView) itemView.findViewById(R.id.tvRepoName);
+ tvRepoDescription = (TextView) itemView.findViewById(R.id.tvRepoDescription);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index fce5075..a883ff1 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -7,13 +7,6 @@
android:orientation="vertical"
tools:context=".main.MainActivity">
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_repo_list.xml b/app/src/main/res/layout/item_repo_list.xml
new file mode 100644
index 0000000..36a1392
--- /dev/null
+++ b/app/src/main/res/layout/item_repo_list.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 4f9daf9..e344cec 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -9,4 +9,5 @@
#0366d6
#F00
#E0E0E0
+ #FFF
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 01360fa..be2c816 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -4,9 +4,12 @@
Issues
Stars
Forks
- User doesn\'t exist!
+ Either user doesn\'t exist or there is a problem with your internet connection! Please try again later.
Close
Please fill in!
User has no repositories!
Connection error!
+ %d followers, %d following
+ %s, %s
+ N/A
\ No newline at end of file
diff --git a/local.properties b/local.properties
deleted file mode 100644
index a802470..0000000
--- a/local.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-## This file must *NOT* be checked into Version Control Systems,
-# as it contains information specific to your local configuration.
-#
-# Location of the SDK. This is only used by Gradle.
-# For customization when using a Version Control System, please read the
-# header note.
-#Wed Jul 22 13:57:23 CEST 2020
-sdk.dir=/Users/jakubkwiatek/Library/Android/sdk