commit 4ff15d7948b8b018c28f0138707f283d4ae1e798 Author: Vicente Falco Date: Fri Sep 15 08:46:03 2017 +0200 First commit diff --git a/.gradle/2.14.1/taskArtifacts/cache.properties b/.gradle/2.14.1/taskArtifacts/cache.properties new file mode 100644 index 0000000..7abb912 --- /dev/null +++ b/.gradle/2.14.1/taskArtifacts/cache.properties @@ -0,0 +1 @@ +#Tue Jul 11 13:02:30 CEST 2017 diff --git a/.gradle/2.14.1/taskArtifacts/cache.properties.lock b/.gradle/2.14.1/taskArtifacts/cache.properties.lock new file mode 100644 index 0000000..48099cb Binary files /dev/null and b/.gradle/2.14.1/taskArtifacts/cache.properties.lock differ diff --git a/.gradle/2.14.1/taskArtifacts/fileHashes.bin b/.gradle/2.14.1/taskArtifacts/fileHashes.bin new file mode 100644 index 0000000..925ebff Binary files /dev/null and b/.gradle/2.14.1/taskArtifacts/fileHashes.bin differ diff --git a/.gradle/2.14.1/taskArtifacts/fileSnapshots.bin b/.gradle/2.14.1/taskArtifacts/fileSnapshots.bin new file mode 100644 index 0000000..bca042d Binary files /dev/null and b/.gradle/2.14.1/taskArtifacts/fileSnapshots.bin differ diff --git a/.gradle/2.14.1/taskArtifacts/fileSnapshotsToTreeSnapshotsIndex.bin b/.gradle/2.14.1/taskArtifacts/fileSnapshotsToTreeSnapshotsIndex.bin new file mode 100644 index 0000000..fcc05a3 Binary files /dev/null and b/.gradle/2.14.1/taskArtifacts/fileSnapshotsToTreeSnapshotsIndex.bin differ diff --git a/.gradle/2.14.1/taskArtifacts/taskArtifacts.bin b/.gradle/2.14.1/taskArtifacts/taskArtifacts.bin new file mode 100644 index 0000000..866f425 Binary files /dev/null and b/.gradle/2.14.1/taskArtifacts/taskArtifacts.bin differ diff --git a/.gradle/2.14.1/tasks/_data_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin b/.gradle/2.14.1/tasks/_data_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin new file mode 100644 index 0000000..8eed53c Binary files /dev/null and b/.gradle/2.14.1/tasks/_data_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin differ diff --git a/.gradle/2.14.1/tasks/_data_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock b/.gradle/2.14.1/tasks/_data_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock new file mode 100644 index 0000000..ec82ae5 Binary files /dev/null and b/.gradle/2.14.1/tasks/_data_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock differ diff --git a/.gradle/2.14.1/tasks/_data_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin b/.gradle/2.14.1/tasks/_data_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin new file mode 100644 index 0000000..9ac5feb Binary files /dev/null and b/.gradle/2.14.1/tasks/_data_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin differ diff --git a/.gradle/2.14.1/tasks/_data_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock b/.gradle/2.14.1/tasks/_data_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock new file mode 100644 index 0000000..a18862f Binary files /dev/null and b/.gradle/2.14.1/tasks/_data_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock differ diff --git a/.gradle/2.14.1/tasks/_presentation_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin b/.gradle/2.14.1/tasks/_presentation_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin new file mode 100644 index 0000000..7accc79 Binary files /dev/null and b/.gradle/2.14.1/tasks/_presentation_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin differ diff --git a/.gradle/2.14.1/tasks/_presentation_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock b/.gradle/2.14.1/tasks/_presentation_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock new file mode 100644 index 0000000..b919f1e Binary files /dev/null and b/.gradle/2.14.1/tasks/_presentation_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock differ diff --git a/.gradle/2.14.1/tasks/_presentation_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin b/.gradle/2.14.1/tasks/_presentation_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin new file mode 100644 index 0000000..39f5ca0 Binary files /dev/null and b/.gradle/2.14.1/tasks/_presentation_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin differ diff --git a/.gradle/2.14.1/tasks/_presentation_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock b/.gradle/2.14.1/tasks/_presentation_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock new file mode 100644 index 0000000..d21627e Binary files /dev/null and b/.gradle/2.14.1/tasks/_presentation_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock differ diff --git a/.gradle/3.3/taskArtifacts/fileHashes.bin b/.gradle/3.3/taskArtifacts/fileHashes.bin new file mode 100644 index 0000000..acbb8b7 Binary files /dev/null and b/.gradle/3.3/taskArtifacts/fileHashes.bin differ diff --git a/.gradle/3.3/taskArtifacts/fileSnapshots.bin b/.gradle/3.3/taskArtifacts/fileSnapshots.bin new file mode 100644 index 0000000..f9dfaea Binary files /dev/null and b/.gradle/3.3/taskArtifacts/fileSnapshots.bin differ diff --git a/.gradle/3.3/taskArtifacts/taskArtifacts.bin b/.gradle/3.3/taskArtifacts/taskArtifacts.bin new file mode 100644 index 0000000..7162bcc Binary files /dev/null and b/.gradle/3.3/taskArtifacts/taskArtifacts.bin differ diff --git a/.gradle/3.3/taskArtifacts/taskArtifacts.lock b/.gradle/3.3/taskArtifacts/taskArtifacts.lock new file mode 100644 index 0000000..f19f5a8 Binary files /dev/null and b/.gradle/3.3/taskArtifacts/taskArtifacts.lock differ diff --git a/.gradle/3.3/tasks/_data_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin b/.gradle/3.3/tasks/_data_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin new file mode 100644 index 0000000..f9ba388 Binary files /dev/null and b/.gradle/3.3/tasks/_data_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin differ diff --git a/.gradle/3.3/tasks/_data_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock b/.gradle/3.3/tasks/_data_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock new file mode 100644 index 0000000..4094ac0 Binary files /dev/null and b/.gradle/3.3/tasks/_data_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock differ diff --git a/.gradle/3.3/tasks/_data_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin b/.gradle/3.3/tasks/_data_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin new file mode 100644 index 0000000..17f3cc4 Binary files /dev/null and b/.gradle/3.3/tasks/_data_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin differ diff --git a/.gradle/3.3/tasks/_data_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock b/.gradle/3.3/tasks/_data_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock new file mode 100644 index 0000000..66bc790 Binary files /dev/null and b/.gradle/3.3/tasks/_data_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock differ diff --git a/.gradle/3.3/tasks/_data_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin b/.gradle/3.3/tasks/_data_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin new file mode 100644 index 0000000..244f683 Binary files /dev/null and b/.gradle/3.3/tasks/_data_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin differ diff --git a/.gradle/3.3/tasks/_data_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock b/.gradle/3.3/tasks/_data_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock new file mode 100644 index 0000000..db31fd2 Binary files /dev/null and b/.gradle/3.3/tasks/_data_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock differ diff --git a/.gradle/3.3/tasks/_data_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin b/.gradle/3.3/tasks/_data_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin new file mode 100644 index 0000000..2a78e86 Binary files /dev/null and b/.gradle/3.3/tasks/_data_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin differ diff --git a/.gradle/3.3/tasks/_data_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock b/.gradle/3.3/tasks/_data_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock new file mode 100644 index 0000000..47e03c1 Binary files /dev/null and b/.gradle/3.3/tasks/_data_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock differ diff --git a/.gradle/3.3/tasks/_presentation_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin b/.gradle/3.3/tasks/_presentation_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin new file mode 100644 index 0000000..1448b7e Binary files /dev/null and b/.gradle/3.3/tasks/_presentation_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin differ diff --git a/.gradle/3.3/tasks/_presentation_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock b/.gradle/3.3/tasks/_presentation_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock new file mode 100644 index 0000000..f53df5d Binary files /dev/null and b/.gradle/3.3/tasks/_presentation_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock differ diff --git a/.gradle/3.3/tasks/_presentation_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin b/.gradle/3.3/tasks/_presentation_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin new file mode 100644 index 0000000..d8e6747 Binary files /dev/null and b/.gradle/3.3/tasks/_presentation_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin differ diff --git a/.gradle/3.3/tasks/_presentation_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock b/.gradle/3.3/tasks/_presentation_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock new file mode 100644 index 0000000..5409953 Binary files /dev/null and b/.gradle/3.3/tasks/_presentation_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock differ diff --git a/.gradle/3.3/tasks/_presentation_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin b/.gradle/3.3/tasks/_presentation_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin new file mode 100644 index 0000000..240115b Binary files /dev/null and b/.gradle/3.3/tasks/_presentation_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin differ diff --git a/.gradle/3.3/tasks/_presentation_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock b/.gradle/3.3/tasks/_presentation_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock new file mode 100644 index 0000000..6e5c429 Binary files /dev/null and b/.gradle/3.3/tasks/_presentation_compileReleaseJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock differ diff --git a/.gradle/3.3/tasks/_presentation_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin b/.gradle/3.3/tasks/_presentation_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin new file mode 100644 index 0000000..9d3c9ca Binary files /dev/null and b/.gradle/3.3/tasks/_presentation_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin differ diff --git a/.gradle/3.3/tasks/_presentation_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock b/.gradle/3.3/tasks/_presentation_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock new file mode 100644 index 0000000..a739b37 Binary files /dev/null and b/.gradle/3.3/tasks/_presentation_compileReleaseJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock differ diff --git a/.hgignore b/.hgignore new file mode 100644 index 0000000..bcbc259 --- /dev/null +++ b/.hgignore @@ -0,0 +1,43 @@ +syntax: glob +# Built application files +*.apk +*.ap_ + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# Intellij +*.iml +.idea/workspace.xml + +# Keystore files +*.jks + +.idea/ diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..96cc43e --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..18af32f --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,21 @@ + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..1a5a4fd --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..3b31283 --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/.idea/libraries/accessibility_test_framework_2_1.xml b/.idea/libraries/accessibility_test_framework_2_1.xml new file mode 100644 index 0000000..b81cbce --- /dev/null +++ b/.idea/libraries/accessibility_test_framework_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/adapter_rxjava2_2_2_0.xml b/.idea/libraries/adapter_rxjava2_2_2_0.xml new file mode 100644 index 0000000..c13a7f2 --- /dev/null +++ b/.idea/libraries/adapter_rxjava2_2_2_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/animated_vector_drawable_24_2_1.xml b/.idea/libraries/animated_vector_drawable_24_2_1.xml new file mode 100644 index 0000000..cb94c19 --- /dev/null +++ b/.idea/libraries/animated_vector_drawable_24_2_1.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/anko_common_0_9.xml b/.idea/libraries/anko_common_0_9.xml new file mode 100644 index 0000000..3c95c00 --- /dev/null +++ b/.idea/libraries/anko_common_0_9.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/anko_sqlite_0_9.xml b/.idea/libraries/anko_sqlite_0_9.xml new file mode 100644 index 0000000..c8ecf5f --- /dev/null +++ b/.idea/libraries/anko_sqlite_0_9.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/annotations_13_0.xml b/.idea/libraries/annotations_13_0.xml new file mode 100644 index 0000000..24c0dcb --- /dev/null +++ b/.idea/libraries/annotations_13_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/ant_1_8_0.xml b/.idea/libraries/ant_1_8_0.xml new file mode 100644 index 0000000..07bc404 --- /dev/null +++ b/.idea/libraries/ant_1_8_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/ant_launcher_1_8_0.xml b/.idea/libraries/ant_launcher_1_8_0.xml new file mode 100644 index 0000000..2dce35f --- /dev/null +++ b/.idea/libraries/ant_launcher_1_8_0.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/appcompat_v7_24_2_1.xml b/.idea/libraries/appcompat_v7_24_2_1.xml new file mode 100644 index 0000000..45e6492 --- /dev/null +++ b/.idea/libraries/appcompat_v7_24_2_1.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/asm_5_0_1.xml b/.idea/libraries/asm_5_0_1.xml new file mode 100644 index 0000000..283ec5c --- /dev/null +++ b/.idea/libraries/asm_5_0_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/asm_analysis_5_0_1.xml b/.idea/libraries/asm_analysis_5_0_1.xml new file mode 100644 index 0000000..6d8c202 --- /dev/null +++ b/.idea/libraries/asm_analysis_5_0_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/asm_commons_5_0_1.xml b/.idea/libraries/asm_commons_5_0_1.xml new file mode 100644 index 0000000..dc61cb1 --- /dev/null +++ b/.idea/libraries/asm_commons_5_0_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/asm_tree_5_0_1.xml b/.idea/libraries/asm_tree_5_0_1.xml new file mode 100644 index 0000000..cb7a1e8 --- /dev/null +++ b/.idea/libraries/asm_tree_5_0_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/asm_util_5_0_1.xml b/.idea/libraries/asm_util_5_0_1.xml new file mode 100644 index 0000000..e07f4ed --- /dev/null +++ b/.idea/libraries/asm_util_5_0_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/assertj_core_1_7_1.xml b/.idea/libraries/assertj_core_1_7_1.xml new file mode 100644 index 0000000..0ca27f9 --- /dev/null +++ b/.idea/libraries/assertj_core_1_7_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/backport_util_concurrent_3_1.xml b/.idea/libraries/backport_util_concurrent_3_1.xml new file mode 100644 index 0000000..c5272ef --- /dev/null +++ b/.idea/libraries/backport_util_concurrent_3_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/bcprov_jdk16_1_46.xml b/.idea/libraries/bcprov_jdk16_1_46.xml new file mode 100644 index 0000000..2b9e094 --- /dev/null +++ b/.idea/libraries/bcprov_jdk16_1_46.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/byte_buddy_1_5_12.xml b/.idea/libraries/byte_buddy_1_5_12.xml new file mode 100644 index 0000000..b1177c6 --- /dev/null +++ b/.idea/libraries/byte_buddy_1_5_12.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/byte_buddy_agent_1_5_12.xml b/.idea/libraries/byte_buddy_agent_1_5_12.xml new file mode 100644 index 0000000..cc34bf4 --- /dev/null +++ b/.idea/libraries/byte_buddy_agent_1_5_12.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/cardview_v7_24_2_1.xml b/.idea/libraries/cardview_v7_24_2_1.xml new file mode 100644 index 0000000..402ceb7 --- /dev/null +++ b/.idea/libraries/cardview_v7_24_2_1.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/classworlds_1_1_alpha_2.xml b/.idea/libraries/classworlds_1_1_alpha_2.xml new file mode 100644 index 0000000..fffbe19 --- /dev/null +++ b/.idea/libraries/classworlds_1_1_alpha_2.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/converter_gson_2_2_0.xml b/.idea/libraries/converter_gson_2_2_0.xml new file mode 100644 index 0000000..4ec9ffd --- /dev/null +++ b/.idea/libraries/converter_gson_2_2_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/dagger_2_5.xml b/.idea/libraries/dagger_2_5.xml new file mode 100644 index 0000000..38b15d8 --- /dev/null +++ b/.idea/libraries/dagger_2_5.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/dagger_compiler_2_5.xml b/.idea/libraries/dagger_compiler_2_5.xml new file mode 100644 index 0000000..266b87c --- /dev/null +++ b/.idea/libraries/dagger_compiler_2_5.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/dagger_producers_2_5.xml b/.idea/libraries/dagger_producers_2_5.xml new file mode 100644 index 0000000..7743dd6 --- /dev/null +++ b/.idea/libraries/dagger_producers_2_5.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/design_24_2_1.xml b/.idea/libraries/design_24_2_1.xml new file mode 100644 index 0000000..e316827 --- /dev/null +++ b/.idea/libraries/design_24_2_1.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/espresso_core_2_2_2.xml b/.idea/libraries/espresso_core_2_2_2.xml new file mode 100644 index 0000000..89b0273 --- /dev/null +++ b/.idea/libraries/espresso_core_2_2_2.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/espresso_idling_resource_2_2_2.xml b/.idea/libraries/espresso_idling_resource_2_2_2.xml new file mode 100644 index 0000000..2d50826 --- /dev/null +++ b/.idea/libraries/espresso_idling_resource_2_2_2.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/espresso_intents_2_2_2.xml b/.idea/libraries/espresso_intents_2_2_2.xml new file mode 100644 index 0000000..d50b515 --- /dev/null +++ b/.idea/libraries/espresso_intents_2_2_2.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/exposed_instrumentation_api_publish_0_5.xml b/.idea/libraries/exposed_instrumentation_api_publish_0_5.xml new file mode 100644 index 0000000..dfe7a44 --- /dev/null +++ b/.idea/libraries/exposed_instrumentation_api_publish_0_5.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/gson_2_7.xml b/.idea/libraries/gson_2_7.xml new file mode 100644 index 0000000..2260755 --- /dev/null +++ b/.idea/libraries/gson_2_7.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/guava_19_0.xml b/.idea/libraries/guava_19_0.xml new file mode 100644 index 0000000..3c0bbce --- /dev/null +++ b/.idea/libraries/guava_19_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/guava_20_0.xml b/.idea/libraries/guava_20_0.xml new file mode 100644 index 0000000..0290188 --- /dev/null +++ b/.idea/libraries/guava_20_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/hamcrest_core_1_3.xml b/.idea/libraries/hamcrest_core_1_3.xml new file mode 100644 index 0000000..157e3f3 --- /dev/null +++ b/.idea/libraries/hamcrest_core_1_3.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/hamcrest_integration_1_3.xml b/.idea/libraries/hamcrest_integration_1_3.xml new file mode 100644 index 0000000..58b2c4b --- /dev/null +++ b/.idea/libraries/hamcrest_integration_1_3.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/hamcrest_library_1_3.xml b/.idea/libraries/hamcrest_library_1_3.xml new file mode 100644 index 0000000..923d5fc --- /dev/null +++ b/.idea/libraries/hamcrest_library_1_3.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/icu4j_53_1.xml b/.idea/libraries/icu4j_53_1.xml new file mode 100644 index 0000000..1c73fa3 --- /dev/null +++ b/.idea/libraries/icu4j_53_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/ink_0_2_1.xml b/.idea/libraries/ink_0_2_1.xml new file mode 100644 index 0000000..7691dc4 --- /dev/null +++ b/.idea/libraries/ink_0_2_1.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/javawriter_2_1_1.xml b/.idea/libraries/javawriter_2_1_1.xml new file mode 100644 index 0000000..a66fefb --- /dev/null +++ b/.idea/libraries/javawriter_2_1_1.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/javax_annotation_api_1_2.xml b/.idea/libraries/javax_annotation_api_1_2.xml new file mode 100644 index 0000000..811e73f --- /dev/null +++ b/.idea/libraries/javax_annotation_api_1_2.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/javax_inject_1.xml b/.idea/libraries/javax_inject_1.xml new file mode 100644 index 0000000..eebeedd --- /dev/null +++ b/.idea/libraries/javax_inject_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/jsr250_api_1_0.xml b/.idea/libraries/jsr250_api_1_0.xml new file mode 100644 index 0000000..ee94d46 --- /dev/null +++ b/.idea/libraries/jsr250_api_1_0.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/jsr305_2_0_1.xml b/.idea/libraries/jsr305_2_0_1.xml new file mode 100644 index 0000000..cdf9878 --- /dev/null +++ b/.idea/libraries/jsr305_2_0_1.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/junit_4_12.xml b/.idea/libraries/junit_4_12.xml new file mode 100644 index 0000000..305df30 --- /dev/null +++ b/.idea/libraries/junit_4_12.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/junixsocket_common_2_0_4.xml b/.idea/libraries/junixsocket_common_2_0_4.xml new file mode 100644 index 0000000..c15ef4f --- /dev/null +++ b/.idea/libraries/junixsocket_common_2_0_4.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/junixsocket_native_common_2_0_4.xml b/.idea/libraries/junixsocket_native_common_2_0_4.xml new file mode 100644 index 0000000..0c29e0c --- /dev/null +++ b/.idea/libraries/junixsocket_native_common_2_0_4.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/kluent_1_14.xml b/.idea/libraries/kluent_1_14.xml new file mode 100644 index 0000000..2736f3e --- /dev/null +++ b/.idea/libraries/kluent_1_14.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/kotlin_reflect_1_0_6.xml b/.idea/libraries/kotlin_reflect_1_0_6.xml new file mode 100644 index 0000000..83200f8 --- /dev/null +++ b/.idea/libraries/kotlin_reflect_1_0_6.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/kotlin_stdlib_1_1_0.xml b/.idea/libraries/kotlin_stdlib_1_1_0.xml new file mode 100644 index 0000000..8d6808a --- /dev/null +++ b/.idea/libraries/kotlin_stdlib_1_1_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/kotlin_test_1_1_0.xml b/.idea/libraries/kotlin_test_1_1_0.xml new file mode 100644 index 0000000..81cd5f7 --- /dev/null +++ b/.idea/libraries/kotlin_test_1_1_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/kotlin_test_junit_1_1_0.xml b/.idea/libraries/kotlin_test_junit_1_1_0.xml new file mode 100644 index 0000000..b274368 --- /dev/null +++ b/.idea/libraries/kotlin_test_junit_1_1_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/log4j_1_2_17.xml b/.idea/libraries/log4j_1_2_17.xml new file mode 100644 index 0000000..08ce199 --- /dev/null +++ b/.idea/libraries/log4j_1_2_17.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/maven_ant_tasks_2_1_3.xml b/.idea/libraries/maven_ant_tasks_2_1_3.xml new file mode 100644 index 0000000..22fe762 --- /dev/null +++ b/.idea/libraries/maven_ant_tasks_2_1_3.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/maven_artifact_2_2_1.xml b/.idea/libraries/maven_artifact_2_2_1.xml new file mode 100644 index 0000000..1928975 --- /dev/null +++ b/.idea/libraries/maven_artifact_2_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/maven_artifact_manager_2_2_1.xml b/.idea/libraries/maven_artifact_manager_2_2_1.xml new file mode 100644 index 0000000..4b0d067 --- /dev/null +++ b/.idea/libraries/maven_artifact_manager_2_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/maven_error_diagnostics_2_2_1.xml b/.idea/libraries/maven_error_diagnostics_2_2_1.xml new file mode 100644 index 0000000..7f52bad --- /dev/null +++ b/.idea/libraries/maven_error_diagnostics_2_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/maven_model_2_2_1.xml b/.idea/libraries/maven_model_2_2_1.xml new file mode 100644 index 0000000..4cc4e57 --- /dev/null +++ b/.idea/libraries/maven_model_2_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/maven_plugin_registry_2_2_1.xml b/.idea/libraries/maven_plugin_registry_2_2_1.xml new file mode 100644 index 0000000..622d601 --- /dev/null +++ b/.idea/libraries/maven_plugin_registry_2_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/maven_profile_2_2_1.xml b/.idea/libraries/maven_profile_2_2_1.xml new file mode 100644 index 0000000..1379b0d --- /dev/null +++ b/.idea/libraries/maven_profile_2_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/maven_project_2_2_1.xml b/.idea/libraries/maven_project_2_2_1.xml new file mode 100644 index 0000000..65d60f2 --- /dev/null +++ b/.idea/libraries/maven_project_2_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/maven_repository_metadata_2_2_1.xml b/.idea/libraries/maven_repository_metadata_2_2_1.xml new file mode 100644 index 0000000..c5c2259 --- /dev/null +++ b/.idea/libraries/maven_repository_metadata_2_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/maven_settings_2_2_1.xml b/.idea/libraries/maven_settings_2_2_1.xml new file mode 100644 index 0000000..337ce90 --- /dev/null +++ b/.idea/libraries/maven_settings_2_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/mockito_core_2_4_5.xml b/.idea/libraries/mockito_core_2_4_5.xml new file mode 100644 index 0000000..cd7be73 --- /dev/null +++ b/.idea/libraries/mockito_core_2_4_5.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/mockito_kotlin_1_1_0.xml b/.idea/libraries/mockito_kotlin_1_1_0.xml new file mode 100644 index 0000000..e88741a --- /dev/null +++ b/.idea/libraries/mockito_kotlin_1_1_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/multidex_1_0_1.xml b/.idea/libraries/multidex_1_0_1.xml new file mode 100644 index 0000000..9351bda --- /dev/null +++ b/.idea/libraries/multidex_1_0_1.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/multidex_instrumentation_1_0_1.xml b/.idea/libraries/multidex_instrumentation_1_0_1.xml new file mode 100644 index 0000000..901ff28 --- /dev/null +++ b/.idea/libraries/multidex_instrumentation_1_0_1.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/native_lib_loader_2_0_2.xml b/.idea/libraries/native_lib_loader_2_0_2.xml new file mode 100644 index 0000000..dd8e347 --- /dev/null +++ b/.idea/libraries/native_lib_loader_2_0_2.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/nekohtml_1_9_6_2.xml b/.idea/libraries/nekohtml_1_9_6_2.xml new file mode 100644 index 0000000..3a7f412 --- /dev/null +++ b/.idea/libraries/nekohtml_1_9_6_2.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/objenesis_2_4.xml b/.idea/libraries/objenesis_2_4.xml new file mode 100644 index 0000000..cb86388 --- /dev/null +++ b/.idea/libraries/objenesis_2_4.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/okhttp_3_6_0.xml b/.idea/libraries/okhttp_3_6_0.xml new file mode 100644 index 0000000..472aed6 --- /dev/null +++ b/.idea/libraries/okhttp_3_6_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/okio_1_11_0.xml b/.idea/libraries/okio_1_11_0.xml new file mode 100644 index 0000000..24d5dc9 --- /dev/null +++ b/.idea/libraries/okio_1_11_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/plexus_container_default_1_0_alpha_9_stable_1.xml b/.idea/libraries/plexus_container_default_1_0_alpha_9_stable_1.xml new file mode 100644 index 0000000..693ce9b --- /dev/null +++ b/.idea/libraries/plexus_container_default_1_0_alpha_9_stable_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/plexus_interpolation_1_11.xml b/.idea/libraries/plexus_interpolation_1_11.xml new file mode 100644 index 0000000..5a86299 --- /dev/null +++ b/.idea/libraries/plexus_interpolation_1_11.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/plexus_utils_1_5_15.xml b/.idea/libraries/plexus_utils_1_5_15.xml new file mode 100644 index 0000000..7863fdf --- /dev/null +++ b/.idea/libraries/plexus_utils_1_5_15.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/protobuf_java_2_6_1.xml b/.idea/libraries/protobuf_java_2_6_1.xml new file mode 100644 index 0000000..bef1f82 --- /dev/null +++ b/.idea/libraries/protobuf_java_2_6_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/reactive_streams_1_0_0.xml b/.idea/libraries/reactive_streams_1_0_0.xml new file mode 100644 index 0000000..e0378bb --- /dev/null +++ b/.idea/libraries/reactive_streams_1_0_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/recyclerview_v7_24_2_1.xml b/.idea/libraries/recyclerview_v7_24_2_1.xml new file mode 100644 index 0000000..b428038 --- /dev/null +++ b/.idea/libraries/recyclerview_v7_24_2_1.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/retrofit_2_2_0.xml b/.idea/libraries/retrofit_2_2_0.xml new file mode 100644 index 0000000..d66c9cf --- /dev/null +++ b/.idea/libraries/retrofit_2_2_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/robolectric_3_2_1.xml b/.idea/libraries/robolectric_3_2_1.xml new file mode 100644 index 0000000..2abb0dc --- /dev/null +++ b/.idea/libraries/robolectric_3_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/robolectric_annotations_3_2_1.xml b/.idea/libraries/robolectric_annotations_3_2_1.xml new file mode 100644 index 0000000..a6f4f1c --- /dev/null +++ b/.idea/libraries/robolectric_annotations_3_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/robolectric_resources_3_2_1.xml b/.idea/libraries/robolectric_resources_3_2_1.xml new file mode 100644 index 0000000..34365b7 --- /dev/null +++ b/.idea/libraries/robolectric_resources_3_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/robolectric_utils_3_2_1.xml b/.idea/libraries/robolectric_utils_3_2_1.xml new file mode 100644 index 0000000..84b62d5 --- /dev/null +++ b/.idea/libraries/robolectric_utils_3_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/rules_0_5.xml b/.idea/libraries/rules_0_5.xml new file mode 100644 index 0000000..60d8bd5 --- /dev/null +++ b/.idea/libraries/rules_0_5.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/runner_0_5.xml b/.idea/libraries/runner_0_5.xml new file mode 100644 index 0000000..83ceda4 --- /dev/null +++ b/.idea/libraries/runner_0_5.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/rxandroid_2_0_1.xml b/.idea/libraries/rxandroid_2_0_1.xml new file mode 100644 index 0000000..0178d5f --- /dev/null +++ b/.idea/libraries/rxandroid_2_0_1.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/rxjava_2_0_0.xml b/.idea/libraries/rxjava_2_0_0.xml new file mode 100644 index 0000000..0fecde8 --- /dev/null +++ b/.idea/libraries/rxjava_2_0_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/rxjava_2_0_6.xml b/.idea/libraries/rxjava_2_0_6.xml new file mode 100644 index 0000000..f51115d --- /dev/null +++ b/.idea/libraries/rxjava_2_0_6.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/shadows_core_3_2_1.xml b/.idea/libraries/shadows_core_3_2_1.xml new file mode 100644 index 0000000..78a56cf --- /dev/null +++ b/.idea/libraries/shadows_core_3_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/sqlite4java_0_282.xml b/.idea/libraries/sqlite4java_0_282.xml new file mode 100644 index 0000000..8866bc2 --- /dev/null +++ b/.idea/libraries/sqlite4java_0_282.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/support_annotations_24_2_1.xml b/.idea/libraries/support_annotations_24_2_1.xml new file mode 100644 index 0000000..6805fc1 --- /dev/null +++ b/.idea/libraries/support_annotations_24_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/support_compat_24_2_1.xml b/.idea/libraries/support_compat_24_2_1.xml new file mode 100644 index 0000000..c4ce543 --- /dev/null +++ b/.idea/libraries/support_compat_24_2_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/support_core_ui_24_2_1.xml b/.idea/libraries/support_core_ui_24_2_1.xml new file mode 100644 index 0000000..2e25ead --- /dev/null +++ b/.idea/libraries/support_core_ui_24_2_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/support_core_utils_24_2_1.xml b/.idea/libraries/support_core_utils_24_2_1.xml new file mode 100644 index 0000000..cea8fb6 --- /dev/null +++ b/.idea/libraries/support_core_utils_24_2_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/support_fragment_24_2_1.xml b/.idea/libraries/support_fragment_24_2_1.xml new file mode 100644 index 0000000..130b965 --- /dev/null +++ b/.idea/libraries/support_fragment_24_2_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/support_media_compat_24_2_1.xml b/.idea/libraries/support_media_compat_24_2_1.xml new file mode 100644 index 0000000..d05f9d7 --- /dev/null +++ b/.idea/libraries/support_media_compat_24_2_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/support_v4_24_2_1.xml b/.idea/libraries/support_v4_24_2_1.xml new file mode 100644 index 0000000..fadecae --- /dev/null +++ b/.idea/libraries/support_v4_24_2_1.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/support_vector_drawable_24_2_1.xml b/.idea/libraries/support_vector_drawable_24_2_1.xml new file mode 100644 index 0000000..1b6ff69 --- /dev/null +++ b/.idea/libraries/support_vector_drawable_24_2_1.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/vtd_xml_2_11.xml b/.idea/libraries/vtd_xml_2_11.xml new file mode 100644 index 0000000..fe8507f --- /dev/null +++ b/.idea/libraries/vtd_xml_2_11.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/wagon_file_1_0_beta_6.xml b/.idea/libraries/wagon_file_1_0_beta_6.xml new file mode 100644 index 0000000..a3caeb7 --- /dev/null +++ b/.idea/libraries/wagon_file_1_0_beta_6.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/wagon_http_lightweight_1_0_beta_6.xml b/.idea/libraries/wagon_http_lightweight_1_0_beta_6.xml new file mode 100644 index 0000000..032bfbc --- /dev/null +++ b/.idea/libraries/wagon_http_lightweight_1_0_beta_6.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/wagon_http_shared_1_0_beta_6.xml b/.idea/libraries/wagon_http_shared_1_0_beta_6.xml new file mode 100644 index 0000000..ec56128 --- /dev/null +++ b/.idea/libraries/wagon_http_shared_1_0_beta_6.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/wagon_provider_api_1_0_beta_6.xml b/.idea/libraries/wagon_provider_api_1_0_beta_6.xml new file mode 100644 index 0000000..a3474ce --- /dev/null +++ b/.idea/libraries/wagon_provider_api_1_0_beta_6.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/xercesMinimal_1_9_6_2.xml b/.idea/libraries/xercesMinimal_1_9_6_2.xml new file mode 100644 index 0000000..28d003d --- /dev/null +++ b/.idea/libraries/xercesMinimal_1_9_6_2.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/xmlpull_1_1_3_1.xml b/.idea/libraries/xmlpull_1_1_3_1.xml new file mode 100644 index 0000000..28caf95 --- /dev/null +++ b/.idea/libraries/xmlpull_1_1_3_1.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/xpp3_min_1_1_4c.xml b/.idea/libraries/xpp3_min_1_1_4c.xml new file mode 100644 index 0000000..c933d22 --- /dev/null +++ b/.idea/libraries/xpp3_min_1_1_4c.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/xstream_1_4_8.xml b/.idea/libraries/xstream_1_4_8.xml new file mode 100644 index 0000000..b5ff481 --- /dev/null +++ b/.idea/libraries/xstream_1_4_8.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..93f5422 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..a297191 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..2f1f5ac --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,5310 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1499770919328 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Android-CleanArchitecture.iml b/Android-CleanArchitecture.iml new file mode 100755 index 0000000..93b5911 --- /dev/null +++ b/Android-CleanArchitecture.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..e7623c0 --- /dev/null +++ b/build.gradle @@ -0,0 +1,42 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +apply from: 'buildsystem/ci.gradle' +apply from: 'buildsystem/dependencies.gradle' +apply plugin: 'kotlin' + +buildscript { + ext.kotlin_version = '1.1.0' + repositories { + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:2.2.3' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" + classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version" + } +} + +allprojects { + ext { + androidApplicationId = 'es.verdnatura.vndelivery.presentation' + androidVersionCode = 3 + androidVersionName = "1.0.2" + testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner" + testApplicationId = 'es.verdnatura.vndelivery.presentation.test' + } +} + +task customClean(type: Delete) { + delete rootProject.buildDir +} +clean.dependsOn customClean + +repositories { + mavenCentral() +} +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" +} +sourceSets { + main.java.srcDirs += 'src/main/kotlin' +} diff --git a/build/generated/mockable-android-24.jar b/build/generated/mockable-android-24.jar new file mode 100644 index 0000000..ca7aac9 Binary files /dev/null and b/build/generated/mockable-android-24.jar differ diff --git a/build/kotlin-build/caches/version.txt b/build/kotlin-build/caches/version.txt new file mode 100644 index 0000000..01aabac --- /dev/null +++ b/build/kotlin-build/caches/version.txt @@ -0,0 +1 @@ +11001 \ No newline at end of file diff --git a/buildsystem/ci.gradle b/buildsystem/ci.gradle new file mode 100644 index 0000000..53420ee --- /dev/null +++ b/buildsystem/ci.gradle @@ -0,0 +1,13 @@ +def ciServer = 'TRAVIS' +def executingOnCI = "true".equals(System.getenv(ciServer)) + +// Since for CI we always do full clean builds, we don't want to pre-dex +// See http://tools.android.com/tech-docs/new-build-system/tips +subprojects { + project.plugins.whenPluginAdded { plugin -> + if ('com.android.build.gradle.AppPlugin'.equals(plugin.class.name) || + 'com.android.build.gradle.LibraryPlugin'.equals(plugin.class.name)) { + project.android.dexOptions.preDexLibraries = !executingOnCI + } + } +} \ No newline at end of file diff --git a/buildsystem/dependencies.gradle b/buildsystem/dependencies.gradle new file mode 100644 index 0000000..d53e846 --- /dev/null +++ b/buildsystem/dependencies.gradle @@ -0,0 +1,136 @@ +allprojects { + repositories { + jcenter() + } +} + +ext{ + //Android + androidBuildToolsVersion = "24.0.1" + androidMinSdkVersion = 15 + androidTargetSdkVersion = 24 + androidCompileSdkVersion = 24 + + //Libraries + gsonVersion = '2.3' + retrofitVersion = '2.2.0' + rxJavaVersion = '2.0.6' + rxAndroidVersion = '2.0.1' + daggerVersion = '2.5' + javaxInjectVersion = '1' + javaxAnnotationVersion = '1.0' + kotlinVersion = "1.1.0" + appcompatV7Version = "24.2.1" + butterKnifeVersion = '8.5.1' + barcodeScannerVersion = '1.9' + ankoVersion = '0.9' + designVersion = '24.2.1' + inkViewVersion = "0.2.1@aar" + okio = "1.11.0" + + + //Test + jUnitVersion = '4.12' + roboelectricVersion = '3.2.1' + kotlinVersion = '1.1.0' + kotlinTestVersion = '1.1.0' + mockitoKotlin = '1.1.0' + kluenVersion = '1.14' + assertJVersion = '1.7.1' + + //androidTest + espressoVersion = '2.2.2' + annotationsVersion = '24.2.1' + rulesVersion = "0.5" + + //Development + leakCanaryVersion = '1.3.1' + + + dataDependencies = [ + kotlin: "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}", + rxJava: "io.reactivex.rxjava2:rxjava:${rxJavaVersion}", + rxAndroid: "io.reactivex.rxjava2:rxandroid:${rxAndroidVersion}", + daggerCompiler: "com.google.dagger:dagger-compiler:${daggerVersion}", + dagger: "com.google.dagger:dagger:${daggerVersion}", + retrofit: "com.squareup.retrofit2:retrofit:${retrofitVersion}", + gson_converter: "com.squareup.retrofit2:converter-gson:${retrofitVersion}", + rxjava_adapter: "com.squareup.retrofit2:adapter-rxjava2:${retrofitVersion}" + ] + + dataTestDependencies = [ + jUnit: "junit:junit:${jUnitVersion}", + roboelectric: "org.robolectric:robolectric:${roboelectricVersion}", + kotlin: "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}", + kotlinTest: "org.jetbrains.kotlin:kotlin-test-junit:${kotlinTestVersion}", + mockitoKotlin: "com.nhaarman:mockito-kotlin:${mockitoKotlin}", + kluent: "org.amshove.kluent:kluent:${kluenVersion}", + ] + + domainDependencies = [ + rxJava: "io.reactivex.rxjava2:rxjava:${rxJavaVersion}", + javaxInject: "javax.inject:javax.inject:${javaxInjectVersion}", + kotlin: "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}", + gson: "com.google.code.gson:gson:${gsonVersion}", + javaxAnnotation: "javax.annotation:jsr250-api:${javaxAnnotationVersion}", + okio: "com.squareup.okio:okio:${okio}", + ] + + domainTestDependencies = [ + jUnit: "junit:junit:${jUnitVersion}", + kotlin: "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}", + kotlinTest: "org.jetbrains.kotlin:kotlin-test-junit:${kotlinTestVersion}", + mockitoKotlin: "com.nhaarman:mockito-kotlin:${mockitoKotlin}", + kluent: "org.amshove.kluent:kluent:${kluenVersion}", + assertj: "org.assertj:assertj-core:${assertJVersion}" + ] + + presentationDependencies = [ + kotlin: "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}", + appcomapt_v7: "com.android.support:appcompat-v7:${appcompatV7Version}", + dagger: "com.google.dagger:dagger:${daggerVersion}", + butterKnife: "com.jakewharton:butterknife:${butterKnifeVersion}", + kaptButterKnife: "com.jakewharton:butterknife-compiler:${butterKnifeVersion}", + kaptDagger: "com.google.dagger:dagger-compiler:${daggerVersion}", + rxAndroid: "io.reactivex.rxjava2:rxandroid:${rxAndroidVersion}", + javaxAnnotation: "javax.annotation:jsr250-api:${javaxAnnotationVersion}", + barcodeScanner: "me.dm7.barcodescanner:zxing:${barcodeScannerVersion}", + inkView: "com.simplify:ink:${inkViewVersion}" + ] + + presentationTestDependencies = [ + jUnit: "junit:junit:${jUnitVersion}", + roboelectric: "org.robolectric:robolectric:${roboelectricVersion}", + kotlin: "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}", + kotlinTest: "org.jetbrains.kotlin:kotlin-test-junit:${kotlinTestVersion}", + mockitoKotlin: "com.nhaarman:mockito-kotlin:${mockitoKotlin}", + kluent: "org.amshove.kluent:kluent:${kluenVersion}", + ] + + presentationAndroidTestDependencies = [ + espresso: "com.android.support.test.espresso:espresso-core:${espressoVersion}", + runner: "com.android.support.test:runner:${rulesVersion}", + rules: "com.android.support.test:rules:${rulesVersion}", + espressoIntents: "com.android.support.test.espresso:espresso-intents:${espressoVersion}", + annotations: "com.android.support:support-annotations:${annotationsVersion}", + ] + + coreDependencies = [ + kotlin: "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}", + appcomapt_v7: "com.android.support:appcompat-v7:${appcompatV7Version}", + recyclerview: "com.android.support:recyclerview-v7:${appcompatV7Version}", + cardview: "com.android.support:cardview-v7:${appcompatV7Version}", + anko: "org.jetbrains.anko:anko-common:${ankoVersion}", + design: "com.android.support:design:${designVersion}", + retrofit: "com.squareup.retrofit2:retrofit:${retrofitVersion}", + gson_converter: "com.squareup.retrofit2:converter-gson:${retrofitVersion}", + rxjava_adapter: "com.squareup.retrofit2:adapter-rxjava2:${retrofitVersion}", + javaxInject: "javax.inject:javax.inject:${javaxInjectVersion}", + ankoSqlite: "org.jetbrains.anko:anko-sqlite:${ankoVersion}" + ] + + developmentDependencies = [ + leakCanary: "com.squareup.leakcanary:leakcanary-android:${leakCanaryVersion}", + ] + +} \ No newline at end of file diff --git a/data/.gitignore b/data/.gitignore new file mode 100644 index 0000000..855ff81 --- /dev/null +++ b/data/.gitignore @@ -0,0 +1,42 @@ +# Built application files +*.apk +*.ap_ + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# Intellij +*.iml +.idea/workspace.xml + +# Keystore files +*.jks + +.idea/ diff --git a/data/.hgignore b/data/.hgignore new file mode 100644 index 0000000..bcbc259 --- /dev/null +++ b/data/.hgignore @@ -0,0 +1,43 @@ +syntax: glob +# Built application files +*.apk +*.ap_ + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# Intellij +*.iml +.idea/workspace.xml + +# Keystore files +*.jks + +.idea/ diff --git a/data/build.gradle b/data/build.gradle new file mode 100644 index 0000000..0269967 --- /dev/null +++ b/data/build.gradle @@ -0,0 +1,62 @@ +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' + +android { + def globalConfiguration = rootProject.extensions.getByName("ext") + + compileSdkVersion globalConfiguration.getAt("androidCompileSdkVersion") + buildToolsVersion globalConfiguration.getAt("androidBuildToolsVersion") + + defaultConfig { + minSdkVersion globalConfiguration.getAt("androidMinSdkVersion") + targetSdkVersion globalConfiguration.getAt("androidTargetSdkVersion") + + versionCode globalConfiguration.getAt("androidVersionCode") + versionName globalConfiguration.getAt("androidVersionName") + + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + + } + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + test.java.srcDirs += 'src/test/kotlin' + } + +} + +dependencies { + def dataDependencies = rootProject.ext.dataDependencies + def dataTestDependencies = rootProject.ext.dataTestDependencies + + compile project(":domain") + compile project(':vncore') + + compile dataDependencies.kotlin + compile dataDependencies.rxJava + compile dataDependencies.daggerCompiler + compile dataDependencies.dagger + compile dataDependencies.retrofit + compile dataDependencies.gson_converter + compile dataDependencies.rxjava_adapter + + testCompile dataTestDependencies.jUnit + testCompile dataTestDependencies.roboelectric + testCompile dataTestDependencies.kotlin + testCompile dataTestDependencies.kotlinTest + testCompile dataTestDependencies.mockitoKotlin + testCompile dataTestDependencies.kluent + + compile fileTree(dir: 'libs', include: '*.jar') + +} + +repositories { + mavenCentral() +} diff --git a/data/proguard-rules.pro b/data/proguard-rules.pro new file mode 100644 index 0000000..f6f0958 --- /dev/null +++ b/data/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Users/nelo/Library/Android/sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/data/src/main/AndroidManifest.xml b/data/src/main/AndroidManifest.xml new file mode 100644 index 0000000..6f1cc2b --- /dev/null +++ b/data/src/main/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/data/src/main/kotlin/es/verdnatura/data/database/RouteDb.kt b/data/src/main/kotlin/es/verdnatura/data/database/RouteDb.kt new file mode 100644 index 0000000..77d0cb6 --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/database/RouteDb.kt @@ -0,0 +1,130 @@ +package es.verdnatura.data.database + +import es.verdnatura.core.UtilsDateTime +import es.verdnatura.core.database.VnOpenHelper +import es.verdnatura.data.database.tables.TablePhone +import es.verdnatura.data.database.tables.TableRoute +import es.verdnatura.data.database.tables.TableTicket +import es.verdnatura.domain.entity.Route +import org.jetbrains.anko.db.* +import javax.inject.Inject +import javax.inject.Singleton + +/** + * Created by nelo on 5/7/17. + */ +@Singleton +class RouteDb { + + val db: VnOpenHelper + + @Inject + constructor(db: VnOpenHelper){ + this.db = db + createTable() + } + + fun createTable(){ + db.use { + createTable(TableRoute.TABLE_ROUTE, true, + TableRoute.ID to INTEGER, + TableRoute.HOUR to TEXT, + TableRoute.DATE to TEXT, + TableRoute.DRIVER to TEXT, + TableRoute.M3 to REAL, + TableRoute.PLATE to TEXT, + TableRoute.AGENCY to TEXT) + } + } + + fun createRoutes(routes: List){ + val list = filterRoutes(routes) + list.forEach { insertRoute(it) } + } + + private fun insertRoute(r: Route){ + db.use { + insert(TableRoute.TABLE_ROUTE, + TableRoute.ID to r.Id, + TableRoute.HOUR to r.Hour, + TableRoute.DATE to r.Date, + TableRoute.M3 to r.M3, + TableRoute.PLATE to r.Plate, + TableRoute.AGENCY to r.Agency, + TableRoute.DRIVER to r.Driver) + } + } + + private fun filterRoutes(routes: List): List{ + val list = selectRoutes(false) + val ids = list.map { r -> r.Id } + return routes.filter { r -> !ids.contains(r.Id) } + } + + fun deleteRoutes(){ + var routes = listOf() + var tickets = listOf() + val date = UtilsDateTime.addDaysAndReturnDateString(-15) + + db.use { + + select(TableRoute.TABLE_ROUTE, + TableRoute.ID) + .where("${TableRoute.DATE} <= '${date}'") + .exec { routes = parseList(IntParser) } + + if(routes.size > 0){ + select(TableTicket.TABLE_TICKET, + TableTicket.ID) + .where("${TableTicket.ROUTE_ID} IN (${idsToString(routes)})") + .exec { tickets = parseList(IntParser) } + + delete(TableRoute.TABLE_ROUTE, "${TableRoute.ID} IN (${idsToString(routes)})", arrayOf()) + delete(TableTicket.TABLE_TICKET, "${TableTicket.ID} IN (${idsToString(tickets)})", arrayOf()) + delete(TablePhone.TABLE_PHONE, "${TablePhone.TICKET_ID} IN (${idsToString(tickets)})", arrayOf()) + } + } + } + + fun selectRoutes(onlyToday: Boolean = true): List { + var routes = listOf() + var parser = RouteParser() + val today = UtilsDateTime.getTodayString() + db.use { + var sql = select(TableRoute.TABLE_ROUTE, + TableRoute.ID, + TableRoute.AGENCY, + TableRoute.DATE, + TableRoute.DRIVER, + TableRoute.HOUR, + TableRoute.M3, + TableRoute.PLATE) + if(onlyToday) + sql = sql.whereSimple("${TableRoute.DATE} = ?", today) + sql.exec { + routes = parseList(parser) + } + } + + return routes + } + + private class RouteParser: MapRowParser{ + override fun parseRow(columns: Map): Route { + return Route((columns[TableRoute.ID] as Long).toInt(), + columns[TableRoute.HOUR] as String, + columns[TableRoute.DATE] as String, + columns[TableRoute.M3].toString().toDouble(), + columns[TableRoute.PLATE] as String, + columns[TableRoute.AGENCY] as String, + columns[TableRoute.DRIVER] as String) + } + + } + + private fun idsToString(ids: List): String{ + val s = ids.fold(""){s, its -> s + its + ","} + return s.substring(0, s.length - 1) + } + +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/database/TicketDb.kt b/data/src/main/kotlin/es/verdnatura/data/database/TicketDb.kt new file mode 100644 index 0000000..99b06c7 --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/database/TicketDb.kt @@ -0,0 +1,110 @@ +package es.verdnatura.data.database + +import es.verdnatura.core.database.VnOpenHelper +import es.verdnatura.data.database.tables.TablePhone +import es.verdnatura.data.database.tables.TableTicket +import es.verdnatura.data.database.ticket.SignOps +import es.verdnatura.data.database.ticket.UploadOps +import es.verdnatura.data.entity.SignDataDto +import es.verdnatura.data.entity.SignDataUpload +import es.verdnatura.domain.entity.Ticket +import org.jetbrains.anko.db.* +import javax.inject.Inject +import javax.inject.Singleton + +/** + * Created by nelo on 7/7/17. + */ +@Singleton +class TicketDb { + + val db: VnOpenHelper + val ticketOps: es.verdnatura.data.database.ticket.TicketOps + val uploadOpsTickes: UploadOps + val signOps: SignOps + + @Inject + constructor(db: VnOpenHelper) { + this.db = db + createTable() + ticketOps = es.verdnatura.data.database.ticket.TicketOps(db) + uploadOpsTickes = UploadOps(db) + signOps = SignOps(db) + } + + fun createTable(){ + db.use { + createTable(TableTicket.TABLE_TICKET, true, + TableTicket.ID to INTEGER, + TableTicket.CLIENT to INTEGER, + TableTicket.CLIENT_NAME to TEXT, + TableTicket.ADDRESS to INTEGER, + TableTicket.ADDRESS_NAME to REAL, + TableTicket.PACKAGES to INTEGER, + TableTicket.POSTAL_CODE to TEXT, + TableTicket.CITY to TEXT, + TableTicket.WAREHOUSE to TEXT, + TableTicket.LONGITUDE to REAL, + TableTicket.LATITUDE to REAL, + TableTicket.NOTE to TEXT, + TableTicket.SALE_PERSON_PHONE to TEXT, + TableTicket.SIGN to TEXT, + TableTicket.SIGNED to INTEGER, + TableTicket.UPLOADED to INTEGER, + TableTicket.ROUTE_ID to INTEGER, + TableTicket.UPDATE_INTENT to INTEGER) + + createTable(TablePhone.TABLE_PHONE, true, + TablePhone.PHONE to TEXT, + TablePhone.TICKET_ID to INTEGER) + } + } + + fun createTickets(route: Int, tickets: List) { + ticketOps.createTickets(route, tickets) + } + + fun getSignedTicketsIds(route: Int): List { + return signOps.getSignedTicketsIds(route) + } + + fun getSignedTickets(route: Int): List { + return signOps.getSignedTickets(route) + } + + fun getUnsignedTickets(route: Int): List { + return signOps.getUnsignedTickets(route) + } + + fun getUploadedTickets(route: Int): List { + return signOps.getUploadedTickets(route) + } + + fun selectTickets(route: Int): List { + return ticketOps.selectTickets(route) + } + + fun signTicket(tickets: List, file: String, long: Double?, lat: Double?) { + signOps.signTicket(tickets, file, long, lat) + } + + fun getDataToUpload(sign: String? = null): SignDataUpload { + return uploadOpsTickes.getDataForUpload(sign) + } + + fun markTicketsAsUploaded(tickets: List){ + ticketOps.markTickedUpload(tickets) + } + + fun increaseUploadIntent(ticket: List){ + ticketOps.increaseUploadIntent(ticket) + } + + fun getDataTicketsSigned(): List { + return signOps.getDataTicketsSigned() + } + + fun deleteBySign(sign: String){ + ticketOps.deleteTicketsBysign(sign) + } +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/database/tables/TablePhone.kt b/data/src/main/kotlin/es/verdnatura/data/database/tables/TablePhone.kt new file mode 100644 index 0000000..a7bbf1a --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/database/tables/TablePhone.kt @@ -0,0 +1,14 @@ +package es.verdnatura.data.database.tables + +/** + * Created by nelo on 5/7/17. + */ +class TablePhone { + + companion object { + val TABLE_PHONE = "TABLE_PHONE" + val PHONE = "PHONE" + val TICKET_ID = "TICKET_ID" + } + +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/database/tables/TableRoute.kt b/data/src/main/kotlin/es/verdnatura/data/database/tables/TableRoute.kt new file mode 100644 index 0000000..dafdc1f --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/database/tables/TableRoute.kt @@ -0,0 +1,20 @@ +package es.verdnatura.data.database.tables + +/** + * Created by nelo on 4/7/17. + */ +class TableRoute { + + companion object { + + val TABLE_ROUTE = "TABLE_ROUTE" + val ID = "ID" + val HOUR = "HOUR" + val DATE = "DATE" + val M3 = "M3" + val PLATE = "PLATE" + val AGENCY = "AGENCY" + val DRIVER = "DRIVER" + } + +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/database/tables/TableTicket.kt b/data/src/main/kotlin/es/verdnatura/data/database/tables/TableTicket.kt new file mode 100644 index 0000000..30388bd --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/database/tables/TableTicket.kt @@ -0,0 +1,32 @@ +package es.verdnatura.data.database.tables + +/** + * Created by nelo on 5/7/17. + */ +class TableTicket { + + companion object { + + val TABLE_TICKET = "TABLE_TICKET" + val ID = "ID" + val CLIENT = "CLIENT" + val CLIENT_NAME = "CLIENT_NAME" + val ADDRESS = "ADDRESS" + val ADDRESS_NAME = "ADDRESS_NAME" + val PACKAGES = "PACKAGES" + val POSTAL_CODE = "POSTAL_CODE" + val CITY = "CITY" + val WAREHOUSE = "WAREHOUSE" + val LONGITUDE = "LONGITUDE" + val LATITUDE = "LATITUDE" + val NOTE = "NOTE" + val SALE_PERSON_PHONE = "SALE_PERSON_PHONE" + val SIGN = "SIGN" + val SIGNED = "SIGNED" + val UPLOADED = "UPLOADED" + val ROUTE_ID = "ROUTE_ID" + val UPDATE_INTENT = "UPDATE_INTENT" + } + + +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/database/ticket/SignOps.kt b/data/src/main/kotlin/es/verdnatura/data/database/ticket/SignOps.kt new file mode 100644 index 0000000..416bbbd --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/database/ticket/SignOps.kt @@ -0,0 +1,116 @@ +package es.verdnatura.data.database.ticket + +import es.verdnatura.core.database.VnOpenHelper +import es.verdnatura.data.database.tables.TableTicket +import es.verdnatura.data.entity.LocationDto +import es.verdnatura.data.entity.SignDataDto +import es.verdnatura.domain.entity.Ticket +import org.jetbrains.anko.db.* + +/** + * Created by nelo on 12/7/17. + */ +class SignOps(val db: VnOpenHelper) { + + fun signTicket(tickets: List, file: String, long: Double?, lat: Double?){ + + val where = tickets.map { id -> id.toString() }.fold(""){s, its -> s + its + ","} + val idsString = where.substring(0, where.length - 1) + db.use { + update(TableTicket.TABLE_TICKET, + TableTicket.SIGN to file, + TableTicket.LONGITUDE to long, + TableTicket.LATITUDE to lat, + TableTicket.SIGNED to 1) + .where("${TableTicket.ID} in (${idsString})") + .exec() + } + } + + fun getSignedTicketsIds(route: Int): List{ + return getSignedTickets(route).map { t -> t.Id } + } + + fun getSignedTickets(route: Int): List{ + var tickets = listOf() + + db.use { + select(TableTicket.TABLE_TICKET, TableTicket.ID) + .whereSimple("${TableTicket.ROUTE_ID} = ? and ${TableTicket.SIGNED} = 1", route.toString()) + .exec { tickets = parseList(TicketOps.TicketParser()) } + } + + return tickets + } + + fun getUnsignedTickets(route: Int): List { + var tickets = listOf() + + db.use { + select(TableTicket.TABLE_TICKET, TableTicket.ID) + .whereSimple("${TableTicket.ROUTE_ID} = ? and ${TableTicket.SIGNED} = 0", route.toString()) + .exec { tickets = parseList(TicketOps.TicketParser()) } + } + + return tickets + } + + fun getUploadedTickets(route: Int): List{ + var tickets = listOf() + + db.use { + select(TableTicket.TABLE_TICKET, TableTicket.ID) + .whereSimple("${TableTicket.ROUTE_ID} = ? and ${TableTicket.UPLOADED} = 1", route.toString()) + .exec { tickets = parseList(IntParser) } + } + + return tickets + } + + fun getDataTicketsSigned(): List{ + var dbData = listOf() + var data = mutableListOf() + + db.use { + select(TableTicket.TABLE_TICKET, + TableTicket.ROUTE_ID, TableTicket.CLIENT, TableTicket.ADDRESS, TableTicket.ID, TableTicket.SIGN, TableTicket.UPLOADED) + .where("${TableTicket.SIGNED} = 1") + .exec { dbData = parseList(SignDataParser()) } + } + + for(db in dbData){ + var elements = data.filter { d -> (db.Route == d.Route && db.Address == d.Address) } + var element: SignDataDto + if(elements.size == 0) { + element = SignDataDto(db.Route, db.Client, db.Address, db.Sign, db.Uploaded) + data.add(element) + } + else{ + element = elements[0] + } + element?.Tickets?.add(db.Tickets[0]) + } + + return data + + } + + class SignDataParser: MapRowParser{ + override fun parseRow(columns: Map): SignDataDto { + + return SignDataDto(columns[TableTicket.ROUTE_ID].toString().toInt(), + columns[TableTicket.CLIENT].toString().toInt(), + columns[TableTicket.ADDRESS].toString().toInt(), + columns[TableTicket.SIGN].toString(), + intToBoolean(columns[TableTicket.UPLOADED].toString().toInt()), + mutableListOf(columns[TableTicket.ID].toString().toInt())) + } + + private fun intToBoolean(value: Int): Boolean{ + if(value == 1) + return true + return false + } + } + +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/database/ticket/TicketOps.kt b/data/src/main/kotlin/es/verdnatura/data/database/ticket/TicketOps.kt new file mode 100644 index 0000000..f3d2e05 --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/database/ticket/TicketOps.kt @@ -0,0 +1,177 @@ +package es.verdnatura.data.database.ticket + +import es.verdnatura.core.database.VnOpenHelper +import es.verdnatura.data.database.tables.TablePhone +import es.verdnatura.data.database.tables.TableTicket +import es.verdnatura.domain.entity.Ticket +import org.jetbrains.anko.db.* + +/** + * Created by nelo on 12/7/17. + */ +class TicketOps(val db: VnOpenHelper) { + + fun createTickets(route: Int, tickets: List) { + val list = filterTickets(route, tickets, false) + list.forEach { ticket -> insertTicket(route, ticket) } + val update = filterTickets(route, tickets, true) + update.forEach { ticket -> uploadTickets(ticket) } + val listIdFromServer = transformIdsToString(tickets.map { t -> t.Id }) + deleteTickets(route, listIdFromServer) + } + + fun selectTickets(route: Int): List{ + var tickets = listOf() + + db.use { + select(TableTicket.TABLE_TICKET, "*") + .whereSimple("${TableTicket.ROUTE_ID} = ?", route.toString()) + .exec { tickets = parseList(TicketParser()) } + } + + tickets.forEach { t -> t.Phones = getPhones(t.Id) } + + return tickets + } + + fun markTickedUpload(tickets: List){ + val idsString = transformIdsToString(tickets) + db.use { + update(TableTicket.TABLE_TICKET, + TableTicket.UPLOADED to 1) + .where("${TableTicket.ID} in (${idsString})") + .exec() + } + } + + fun increaseUploadIntent(tickets: List) { + val idsString = transformIdsToString(tickets) + var updateIntent = 0 + + db.use { + select(TableTicket.TABLE_TICKET, + TableTicket.UPDATE_INTENT) + .whereSimple("${TableTicket.ID} in (${idsString}) limit 1") + .exec { updateIntent = parseSingle(IntParser) } + } + + db.use { + update(TableTicket.TABLE_TICKET, + TableTicket.UPDATE_INTENT to updateIntent + 1) + .where("${TableTicket.ID} in (${idsString})") + .exec() + } + } + + fun deleteTicketsBysign(sign: String){ + var tickets = listOf() + db.use { + select(TableTicket.TABLE_TICKET, + TableTicket.ID) + .whereSimple("${TableTicket.SIGN} = ?", sign) + .exec { tickets = parseList(IntParser) } + } + + if(tickets.isNotEmpty()) + { + db.use { + delete(TableTicket.TABLE_TICKET, "${TableTicket.ID} IN (${transformIdsToString(tickets)})", arrayOf()) + delete(TablePhone.TABLE_PHONE, "${TablePhone.TICKET_ID} IN (${transformIdsToString(tickets)})", arrayOf()) + } + } + } + + private fun insertTicket(route: Int, ticket: Ticket) { + db.use { + insert(TableTicket.TABLE_TICKET, + TableTicket.ID to ticket.Id, + TableTicket.CLIENT to ticket.Client, + TableTicket.CLIENT_NAME to ticket.ClientName, + TableTicket.ADDRESS to ticket.Address, + TableTicket.ADDRESS_NAME to ticket.AddressName, + TableTicket.PACKAGES to ticket.Packages, + TableTicket.POSTAL_CODE to ticket.PostalCode, + TableTicket.CITY to ticket.City, + TableTicket.WAREHOUSE to ticket.Warehouse, + TableTicket.LONGITUDE to ticket.Loc.Longitude, + TableTicket.LATITUDE to ticket.Loc.Latitude, + TableTicket.NOTE to ticket.Note, + TableTicket.SALE_PERSON_PHONE to ticket.SalePersonPhone, + TableTicket.ROUTE_ID to route, + TableTicket.UPDATE_INTENT to 0, + TableTicket.SIGNED to 0, + TableTicket.UPLOADED to 0) + } + + ticket.Phones.forEach { phone -> insertPhones(ticket.Id, phone) } + } + + private fun uploadTickets(ticket: Ticket){ + db.use { + update(TableTicket.TABLE_TICKET, + TableTicket.PACKAGES to ticket.Packages) + .whereSimple("${TableTicket.ID} = ?", ticket.Id.toString()) + } + } + + private fun insertPhones(ticket: Int, phones: String){ + db.use { + insert(TablePhone.TABLE_PHONE, + TablePhone.PHONE to phones, + TablePhone.TICKET_ID to ticket) + } + } + + private fun filterTickets(route: Int, tickets: List, contains: Boolean): List{ + val list = selectTickets(route) + val ids = list.map { t -> t.Id } + if(contains) + return tickets.filter { t -> ids.contains(t.Id) } + else + return tickets.filter { t -> !ids.contains(t.Id) } + } + + private fun getPhones(ticketId: Int): List{ + var phones = listOf() + db.use { + select(TablePhone.TABLE_PHONE, TablePhone.PHONE) + .whereSimple("${TablePhone.TICKET_ID} = ?", ticketId.toString()) + .exec { phones = parseList(StringParser) } + } + + return phones + } + + class TicketParser: MapRowParser { + override fun parseRow(columns: Map): Ticket { + return Ticket( + (columns[TableTicket.ID] as Long).toInt(), + (columns[TableTicket.CLIENT] as Long).toInt(), + (columns[TableTicket.CLIENT_NAME] as String), + (columns[TableTicket.ADDRESS] as Long).toInt(), + (columns[TableTicket.ADDRESS_NAME] as String), + (columns[TableTicket.PACKAGES] as Long).toInt(), + (columns[TableTicket.POSTAL_CODE] as String), + (columns[TableTicket.CITY] as String), + (columns[TableTicket.WAREHOUSE] as String), + (columns[TableTicket.SALE_PERSON_PHONE] as String), + (columns[TableTicket.NOTE] as String), + columns[TableTicket.LONGITUDE].toString(), + columns[TableTicket.LATITUDE].toString(), + columns[TableTicket.SIGNED].toString().toInt(), + columns[TableTicket.UPLOADED].toString().toInt()) + } + + } + + private fun transformIdsToString(tickets: List): String{ + val where = tickets.map { id -> id.toString() }.fold(""){s, its -> s + its + ","} + return where.substring(0, where.length - 1) + } + + private fun deleteTickets(route: Int, ticketByComa: String){ + db.use { + delete(TableTicket.TABLE_TICKET, "${TableTicket.ID} NOT IN (${ticketByComa}) AND ${TableTicket.ROUTE_ID} = ${route}") + } + } +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/database/ticket/UploadOps.kt b/data/src/main/kotlin/es/verdnatura/data/database/ticket/UploadOps.kt new file mode 100644 index 0000000..56e0a68 --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/database/ticket/UploadOps.kt @@ -0,0 +1,68 @@ +package es.verdnatura.data.database.ticket + +import es.verdnatura.core.database.VnOpenHelper +import es.verdnatura.data.database.tables.TableTicket +import es.verdnatura.data.entity.SignDataUpload +import es.verdnatura.domain.entity.Location +import org.jetbrains.anko.db.* + +/** + * Created by nelo on 12/7/17. + */ +class UploadOps(val db: VnOpenHelper) { + + fun getDataForUpload(s: String? = null): SignDataUpload { + var sign = s + var data = listOf>() + var ids = mutableListOf() + var location: Location? = null + + if(sign == null) { + db.use { + + select(TableTicket.TABLE_TICKET, + TableTicket.SIGN) + .whereSimple("${TableTicket.SIGNED} = 1 AND ${TableTicket.UPLOADED} = 0 ORDER BY ${TableTicket.UPDATE_INTENT} LIMIT 1") + .exec { sign = parseOpt(StringParser) } + + } + } + + if(sign != null){ + db.use { + select(TableTicket.TABLE_TICKET, + TableTicket.ID, + TableTicket.LONGITUDE, + TableTicket.LATITUDE) + .whereSimple("${TableTicket.SIGN} = ?", sign!!) + .exec { data = parseList(DataParser()) } + } + + data.forEach { d -> ids.add(d.first) } + if(data[0].second != null && data[0].third != null) + { + location = Location() + location.Longitude = data[0].second + location.Latitude = data[0].third + } + + } + + + return SignDataUpload(sign, ids, location) + } + + class DataParser : RowParser> { + override fun parseRow(columns: Array): Triple { + var long: Double? = null + var lat: Double? = null + if(columns[1] != null) long = columns[1] as Double + if(columns[2] != null) lat = columns[2] as Double + + return Triple(columns[0].toString().toInt(), long, lat) + } + + } + + +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/entity/LocationDto.kt b/data/src/main/kotlin/es/verdnatura/data/entity/LocationDto.kt new file mode 100644 index 0000000..ac546c2 --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/entity/LocationDto.kt @@ -0,0 +1,10 @@ +package es.verdnatura.data.entity + +/** + * Created by nelo on 7/7/17. + */ +class LocationDto { + + var Longitude = 0.0 + var Latitude = 0.0 +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/entity/RouteDto.kt b/data/src/main/kotlin/es/verdnatura/data/entity/RouteDto.kt new file mode 100644 index 0000000..911a3cf --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/entity/RouteDto.kt @@ -0,0 +1,15 @@ +package es.verdnatura.data.entity + +/** + * Created by nelo on 5/7/17. + */ +class RouteDto { + + var Id = 0 + var Hour = "" + var Date = "" + var M3 = 0.0 + var Plate = "" + var Agency = "" + var Driver = "" +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/entity/SignDataDto.kt b/data/src/main/kotlin/es/verdnatura/data/entity/SignDataDto.kt new file mode 100644 index 0000000..c5aa901 --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/entity/SignDataDto.kt @@ -0,0 +1,7 @@ +package es.verdnatura.data.entity + + +/** + * Created by nelo on 25/7/17. + */ +class SignDataDto(var Route: Int, var Client: Int, var Address: Int, var Sign: String, var Uploaded: Boolean, var Tickets: MutableList = mutableListOf()) \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/entity/SignDataUpload.kt b/data/src/main/kotlin/es/verdnatura/data/entity/SignDataUpload.kt new file mode 100644 index 0000000..83d3b1f --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/entity/SignDataUpload.kt @@ -0,0 +1,8 @@ +package es.verdnatura.data.entity + +import es.verdnatura.domain.entity.Location + +/** + * Created by nelo on 12/7/17. + */ +class SignDataUpload(var Sign: String?, var Tickets: List, var Location: Location?) \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/entity/TicketDto.kt b/data/src/main/kotlin/es/verdnatura/data/entity/TicketDto.kt new file mode 100644 index 0000000..0e4f7e2 --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/entity/TicketDto.kt @@ -0,0 +1,22 @@ +package es.verdnatura.data.entity + +/** + * Created by nelo on 7/7/17. + */ +class TicketDto { + + var Id = 0 + var Client = 0 + var ClientName = "" + var Address = 0 + var Packages = 0 + var AddressName = "" + var PostalCode = "" + var City = "" + var Warehouse = "" + var SalePersonPhone = "" + var Note = "" + var Phones = listOf() + var Location = LocationDto() + +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/exceptions/NotFoundException.kt b/data/src/main/kotlin/es/verdnatura/data/exceptions/NotFoundException.kt new file mode 100644 index 0000000..9c6226c --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/exceptions/NotFoundException.kt @@ -0,0 +1,9 @@ +package es.verdnatura.vndelivery.data.exceptions + +import android.content.Context +import es.verdnatura.vndelivery.data.R + +/** + * Created by nelo on 1/3/17. + */ +class NotFoundException(context: Context) : RuntimeException(context.resources.getString(R.string.error_404)) \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/exceptions/ServerError.kt b/data/src/main/kotlin/es/verdnatura/data/exceptions/ServerError.kt new file mode 100644 index 0000000..be476ad --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/exceptions/ServerError.kt @@ -0,0 +1,9 @@ +package es.verdnatura.vndelivery.data.exceptions + +import android.content.Context +import es.verdnatura.vndelivery.data.R + +/** + * Created by nelo on 1/3/17. + */ +class ServerError(context: Context) : RuntimeException(context.resources.getString(R.string.error_500)) \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/exceptions/ServerException.kt b/data/src/main/kotlin/es/verdnatura/data/exceptions/ServerException.kt new file mode 100644 index 0000000..4361a12 --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/exceptions/ServerException.kt @@ -0,0 +1,6 @@ +package es.verdnatura.vndelivery.data.exceptions + +/** + * Created by nelo on 1/3/17. + */ +class ServerException(override var message: String) : RuntimeException(message) \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/exceptions/TimeoutException.kt b/data/src/main/kotlin/es/verdnatura/data/exceptions/TimeoutException.kt new file mode 100644 index 0000000..d24a68a --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/exceptions/TimeoutException.kt @@ -0,0 +1,9 @@ +package es.verdnatura.vndelivery.data.exceptions + +import android.content.Context +import es.verdnatura.vndelivery.data.R + +/** + * Created by nelo on 1/3/17. + */ +class TimeoutException(context: Context) : RuntimeException(context.resources.getString(R.string.time_out)) \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/image/ImageConverter.kt b/data/src/main/kotlin/es/verdnatura/data/image/ImageConverter.kt new file mode 100644 index 0000000..d4ae12d --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/image/ImageConverter.kt @@ -0,0 +1,103 @@ +package es.verdnatura.data.image + +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.os.Environment +import android.util.Base64 +import javax.inject.Singleton +import java.io.* + + +/** + * Created by nelo on 12/7/17. + */ +@Singleton +class ImageConverter { + + private val ROOT = Environment.getExternalStorageDirectory().toString() + private val FOLDER = "/signs" + + fun saveToInternalStorage(bitmapImage: Bitmap, filename: String): String { + + val mypath = File(ROOT + FOLDER) + + mypath.mkdirs() + + val file = File(mypath, filename) + + try { + + if (file.exists()) file.delete() + file.createNewFile() + val out = FileOutputStream(file) + bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, out) + out.flush() + out.close() + + } catch (e: Exception) { + e.printStackTrace() + } + + return file.name + } + + fun loadImageFromStorage(fileName: String): String? { + val imageBytes = fileToBytes(fileName) + val encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT) + + return encodedImage + } + + fun imageToString(image: Bitmap): String { + val baos = ByteArrayOutputStream() + image.compress(Bitmap.CompressFormat.PNG, 100, baos) + val b = baos.toByteArray() + val temp = Base64.encodeToString(b, Base64.DEFAULT) + return temp + } + + fun stringToImage(content: String): Bitmap? { + try{ + val encodeByte=Base64.decode(content,Base64.DEFAULT); + val bitmap=BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.size) + return bitmap + }catch(e: Exception){ + e.message + return null + } + } + + fun deleteImage(filename: String) { + val file = getFile(filename) + file?.delete() + } + + private fun fileToBytes(fileName: String): ByteArray { + var fileInputStream: FileInputStream? = null + + val file = getFile(fileName) + + val bFile = ByteArray(file!!.length().toInt()) + + try { + //convert file into array of bytes + fileInputStream = FileInputStream(file) + fileInputStream.read(bFile) + fileInputStream.close() + + + } catch (e: Exception) { + e.printStackTrace() + } + + return bFile + } + + private fun getFile(filename: String): File? { + val mypath = File(ROOT + FOLDER) + val file = File(mypath, filename) + return file + } + + +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/parser/Serializer.kt b/data/src/main/kotlin/es/verdnatura/data/parser/Serializer.kt new file mode 100644 index 0000000..55b0278 --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/parser/Serializer.kt @@ -0,0 +1,38 @@ +package es.verdnatura.vndelivery.data.parser + +import com.google.gson.Gson +import com.google.gson.JsonParser +import java.util.ArrayList +import javax.inject.Singleton + + +/** + * Created by nelo on 8/3/17. + */ +@Singleton +class Serializer { + + private val gson = Gson() + + fun serialize(obj: Any, clazz: Class<*>): String { + return gson.toJson(obj, clazz) + } + + fun deserialize(string: String, clazz: Class): T { + return gson.fromJson(string, clazz) + } + + fun deserializeList(string: String, clazz: Class): List { + val parser = JsonParser() + val array = parser.parse(string).getAsJsonArray() + + val lst = ArrayList() + for (json in array) { + val entity = gson.fromJson(json, clazz) + lst.add(entity) + } + + return lst + } + +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/preferences/Preferences.kt b/data/src/main/kotlin/es/verdnatura/data/preferences/Preferences.kt new file mode 100644 index 0000000..5925da7 --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/preferences/Preferences.kt @@ -0,0 +1,41 @@ +package es.verdnatura.vndelivery.data.preferences + +import android.content.SharedPreferences +import javax.inject.Inject +import javax.inject.Singleton + +/** + * Created by nelo on 20/7/17. + */ +@Singleton +class Preferences { + + private val USER = "USER" + private val PASS = "PASS" + + val preferences: SharedPreferences + + @Inject + constructor(preferences: SharedPreferences){ + this.preferences = preferences + } + + fun saveUserAndPass(user: String, pass: String){ + preferences.edit().putString(USER, user).apply() + preferences.edit().putString(PASS, pass).apply() + } + + fun getUser(): String{ + return preferences.getString(USER, "") + } + + fun getPass(): String{ + return preferences.getString(PASS, "") + } + + fun removeUserAndPass(){ + preferences.edit().remove(USER).apply() + preferences.edit().remove(PASS).apply() + } + +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/rest/Host.kt b/data/src/main/kotlin/es/verdnatura/data/rest/Host.kt new file mode 100644 index 0000000..671bea6 --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/rest/Host.kt @@ -0,0 +1,22 @@ +package es.verdnatura.vndelivery.data.rest + +import android.os.Build + +/** + * Created by nelo on 12/4/17. + */ +class Host { + + companion object{ + + private val TESTHOST = "http://10.0.3.2:8000/silex/" + private val RELEASEHOST = "https://app.verdnatura.es/" + + fun getHost(): String{ + if(Build.FINGERPRINT.startsWith("generic")) + return TESTHOST + return RELEASEHOST + } + } + +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/rest/NsConnector.kt b/data/src/main/kotlin/es/verdnatura/data/rest/NsConnector.kt new file mode 100644 index 0000000..b3d1296 --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/rest/NsConnector.kt @@ -0,0 +1,58 @@ +package es.verdnatura.vndelivery.data.rest + +import android.app.Application +import es.verdnatura.vndelivery.data.parser.Serializer +import okhttp3.OkHttpClient +import retrofit2.Retrofit +import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory +import retrofit2.converter.gson.GsonConverterFactory +import java.util.concurrent.TimeUnit +import javax.inject.Singleton + + +/** + * Created by nelo on 16/2/17. + */ +@Singleton +class NsConnector { + + var ENDPOINT = Host.getHost() + + val CONNECTION_TIMEOUT: Long = 10 + + val application: Application + val serializer: Serializer + val interceptor: NsInterceptor + lateinit var vnAdapter: Retrofit + + + constructor(application: Application, interceptor: NsInterceptor) { + this.application = application + this.interceptor = interceptor + serializer = Serializer() + createApi() + } + + private fun createApi() { + + var client: OkHttpClient = OkHttpClient + .Builder() + .connectTimeout(CONNECTION_TIMEOUT, TimeUnit.SECONDS) + .addInterceptor(interceptor) + .build() + + vnAdapter = Retrofit + .Builder() + .baseUrl(ENDPOINT) + .addConverterFactory(GsonConverterFactory.create()) + .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) + .client(client) + .build() + + } + + fun changeUserAndPass(user: String, pass: String){ + interceptor.user = user + interceptor.pass = pass + } +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/rest/NsInterceptor.kt b/data/src/main/kotlin/es/verdnatura/data/rest/NsInterceptor.kt new file mode 100644 index 0000000..6094c88 --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/rest/NsInterceptor.kt @@ -0,0 +1,51 @@ +package es.verdnatura.vndelivery.data.rest + +import android.content.Context +import com.google.gson.Gson +import es.verdnatura.vndelivery.data.exceptions.NotFoundException +import es.verdnatura.vndelivery.data.exceptions.ServerError +import es.verdnatura.vndelivery.data.exceptions.TimeoutException +import es.verdnatura.vndelivery.data.exceptions.ServerException +import okhttp3.Interceptor +import okhttp3.Request +import okhttp3.Response +import java.net.SocketTimeoutException +import javax.inject.Singleton + +/** + * Created by nelo on 1/3/17. + */ +@Singleton +class NsInterceptor(val context: Context, var user: String, var pass: String) : Interceptor{ + + override fun intercept(chain: Interceptor.Chain?): Response { + val request = getRequest(chain) + try { + + val response = chain!!.proceed(request) + when(response!!.code()) { + 555 -> throw ServerException(Gson().fromJson(response.message(), Map::class.java)["Message"] as String) + 500 -> throw ServerError(context) + 404 -> throw NotFoundException(context) + } + + return response + + } catch (exception: SocketTimeoutException) { + exception.printStackTrace() + throw TimeoutException(context) + } + + } + + fun getRequest(chain: Interceptor.Chain?): Request{ + return chain!!.request() + .newBuilder() + .addHeader("Content-Type", "json") + .addHeader("user", user) + .addHeader("pass", pass) + .addHeader("aplicacion", "") + .build() + } + +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/rest/RouteApi.kt b/data/src/main/kotlin/es/verdnatura/data/rest/RouteApi.kt new file mode 100644 index 0000000..3b6847e --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/rest/RouteApi.kt @@ -0,0 +1,23 @@ +package es.verdnatura.data.rest + +import es.verdnatura.data.entity.RouteDto +import io.reactivex.Observable +import okhttp3.ResponseBody +import retrofit2.Response +import retrofit2.http.POST + +/** + * Created by nelo on 5/7/17. + */ +interface RouteApi { + + @POST("delivery/get_routes") + fun getRoutes(): Observable> + + @POST("delivery/get_version") + fun getVersion(): Observable + + @POST("bin/vndelivery.apk") + fun getApk(): Observable> + +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/rest/RouteApiImpl.kt b/data/src/main/kotlin/es/verdnatura/data/rest/RouteApiImpl.kt new file mode 100644 index 0000000..208b961 --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/rest/RouteApiImpl.kt @@ -0,0 +1,77 @@ +package es.verdnatura.data.rest + +import android.app.Application +import android.util.Log +import es.verdnatura.core.UtilsResources +import es.verdnatura.data.database.RouteDb +import es.verdnatura.domain.entity.Route +import es.verdnatura.domain.repository.RouteRepository +import es.verdnatura.vndelivery.data.R +import es.verdnatura.vndelivery.data.exceptions.ServerException +import es.verdnatura.vndelivery.data.parser.Serializer +import es.verdnatura.vndelivery.data.preferences.Preferences +import es.verdnatura.vndelivery.data.rest.NsConnector +import io.reactivex.Observable +import okio.BufferedSource +import javax.inject.Inject +import javax.inject.Singleton + +/** + * Created by nelo on 5/7/17. + */ +@Singleton +class RouteApiImpl: RouteRepository { + val routeDb: RouteDb + val serializer: Serializer + val routeApi: RouteApi + val vnConnector: NsConnector + val app: Application + + @Inject + constructor(app: Application, nsConnector: NsConnector, routeDb: RouteDb){ + this.vnConnector = nsConnector + this.routeDb = routeDb + this.app = app + this.serializer = Serializer() + + this.routeApi = vnConnector.vnAdapter.create(RouteApi::class.java) + + deleteRoutes() + } + + private fun getError(errorId: Int): String { + return UtilsResources.getResourceString(app, errorId) + } + + private fun generateError(throwable: Throwable, message: Int){ + if(throwable is ServerException) throwable.message = getError(message) + } + + override fun getRoutes(): Observable> { + var routes = listOf() + return routeApi.getRoutes() + .map { list -> serializer.serialize(list, List::class.java) } + .map { json -> serializer.deserializeList(json, Route::class.java) } + .map { list -> routes = list } + .map { _ -> routeDb.createRoutes(routes) } + .map { _ -> routes } + } + + override fun selectRoutes(): Observable> { + return Observable.just(routeDb.selectRoutes()) + .doOnError { t -> generateError(t, R.string.error_routes) } + } + + override fun deleteRoutes() { + return routeDb.deleteRoutes() + } + + override fun getVersion(): Observable{ + return routeApi.getVersion() + } + + override fun getApk(): Observable{ + return routeApi.getApk().map { r -> r.body().source() } + .doOnError { t -> generateError(t, R.string.error_getting_update) } + } +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/rest/SecurityApi.kt b/data/src/main/kotlin/es/verdnatura/data/rest/SecurityApi.kt new file mode 100644 index 0000000..494cfa8 --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/rest/SecurityApi.kt @@ -0,0 +1,15 @@ +package es.verdnatura.vndelivery.data.rest + +import io.reactivex.Observable +import retrofit2.http.Body +import retrofit2.http.POST + +/** + * Created by nelo on 10/5/17. + */ +interface SecurityApi { + + @POST("security/login") + fun login(@Body vararg args: Any): Observable + +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/rest/SecurityApiImpl.kt b/data/src/main/kotlin/es/verdnatura/data/rest/SecurityApiImpl.kt new file mode 100644 index 0000000..25109a3 --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/rest/SecurityApiImpl.kt @@ -0,0 +1,41 @@ +package es.verdnatura.vndelivery.data.rest + +import android.app.Application +import es.verdnatura.core.UtilsResources +import es.verdnatura.vndelivery.data.R +import es.verdnatura.vndelivery.data.exceptions.ServerException +import es.verdnatura.vndelivery.data.parser.Serializer +import es.verdnatura.vndelivery.domain.repository.SecurityRepository +import io.reactivex.Observable +import javax.inject.Inject +import javax.inject.Singleton + +/** + * Created by nelo on 10/5/17. + */ +@Singleton +class SecurityApiImpl: SecurityRepository { + + lateinit var securityApi: SecurityApi + lateinit var application: Application + lateinit var serializer: Serializer + val vnConnector: NsConnector + + @Inject + constructor(nsConnector: NsConnector) { + vnConnector = nsConnector + } + + override fun createApi(user: String, pass: String) { + vnConnector.changeUserAndPass(user, pass) + application = vnConnector.application + serializer = vnConnector.serializer + securityApi = vnConnector.vnAdapter.create(SecurityApi::class.java) + } + + override fun login(user: String, pass: String): Observable { + return securityApi.login(user, pass).doOnError { + throwable -> if(throwable is ServerException) throwable.message = UtilsResources.getResourceString(application, R.string.error_login) + } + } +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/rest/TicketApi.kt b/data/src/main/kotlin/es/verdnatura/data/rest/TicketApi.kt new file mode 100644 index 0000000..24ea0bb --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/rest/TicketApi.kt @@ -0,0 +1,18 @@ +package es.verdnatura.data.rest + +import es.verdnatura.data.entity.TicketDto +import io.reactivex.Observable +import retrofit2.http.Body +import retrofit2.http.POST + +/** + * Created by nelo on 7/7/17. + */ +interface TicketApi { + + @POST("delivery/get_tickets") + fun getTickets(@Body vararg args: Any): Observable> + + @POST("delivery/save_sign") + fun saveSign(@Body vararg args: Any): Observable +} \ No newline at end of file diff --git a/data/src/main/kotlin/es/verdnatura/data/rest/TicketApiImpl.kt b/data/src/main/kotlin/es/verdnatura/data/rest/TicketApiImpl.kt new file mode 100644 index 0000000..908d8d3 --- /dev/null +++ b/data/src/main/kotlin/es/verdnatura/data/rest/TicketApiImpl.kt @@ -0,0 +1,118 @@ +package es.verdnatura.data.rest + +import android.app.Application +import android.util.Log +import es.verdnatura.core.UtilsResources + +import es.verdnatura.data.database.TicketDb +import es.verdnatura.data.image.ImageConverter +import es.verdnatura.domain.entity.SignData +import es.verdnatura.domain.entity.Ticket +import es.verdnatura.domain.repository.TicketRepository +import es.verdnatura.vndelivery.data.R +import es.verdnatura.vndelivery.data.exceptions.ServerException +import es.verdnatura.vndelivery.data.parser.Serializer +import es.verdnatura.vndelivery.data.rest.NsConnector +import io.reactivex.Observable +import java.util.* +import javax.inject.Inject +import javax.inject.Singleton + +/** + * Created by nelo on 7/7/17. + */ +@Singleton +class TicketApiImpl: TicketRepository { + + val ticketDb: TicketDb + val serializer: Serializer + val ticketApi: TicketApi + val vnConnector: NsConnector + val imageConverter: ImageConverter + + val app: Application + + @Inject + constructor(application: Application, nsConnector: NsConnector, ticketDb: TicketDb, imageConverter: ImageConverter){ + this.vnConnector = nsConnector + this.ticketDb = ticketDb + this.app = application + this.imageConverter = imageConverter + this.serializer = Serializer() + + this.ticketApi = vnConnector.vnAdapter.create(TicketApi::class.java) + } + + private fun getError(errorId: Int): String { + return UtilsResources.getResourceString(app, errorId) + } + + private fun generateError(throwable: Throwable, message: Int){ + if(throwable is ServerException) throwable.message = getError(message) + } + + override fun getTickets(route: Int): Observable> { + var tickets = listOf() + return ticketApi.getTickets(route) + .map { tickets -> serializer.serialize(tickets, List::class.java) } + .map { json -> serializer.deserializeList(json, Ticket::class.java) } + .map { ts -> tickets = ts } + .map { _ -> ticketDb.createTickets(route, tickets) } + .map { _ -> ticketDb.getSignedTicketsIds(route) } + .map { tt -> markSigndedTicket(tickets, tt)} + .map { _ -> ticketDb.getUploadedTickets(route) } + .map { tt -> markUploadedTicket(tickets, tt)} + .map { tt -> tt } + .doOnError { t -> generateError(t, R.string.error_tickets) } + } + + fun markSigndedTicket(tickets: List, ids: List): List{ + tickets.forEach { t -> if(t.Id in ids) t.Signed = 1} + return tickets + } + + fun markUploadedTicket(tickets: List, ids: List): List{ + tickets.forEach { t -> if(t.Id in ids) t.Uploaded = 1} + return tickets + } + + override fun selectTickets(route: Int): Observable> { + return Observable.just(ticketDb.selectTickets(route)) + } + + override fun signTickets(sign: String, tickets: List, long: Double?, lat: Double?): Observable { + val uuid = UUID.randomUUID() + val bmp = imageConverter.stringToImage(sign) + if (bmp != null){ + val filename = imageConverter.saveToInternalStorage(bmp!!, uuid.toString()) + ticketDb.signTicket(tickets, filename, long, lat) + } + return Observable.just(uuid.toString()) + } + + override fun uploadSign(sign: String?): Observable { + val data = ticketDb.getDataToUpload(sign) + if(data.Tickets.size > 0){ + data.Sign = imageConverter.loadImageFromStorage(data.Sign!!) + return ticketApi.saveSign(data) + .map { s -> if(s == "OK") ticketDb.markTicketsAsUploaded(data.Tickets) else ticketDb.increaseUploadIntent(data.Tickets) } + .map { _ -> ""} + .doOnError { t -> + ticketDb.increaseUploadIntent(data.Tickets) + Log.e("ERROR", t.message.toString()) + } + } + else return Observable.empty() + } + + override fun getDataSignedTickets(): Observable> { + return Observable.just(ticketDb.getDataTicketsSigned()) + .map { s -> serializer.serialize(s, List::class.java) } + .map { j -> serializer.deserializeList(j, SignData::class.java) } + } + + override fun deleteTicketsBySign(sign: String) : Observable{ + return Observable.just(ticketDb.deleteBySign(sign)) + .map { _ -> true } + } +} \ No newline at end of file diff --git a/data/src/main/res/values-es/strings.xml b/data/src/main/res/values-es/strings.xml new file mode 100644 index 0000000..8bc4f05 --- /dev/null +++ b/data/src/main/res/values-es/strings.xml @@ -0,0 +1,12 @@ + + Data + Error interno del servidor + Recurso no encontrado + Tiempo de espera agotado + Usuario o contraseña incorrectos + + Error obteniendo las rutas + Error obteniendo los tickets + Error obteniendo la nueva versión + + diff --git a/data/src/main/res/values/strings.xml b/data/src/main/res/values/strings.xml new file mode 100644 index 0000000..2a7d94c --- /dev/null +++ b/data/src/main/res/values/strings.xml @@ -0,0 +1,12 @@ + + Data + Internal server error + Resource not found + Connection timeout + Invalid user or password + + Error getting routes + Error getting tickets + Error getting new version + + diff --git a/data/src/test/kotlin/es/verdnatura/data/parser/SerializerTest.kt b/data/src/test/kotlin/es/verdnatura/data/parser/SerializerTest.kt new file mode 100644 index 0000000..9f9735f --- /dev/null +++ b/data/src/test/kotlin/es/verdnatura/data/parser/SerializerTest.kt @@ -0,0 +1,52 @@ +package es.verdnatura.vndelivery.data.check + +import com.google.gson.annotations.SerializedName +import es.verdnatura.vndelivery.data.parser.Serializer +import org.junit.Before +import org.junit.Test +import kotlin.test.assertEquals + +/** + * Created by nelo on 21/3/17. + */ +class SerializerTest { + + var user: User? = null + var serializer: Serializer? = null + private val JSON_RESPONSE = "{\"Name\":\"James Olsen\",\"Age\":21,\"Address\":\"Street of winter\"}" + + @Before + fun setUp(){ + user = User() + user?.Name = "James Olsen" + user?.Age = 21 + user?.Address = "Street of winter" + serializer = Serializer() + } + + @Test + fun testSerialize(){ + val response = serializer?.serialize(user!!, User::class.java) + assertEquals(response, JSON_RESPONSE) + } + + @Test + fun testDeserialize(){ + val newUser = serializer?.deserialize(JSON_RESPONSE, User::class.java) + assertEquals(newUser?.Name, user?.Name) + assertEquals(newUser?.Age, user?.Age) + assertEquals(newUser?.Address, user?.Address) + } + + class User{ + @SerializedName("Name") + var Name: String = "" + + @SerializedName("Age") + var Age: Int = 0 + + @SerializedName("Address") + var Address: String = "" + } + +} \ No newline at end of file diff --git a/domain/build.gradle b/domain/build.gradle new file mode 100644 index 0000000..59a577f --- /dev/null +++ b/domain/build.gradle @@ -0,0 +1,46 @@ +apply plugin: 'kotlin' +apply plugin: 'java' +apply plugin: 'kotlin-allopen' + +allOpen { + annotation("es.verdnatura.vnsplits.domain.TestOpen") +} + +configurations { + provided +} + +sourceSets { + main.java.srcDirs += "src/main/kotlin" + test.java.srcDirs += 'src/test/kotlin' + + main{ + compileClasspath += configurations.provided + } +} + +dependencies { + def domainDependencies = rootProject.ext.domainDependencies + def domainTestDependencies = rootProject.ext.domainTestDependencies + + compile domainDependencies.rxJava + compile domainDependencies.javaxInject + compile domainDependencies.kotlin + compile domainDependencies.okio + + testCompile domainTestDependencies.jUnit + testCompile domainTestDependencies.kotlin + testCompile domainTestDependencies.kotlinTest + testCompile domainTestDependencies.mockitoKotlin + testCompile domainTestDependencies.kluent + testCompile domainTestDependencies.assertj + + provided domainDependencies.javaxAnnotation + + compile fileTree(dir: 'libs', include: '*.jar') + + compile 'com.squareup.okio:okio:1.11.0' +} +repositories { + mavenCentral() +} \ No newline at end of file diff --git a/domain/build/classes/main/es/verdnatura/domain/entity/Location.class b/domain/build/classes/main/es/verdnatura/domain/entity/Location.class new file mode 100644 index 0000000..ba215cb Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/entity/Location.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/entity/Route.class b/domain/build/classes/main/es/verdnatura/domain/entity/Route.class new file mode 100644 index 0000000..51f9d39 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/entity/Route.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/entity/SignData.class b/domain/build/classes/main/es/verdnatura/domain/entity/SignData.class new file mode 100644 index 0000000..98d7885 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/entity/SignData.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/entity/Ticket.class b/domain/build/classes/main/es/verdnatura/domain/entity/Ticket.class new file mode 100644 index 0000000..5783ce1 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/entity/Ticket.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/route/GetRoutesUseCase.class b/domain/build/classes/main/es/verdnatura/domain/interactor/route/GetRoutesUseCase.class new file mode 100644 index 0000000..7607362 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/route/GetRoutesUseCase.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/route/SelectRoutesUseCase.class b/domain/build/classes/main/es/verdnatura/domain/interactor/route/SelectRoutesUseCase.class new file mode 100644 index 0000000..cb1bc04 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/route/SelectRoutesUseCase.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase$Params$Companion.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase$Params$Companion.class new file mode 100644 index 0000000..ca1245c Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase$Params$Companion.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase$Params.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase$Params.class new file mode 100644 index 0000000..47c968c Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase$Params.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase$buildUseCaseObservable$1.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase$buildUseCaseObservable$1.class new file mode 100644 index 0000000..a7acb68 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase$buildUseCaseObservable$1.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase.class new file mode 100644 index 0000000..ff4adcd Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase$Params$Companion.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase$Params$Companion.class new file mode 100644 index 0000000..766671e Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase$Params$Companion.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase$Params.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase$Params.class new file mode 100644 index 0000000..a86fda1 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase$Params.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase.class new file mode 100644 index 0000000..d2fe5b4 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase$Params$Companion.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase$Params$Companion.class new file mode 100644 index 0000000..3117e61 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase$Params$Companion.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase$Params.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase$Params.class new file mode 100644 index 0000000..41bcb27 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase$Params.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase$buildUseCaseObservable$1.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase$buildUseCaseObservable$1.class new file mode 100644 index 0000000..dadafd1 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase$buildUseCaseObservable$1.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase.class new file mode 100644 index 0000000..9b4a2dc Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase$Params$Companion.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase$Params$Companion.class new file mode 100644 index 0000000..ffd40e6 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase$Params$Companion.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase$Params.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase$Params.class new file mode 100644 index 0000000..02da762 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase$Params.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase$buildUseCaseObservable$1.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase$buildUseCaseObservable$1.class new file mode 100644 index 0000000..198956f Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase$buildUseCaseObservable$1.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase.class new file mode 100644 index 0000000..2fdc754 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SignDataUseCase.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SignDataUseCase.class new file mode 100644 index 0000000..e4a5f90 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SignDataUseCase.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase$Params$Companion.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase$Params$Companion.class new file mode 100644 index 0000000..b2c9d3c Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase$Params$Companion.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase$Params.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase$Params.class new file mode 100644 index 0000000..1c69d3d Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase$Params.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase.class new file mode 100644 index 0000000..365933c Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase$Params$Companion.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase$Params$Companion.class new file mode 100644 index 0000000..5f97f93 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase$Params$Companion.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase$Params.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase$Params.class new file mode 100644 index 0000000..62e4b75 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase$Params.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase.class b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase.class new file mode 100644 index 0000000..09913dd Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/repository/RouteRepository.class b/domain/build/classes/main/es/verdnatura/domain/repository/RouteRepository.class new file mode 100644 index 0000000..9c418ea Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/repository/RouteRepository.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/repository/TicketRepository$DefaultImpls.class b/domain/build/classes/main/es/verdnatura/domain/repository/TicketRepository$DefaultImpls.class new file mode 100644 index 0000000..fde2bc8 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/repository/TicketRepository$DefaultImpls.class differ diff --git a/domain/build/classes/main/es/verdnatura/domain/repository/TicketRepository.class b/domain/build/classes/main/es/verdnatura/domain/repository/TicketRepository.class new file mode 100644 index 0000000..3fc2b41 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/domain/repository/TicketRepository.class differ diff --git a/domain/build/classes/main/es/verdnatura/vndelivery/domain/TestOpen.class b/domain/build/classes/main/es/verdnatura/vndelivery/domain/TestOpen.class new file mode 100644 index 0000000..cc2a40f Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/vndelivery/domain/TestOpen.class differ diff --git a/domain/build/classes/main/es/verdnatura/vndelivery/domain/check/Preconditions$Companion.class b/domain/build/classes/main/es/verdnatura/vndelivery/domain/check/Preconditions$Companion.class new file mode 100644 index 0000000..95e3814 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/vndelivery/domain/check/Preconditions$Companion.class differ diff --git a/domain/build/classes/main/es/verdnatura/vndelivery/domain/check/Preconditions.class b/domain/build/classes/main/es/verdnatura/vndelivery/domain/check/Preconditions.class new file mode 100644 index 0000000..270f6aa Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/vndelivery/domain/check/Preconditions.class differ diff --git a/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/DefaultObserver.class b/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/DefaultObserver.class new file mode 100644 index 0000000..2184100 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/DefaultObserver.class differ diff --git a/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/LoginUseCase$Params$Companion.class b/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/LoginUseCase$Params$Companion.class new file mode 100644 index 0000000..f264277 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/LoginUseCase$Params$Companion.class differ diff --git a/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/LoginUseCase$Params.class b/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/LoginUseCase$Params.class new file mode 100644 index 0000000..b99fa32 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/LoginUseCase$Params.class differ diff --git a/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/LoginUseCase.class b/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/LoginUseCase.class new file mode 100644 index 0000000..8e80620 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/LoginUseCase.class differ diff --git a/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase$Params$Companion.class b/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase$Params$Companion.class new file mode 100644 index 0000000..a628a98 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase$Params$Companion.class differ diff --git a/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase$Params.class b/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase$Params.class new file mode 100644 index 0000000..1ffe40f Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase$Params.class differ diff --git a/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase$buildUseCaseObservable$1.class b/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase$buildUseCaseObservable$1.class new file mode 100644 index 0000000..df1079f Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase$buildUseCaseObservable$1.class differ diff --git a/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase.class b/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase.class new file mode 100644 index 0000000..b652e32 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase.class differ diff --git a/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/UseCase.class b/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/UseCase.class new file mode 100644 index 0000000..670585b Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/vndelivery/domain/interactor/UseCase.class differ diff --git a/domain/build/classes/main/es/verdnatura/vndelivery/domain/repository/SecurityRepository.class b/domain/build/classes/main/es/verdnatura/vndelivery/domain/repository/SecurityRepository.class new file mode 100644 index 0000000..5bc748a Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/vndelivery/domain/repository/SecurityRepository.class differ diff --git a/domain/build/classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase$Params$Companion.class b/domain/build/classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase$Params$Companion.class new file mode 100644 index 0000000..d59e588 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase$Params$Companion.class differ diff --git a/domain/build/classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase$Params.class b/domain/build/classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase$Params.class new file mode 100644 index 0000000..2083806 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase$Params.class differ diff --git a/domain/build/classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase$buildUseCaseObservable$1.class b/domain/build/classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase$buildUseCaseObservable$1.class new file mode 100644 index 0000000..95c3150 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase$buildUseCaseObservable$1.class differ diff --git a/domain/build/classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase.class b/domain/build/classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase.class new file mode 100644 index 0000000..316d511 Binary files /dev/null and b/domain/build/classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/entity/Location.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/entity/Location.class new file mode 100644 index 0000000..ba215cb Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/entity/Location.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/entity/Route.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/entity/Route.class new file mode 100644 index 0000000..51f9d39 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/entity/Route.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/entity/SignData.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/entity/SignData.class new file mode 100644 index 0000000..98d7885 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/entity/SignData.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/entity/Ticket.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/entity/Ticket.class new file mode 100644 index 0000000..5783ce1 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/entity/Ticket.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/route/GetRoutesUseCase.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/route/GetRoutesUseCase.class new file mode 100644 index 0000000..7607362 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/route/GetRoutesUseCase.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/route/SelectRoutesUseCase.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/route/SelectRoutesUseCase.class new file mode 100644 index 0000000..cb1bc04 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/route/SelectRoutesUseCase.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase$Params$Companion.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase$Params$Companion.class new file mode 100644 index 0000000..ca1245c Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase$Params$Companion.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase$Params.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase$Params.class new file mode 100644 index 0000000..47c968c Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase$Params.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase$buildUseCaseObservable$1.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase$buildUseCaseObservable$1.class new file mode 100644 index 0000000..a7acb68 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase$buildUseCaseObservable$1.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase.class new file mode 100644 index 0000000..ff4adcd Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase$Params$Companion.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase$Params$Companion.class new file mode 100644 index 0000000..766671e Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase$Params$Companion.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase$Params.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase$Params.class new file mode 100644 index 0000000..a86fda1 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase$Params.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase.class new file mode 100644 index 0000000..d2fe5b4 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase$Params$Companion.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase$Params$Companion.class new file mode 100644 index 0000000..3117e61 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase$Params$Companion.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase$Params.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase$Params.class new file mode 100644 index 0000000..41bcb27 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase$Params.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase$buildUseCaseObservable$1.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase$buildUseCaseObservable$1.class new file mode 100644 index 0000000..dadafd1 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase$buildUseCaseObservable$1.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase.class new file mode 100644 index 0000000..9b4a2dc Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase$Params$Companion.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase$Params$Companion.class new file mode 100644 index 0000000..ffd40e6 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase$Params$Companion.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase$Params.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase$Params.class new file mode 100644 index 0000000..02da762 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase$Params.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase$buildUseCaseObservable$1.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase$buildUseCaseObservable$1.class new file mode 100644 index 0000000..198956f Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase$buildUseCaseObservable$1.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase.class new file mode 100644 index 0000000..2fdc754 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SignDataUseCase.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SignDataUseCase.class new file mode 100644 index 0000000..e4a5f90 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SignDataUseCase.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase$Params$Companion.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase$Params$Companion.class new file mode 100644 index 0000000..b2c9d3c Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase$Params$Companion.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase$Params.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase$Params.class new file mode 100644 index 0000000..1c69d3d Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase$Params.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase.class new file mode 100644 index 0000000..365933c Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase$Params$Companion.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase$Params$Companion.class new file mode 100644 index 0000000..5f97f93 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase$Params$Companion.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase$Params.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase$Params.class new file mode 100644 index 0000000..62e4b75 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase$Params.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase.class new file mode 100644 index 0000000..09913dd Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/repository/RouteRepository.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/repository/RouteRepository.class new file mode 100644 index 0000000..9c418ea Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/repository/RouteRepository.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/repository/TicketRepository$DefaultImpls.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/repository/TicketRepository$DefaultImpls.class new file mode 100644 index 0000000..fde2bc8 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/repository/TicketRepository$DefaultImpls.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/domain/repository/TicketRepository.class b/domain/build/kotlin-classes/main/es/verdnatura/domain/repository/TicketRepository.class new file mode 100644 index 0000000..3fc2b41 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/domain/repository/TicketRepository.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/TestOpen.class b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/TestOpen.class new file mode 100644 index 0000000..cc2a40f Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/TestOpen.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/check/Preconditions$Companion.class b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/check/Preconditions$Companion.class new file mode 100644 index 0000000..95e3814 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/check/Preconditions$Companion.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/check/Preconditions.class b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/check/Preconditions.class new file mode 100644 index 0000000..270f6aa Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/check/Preconditions.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/DefaultObserver.class b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/DefaultObserver.class new file mode 100644 index 0000000..2184100 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/DefaultObserver.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/LoginUseCase$Params$Companion.class b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/LoginUseCase$Params$Companion.class new file mode 100644 index 0000000..f264277 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/LoginUseCase$Params$Companion.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/LoginUseCase$Params.class b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/LoginUseCase$Params.class new file mode 100644 index 0000000..b99fa32 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/LoginUseCase$Params.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/LoginUseCase.class b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/LoginUseCase.class new file mode 100644 index 0000000..8e80620 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/LoginUseCase.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase$Params$Companion.class b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase$Params$Companion.class new file mode 100644 index 0000000..a628a98 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase$Params$Companion.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase$Params.class b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase$Params.class new file mode 100644 index 0000000..1ffe40f Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase$Params.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase$buildUseCaseObservable$1.class b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase$buildUseCaseObservable$1.class new file mode 100644 index 0000000..df1079f Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase$buildUseCaseObservable$1.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase.class b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase.class new file mode 100644 index 0000000..b652e32 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/UpdateUseCase.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/UseCase.class b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/UseCase.class new file mode 100644 index 0000000..670585b Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/interactor/UseCase.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/repository/SecurityRepository.class b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/repository/SecurityRepository.class new file mode 100644 index 0000000..5bc748a Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/domain/repository/SecurityRepository.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase$Params$Companion.class b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase$Params$Companion.class new file mode 100644 index 0000000..d59e588 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase$Params$Companion.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase$Params.class b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase$Params.class new file mode 100644 index 0000000..2083806 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase$Params.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase$buildUseCaseObservable$1.class b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase$buildUseCaseObservable$1.class new file mode 100644 index 0000000..95c3150 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase$buildUseCaseObservable$1.class differ diff --git a/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase.class b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase.class new file mode 100644 index 0000000..316d511 Binary files /dev/null and b/domain/build/kotlin-classes/main/es/verdnatura/vndelivery/vndelivery/interactor/GetVersionUseCase.class differ diff --git a/domain/build/kotlin/compileKotlin/sync/kotlin-files-in-java-timestamps.bin b/domain/build/kotlin/compileKotlin/sync/kotlin-files-in-java-timestamps.bin new file mode 100644 index 0000000..3eb43cc Binary files /dev/null and b/domain/build/kotlin/compileKotlin/sync/kotlin-files-in-java-timestamps.bin differ diff --git a/domain/build/libs/domain.jar b/domain/build/libs/domain.jar new file mode 100644 index 0000000..5b182c0 Binary files /dev/null and b/domain/build/libs/domain.jar differ diff --git a/domain/build/tmp/jar/MANIFEST.MF b/domain/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/domain/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/domain/domain.iml b/domain/domain.iml new file mode 100644 index 0000000..7a234ee --- /dev/null +++ b/domain/domain.iml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/TestOpen.kt b/domain/src/main/kotlin/es/verdnatura/domain/TestOpen.kt new file mode 100644 index 0000000..fef6751 --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/TestOpen.kt @@ -0,0 +1,8 @@ +package es.verdnatura.vndelivery.domain + +/** + * Created by nelo on 19/5/17. + */ +@Retention(AnnotationRetention.SOURCE) +@Target(AnnotationTarget.CLASS) +annotation class TestOpen \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/check/Preconditions.kt b/domain/src/main/kotlin/es/verdnatura/domain/check/Preconditions.kt new file mode 100644 index 0000000..b87e081 --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/check/Preconditions.kt @@ -0,0 +1,17 @@ +package es.verdnatura.vndelivery.domain.check + + +/** + * Created by nelo on 16/2/17. + */ +class Preconditions { + + companion object{ + fun checkNotNull(obj: Any?): Any{ + if(obj == null){ + throw NullPointerException() + } + return obj + } + } +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/entity/Location.kt b/domain/src/main/kotlin/es/verdnatura/domain/entity/Location.kt new file mode 100644 index 0000000..33fb145 --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/entity/Location.kt @@ -0,0 +1,16 @@ +package es.verdnatura.domain.entity + +import javax.inject.Named + +/** + * Created by nelo on 7/7/17. + */ +class Location { + + @Named("Longitude") + var Longitude: Double? = 0.0 + + @Named("Latitude") + var Latitude: Double? = 0.0 + +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/entity/Route.kt b/domain/src/main/kotlin/es/verdnatura/domain/entity/Route.kt new file mode 100644 index 0000000..5e90a86 --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/entity/Route.kt @@ -0,0 +1,41 @@ +package es.verdnatura.domain.entity + +import javax.inject.Named + +/** + * Created by nelo on 5/7/17. + */ +class Route() { + + constructor(id: Int, hour: String, date: String, m3: Double, plate: String, agency: String, driver: String): this(){ + this.Id = id + this.Hour = hour + this.Date = date + this.M3 = m3 + this.Plate = plate + this.Agency = agency + this.Driver = driver + } + + @Named("Id") + var Id = 0 + + @Named("Hour") + var Hour = "" + + @Named("Date") + var Date = "" + + @Named("M3") + var M3 = 0.0 + + @Named("Plate") + var Plate = "" + + @Named("Agency") + var Agency = "" + + @Named("Driver") + var Driver = "" + +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/entity/SignData.kt b/domain/src/main/kotlin/es/verdnatura/domain/entity/SignData.kt new file mode 100644 index 0000000..78b030f --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/entity/SignData.kt @@ -0,0 +1,28 @@ +package es.verdnatura.domain.entity + +import javax.inject.Named + +/** + * Created by nelo on 25/7/17. + */ +class SignData { + + @Named("Route") + var Route = 0 + + @Named("Client") + var Client = 0 + + @Named("Address") + var Address = 0 + + @Named("Sign") + var Sign = "" + + @Named("Uploaded") + var Uploaded = false + + @Named("Tickets") + var Tickets: MutableList = mutableListOf() + +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/entity/Ticket.kt b/domain/src/main/kotlin/es/verdnatura/domain/entity/Ticket.kt new file mode 100644 index 0000000..8e13ae3 --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/entity/Ticket.kt @@ -0,0 +1,80 @@ +package es.verdnatura.domain.entity + +import javax.inject.Named + + +/** + * Created by nelo on 7/7/17. + */ +class Ticket() { + + constructor(id: Int, client: Int, clientName: String, address: Int, addressName: String, packages: Int, + postalCode: String, city: String, warehouse: String, salePersonPhone: String, note: String, + longitude: String, latitude: String, signed: Int, uploaded: Int) : this() { + + this.Id = id + this.Client = client + this.ClientName = clientName + this.Address = address + this.AddressName = addressName + this.Packages = packages + this.City = city + this.Warehouse = warehouse + this.SalePersonPhone = salePersonPhone + this.Note = note + this.PostalCode = postalCode + this.Signed = signed + this.Uploaded = uploaded + if(latitude != "null" && longitude != "null") { + val loc = Location() + loc.Longitude = longitude.toDouble() + loc.Latitude = latitude.toDouble() + this.Loc = loc + } + } + + @Named("Id") + var Id = 0 + + @Named("Client") + var Client = 0 + + @Named("ClientName") + var ClientName = "" + + @Named("Address") + var Address = 0 + + @Named("Packages") + var Packages = 0 + + @Named("AddressName") + var AddressName = "" + + @Named("PostalCode") + var PostalCode = "" + + @Named("City") + var City = "" + + @Named("Warehouse") + var Warehouse = "" + + @Named("SalePersonPhone") + var SalePersonPhone = "" + + @Named("Note") + var Note = "" + + @Named("Phones") + var Phones = listOf() + + @Named("LocationDto") + var Loc = Location() + + @Named("Signed") + var Signed = 0 + + @Named("Uploaded") + var Uploaded = 0 +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/interactor/DefaultObserver.kt b/domain/src/main/kotlin/es/verdnatura/domain/interactor/DefaultObserver.kt new file mode 100644 index 0000000..41a09ec --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/interactor/DefaultObserver.kt @@ -0,0 +1,15 @@ +package es.verdnatura.vndelivery.domain.interactor + +import io.reactivex.observers.DisposableObserver + +/** + * Created by nelo on 27/2/17. + */ +open class DefaultObserver : DisposableObserver() { + + override fun onNext(t: T) {} + + override fun onComplete() {} + + override fun onError(exception: Throwable ){} +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/interactor/GetVersionUseCase.kt b/domain/src/main/kotlin/es/verdnatura/domain/interactor/GetVersionUseCase.kt new file mode 100644 index 0000000..d21ef32 --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/interactor/GetVersionUseCase.kt @@ -0,0 +1,40 @@ +package es.verdnatura.vndelivery.vndelivery.interactor + +import es.verdnatura.domain.repository.RouteRepository +import es.verdnatura.vndelivery.domain.interactor.UseCase +import io.reactivex.Observable +import io.reactivex.Scheduler +import javax.inject.Inject + +/** + * Created by nelo on 23/6/17. + */ +class GetVersionUseCase: UseCase { + + val repository: RouteRepository + + @Inject + constructor(repository: RouteRepository, uiThread: Scheduler, thread: Scheduler): super(uiThread, thread){ + this.repository = repository + + } + + override fun buildUseCaseObservable(params: Params): Observable { + return repository.getVersion() + .map { v -> isNewVersion(v, params.version)} + } + + fun isNewVersion(v: Int, version: Int): Boolean{ + if(v > version) + return true + return false + } + + class Params private constructor(val version: Int){ + companion object{ + fun forGetVersion(v: Int):Params{ + return Params(v) + } + } + } +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/interactor/LoginUseCase.kt b/domain/src/main/kotlin/es/verdnatura/domain/interactor/LoginUseCase.kt new file mode 100644 index 0000000..e961245 --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/interactor/LoginUseCase.kt @@ -0,0 +1,33 @@ +package es.verdnatura.vndelivery.domain.interactor + +import es.verdnatura.vndelivery.domain.repository.SecurityRepository +import io.reactivex.Observable +import io.reactivex.Scheduler +import javax.inject.Inject + +/** + * Created by nelo on 10/5/17. + */ +class LoginUseCase: UseCase{ + + val repository: SecurityRepository + + @Inject + constructor(repository: SecurityRepository, uiThread: Scheduler, mExecutorThread: Scheduler) : super(uiThread, mExecutorThread) { + this.repository = repository + } + + override fun buildUseCaseObservable(params: Params): Observable { + this.repository.createApi(params.user, params.pass) + return this.repository.login(params.user, params.pass) + } + + class Params private constructor(val user: String, val pass: String) { + companion object{ + fun forLogin(user: String, pass: String): Params { + return Params(user, pass) + } + } + } + +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/interactor/UpdateUseCase.kt b/domain/src/main/kotlin/es/verdnatura/domain/interactor/UpdateUseCase.kt new file mode 100644 index 0000000..eca035e --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/interactor/UpdateUseCase.kt @@ -0,0 +1,45 @@ +package es.verdnatura.vndelivery.domain.interactor + +import es.verdnatura.domain.repository.RouteRepository +import io.reactivex.Observable +import io.reactivex.Scheduler +import okio.BufferedSource +import okio.Okio +import java.io.File +import javax.inject.Inject + + + +/** + * Created by nelo on 23/6/17. + */ +class UpdateUseCase : UseCase { + + val repository: RouteRepository + + @Inject + constructor(repository: RouteRepository, uiThread: Scheduler, thread: Scheduler): super(uiThread, thread){ + this.repository = repository + } + + override fun buildUseCaseObservable(params: UpdateUseCase.Params): Observable { + + return repository.getApk().map { s -> writeDataTofile(s, params.file) } + } + + fun writeDataTofile(buffered: BufferedSource, file: File): File{ + val bufferedSink = Okio.buffer(Okio.sink(file)) + bufferedSink.writeAll(buffered) + bufferedSink.close() + return file + } + + class Params private constructor(val file: File){ + companion object{ + fun forUpdate(file: File): Params{ + return Params(file) + } + } + } + +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/interactor/UseCase.kt b/domain/src/main/kotlin/es/verdnatura/domain/interactor/UseCase.kt new file mode 100644 index 0000000..b28dbf9 --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/interactor/UseCase.kt @@ -0,0 +1,47 @@ +package es.verdnatura.vndelivery.domain.interactor + +import es.verdnatura.vndelivery.domain.check.Preconditions +import io.reactivex.Observable +import io.reactivex.Scheduler +import io.reactivex.disposables.CompositeDisposable +import io.reactivex.observers.DisposableObserver +import io.reactivex.disposables.Disposable + +/** + * Created by nelo on 16/2/17. + */ +abstract class UseCase { + + val uiThread: Scheduler + val mExecutorThread: Scheduler + var disposables: CompositeDisposable + + constructor(uiThread: Scheduler, mExecutorThread: Scheduler){ + this.uiThread = uiThread + this.mExecutorThread = mExecutorThread + this.disposables = CompositeDisposable() + } + + abstract fun buildUseCaseObservable(params: Params): Observable + + open fun execute(observer: DisposableObserver, params: Params) { + Preconditions.checkNotNull(params) + Preconditions.checkNotNull(observer) + val observable: Observable = this.buildUseCaseObservable(params) + .subscribeOn(mExecutorThread) + .observeOn(uiThread) + addDisposable(observable.subscribeWith(observer)) + } + + fun dispose() { + if (!disposables.isDisposed) { + disposables.dispose() + } + } + + private fun addDisposable(disposable: Disposable) { + Preconditions.checkNotNull(disposable) + Preconditions.checkNotNull(disposables) + disposables.add(disposable) + } +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/interactor/route/GetRoutesUseCase.kt b/domain/src/main/kotlin/es/verdnatura/domain/interactor/route/GetRoutesUseCase.kt new file mode 100644 index 0000000..c89a1c6 --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/interactor/route/GetRoutesUseCase.kt @@ -0,0 +1,25 @@ +package es.verdnatura.domain.interactor.route + +import es.verdnatura.domain.entity.Route +import es.verdnatura.domain.repository.RouteRepository +import es.verdnatura.vndelivery.domain.interactor.UseCase +import io.reactivex.Observable +import io.reactivex.Scheduler +import javax.inject.Inject + +/** + * Created by nelo on 5/7/17. + */ +class GetRoutesUseCase: UseCase, Boolean> { + + val routeRepository: RouteRepository + + @Inject + constructor(routeRepository: RouteRepository, uiThread: Scheduler, thread: Scheduler): super(uiThread, thread){ + this.routeRepository = routeRepository + } + + override fun buildUseCaseObservable(params: Boolean): Observable> { + return routeRepository.getRoutes() + } +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/interactor/route/SelectRoutesUseCase.kt b/domain/src/main/kotlin/es/verdnatura/domain/interactor/route/SelectRoutesUseCase.kt new file mode 100644 index 0000000..453f3b2 --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/interactor/route/SelectRoutesUseCase.kt @@ -0,0 +1,25 @@ +package es.verdnatura.domain.interactor.route + +import es.verdnatura.domain.entity.Route +import es.verdnatura.domain.repository.RouteRepository +import es.verdnatura.vndelivery.domain.interactor.UseCase +import io.reactivex.Observable +import io.reactivex.Scheduler +import javax.inject.Inject + +/** + * Created by nelo on 6/7/17. + */ +class SelectRoutesUseCase: UseCase, Boolean> { + + val repository: RouteRepository + + @Inject + constructor(repository: RouteRepository, uiThread: Scheduler, thread: Scheduler): super(uiThread, thread){ + this.repository = repository + } + + override fun buildUseCaseObservable(params: Boolean): Observable> { + return repository.selectRoutes() + } +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase.kt b/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase.kt new file mode 100644 index 0000000..ef7bc57 --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/DeleteTicketsBySignUseCase.kt @@ -0,0 +1,35 @@ +package es.verdnatura.domain.interactor.ticket + +import es.verdnatura.domain.entity.SignData +import es.verdnatura.domain.repository.TicketRepository +import es.verdnatura.vndelivery.domain.interactor.UseCase +import io.reactivex.Observable +import io.reactivex.Scheduler +import javax.inject.Inject + +/** + * Created by nelo on 28/7/17. + */ +class DeleteTicketsBySignUseCase: UseCase, DeleteTicketsBySignUseCase.Params> { + + val repository: TicketRepository + + @Inject + constructor(repository: TicketRepository, uiThread: Scheduler, thread: Scheduler): super(uiThread, thread){ + this.repository = repository + } + + override fun buildUseCaseObservable(params: Params): Observable> { + return repository.deleteTicketsBySign(params.sign) + .map { params.signs.filter { s -> s.Sign != params.sign } } + } + + class Params private constructor(val sign: String, val signs: List){ + companion object { + fun forDelete(sign: String, signs: List): Params{ + return Params(sign, signs) + } + } + } + +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase.kt b/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase.kt new file mode 100644 index 0000000..11bec24 --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/FilterTicketsUseCase.kt @@ -0,0 +1,42 @@ +package es.verdnatura.domain.interactor.ticket + +import es.verdnatura.domain.entity.Ticket +import es.verdnatura.vndelivery.domain.interactor.UseCase +import io.reactivex.Observable +import io.reactivex.Scheduler +import javax.inject.Inject + +/** + * Created by nelo on 20/7/17. + */ +class FilterTicketsUseCase: UseCase>, FilterTicketsUseCase.Params>{ + + @Inject + constructor(uiThread: Scheduler, thread: Scheduler): super(uiThread, thread) + + + override fun buildUseCaseObservable(params: Params): Observable>> { + return Observable.just(filter(params.tickets, transformSignValue(params.signed))) + } + + private fun filter(tickets: List>, signed: Int): List> { + return tickets.flatMap { tt -> tt } + .map { t -> t } + .filter { t -> t.Signed == signed } + .groupBy { t -> t.Address } + .map { m -> m.value } + } + + private fun transformSignValue(signed: Boolean): Int{ + if (signed) return 1 else return 0 + } + + class Params private constructor(val tickets: List>, val signed: Boolean){ + companion object { + fun forFilter(tickets: List>, signed: Boolean): Params{ + return Params(tickets, signed) + } + } + } + +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase.kt b/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase.kt new file mode 100644 index 0000000..277b10c --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/GetTicketsUseCase.kt @@ -0,0 +1,40 @@ +package es.verdnatura.domain.interactor.ticket + +import es.verdnatura.domain.entity.Ticket +import es.verdnatura.domain.repository.TicketRepository +import es.verdnatura.vndelivery.domain.interactor.UseCase +import io.reactivex.Observable +import io.reactivex.Scheduler +import javax.inject.Inject + +/** + * Created by nelo on 7/7/17. + */ +class GetTicketsUseCase: UseCase>, GetTicketsUseCase.Params> { + + private val repositiroy: TicketRepository + + @Inject + constructor(repository: TicketRepository, uiThread: Scheduler, thread: Scheduler): super(uiThread, thread){ + this.repositiroy = repository + } + + override fun buildUseCaseObservable(params: Params): Observable>> { + return repositiroy.getTickets(params.route) + .map { tt -> groupTickets(tt) } + } + + fun groupTickets(tickets: List): List>{ + return tickets.groupBy { ticket -> ticket.Address } + .map { m -> m.value } + } + + class Params private constructor(val route: Int){ + companion object{ + fun forGetTickets(route: Int): Params{ + return Params(route) + } + } + } + +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase.kt b/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase.kt new file mode 100644 index 0000000..fd55709 --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/SelectTicketUseCase.kt @@ -0,0 +1,39 @@ +package es.verdnatura.domain.interactor.ticket + +import es.verdnatura.domain.entity.Ticket +import es.verdnatura.domain.repository.TicketRepository +import es.verdnatura.vndelivery.domain.interactor.UseCase +import io.reactivex.Observable +import io.reactivex.Scheduler +import javax.inject.Inject + +/** + * Created by nelo on 10/7/17. + */ +class SelectTicketUseCase: UseCase>, SelectTicketUseCase.Params> { + + val repository: TicketRepository + + @Inject + constructor(repository: TicketRepository, uiThread: Scheduler, thread: Scheduler): super(uiThread, thread){ + this.repository = repository + } + + override fun buildUseCaseObservable(params: Params): Observable>> { + return repository.selectTickets(params.route).map { tt -> groupTickets(tt) } + } + + fun groupTickets(tickets: List): List>{ + return tickets.groupBy { t -> t.Address } + .map { tt -> tt.value } + } + + class Params private constructor(val route: Int){ + companion object{ + fun forSelectTickets(route: Int): Params{ + return Params(route) + } + } + } + +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/SignDataUseCase.kt b/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/SignDataUseCase.kt new file mode 100644 index 0000000..f5de6ba --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/SignDataUseCase.kt @@ -0,0 +1,23 @@ +package es.verdnatura.domain.interactor.ticket + +import es.verdnatura.domain.entity.SignData +import es.verdnatura.domain.repository.TicketRepository +import es.verdnatura.vndelivery.domain.interactor.UseCase +import io.reactivex.Observable +import io.reactivex.Scheduler + +/** + * Created by nelo on 25/7/17. + */ +class SignDataUseCase: UseCase, Boolean> { + + val repository: TicketRepository + + constructor(repository: TicketRepository, uiThread: Scheduler, thread: Scheduler): super(uiThread, thread){ + this.repository = repository + } + + override fun buildUseCaseObservable(params: Boolean): Observable> { + return repository.getDataSignedTickets() + } +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase.kt b/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase.kt new file mode 100644 index 0000000..bbc8ba6 --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/SignTicketsUseCase.kt @@ -0,0 +1,35 @@ +package es.verdnatura.domain.interactor.ticket + +import es.verdnatura.domain.repository.TicketRepository +import es.verdnatura.vndelivery.domain.interactor.UseCase +import io.reactivex.Observable +import io.reactivex.Scheduler +import javax.inject.Inject + +/** + * Created by nelo on 12/7/17. + */ +class SignTicketsUseCase: UseCase { + + private val repository: TicketRepository + + @Inject + constructor(repository: TicketRepository, uiThread: Scheduler, thread: Scheduler): super(uiThread, thread){ + this.repository = repository + } + + + override fun buildUseCaseObservable(params: Params): Observable { + return repository.signTickets(params.sign, params.tickets, params.long, params.lat) + } + + + class Params private constructor(val sign: String, val tickets: List, val long: Double?, val lat: Double?){ + companion object{ + fun forSignTickets(sign: String, tickets: List, long: Double?, lat: Double?): Params{ + return Params(sign, tickets, long, lat) + } + } + } + +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase.kt b/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase.kt new file mode 100644 index 0000000..c6eaab1 --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/interactor/ticket/UploadSignsUseCase.kt @@ -0,0 +1,35 @@ +package es.verdnatura.domain.interactor.ticket + +import es.verdnatura.domain.repository.TicketRepository +import es.verdnatura.vndelivery.domain.interactor.UseCase +import io.reactivex.Observable +import io.reactivex.Scheduler +import javax.inject.Inject +import javax.inject.Singleton + +/** + * Created by nelo on 13/7/17. + */ +@Singleton +class UploadSignsUseCase: UseCase { + + private val repository: TicketRepository + + @Inject + constructor(repository: TicketRepository, uiThread: Scheduler, thread: Scheduler): super(uiThread, thread){ + this.repository = repository + } + + override fun buildUseCaseObservable(params: Params): Observable { + return repository.uploadSign(params.sign) + } + + class Params private constructor(val sign: String? = null){ + companion object{ + fun forUploadSign(sign: String? = null): Params{ + return Params(sign) + } + } + } + +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/repository/RouteRepository.kt b/domain/src/main/kotlin/es/verdnatura/domain/repository/RouteRepository.kt new file mode 100644 index 0000000..f03293a --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/repository/RouteRepository.kt @@ -0,0 +1,17 @@ +package es.verdnatura.domain.repository + +import es.verdnatura.domain.entity.Route +import io.reactivex.Observable +import okio.BufferedSource + +/** + * Created by nelo on 5/7/17. + */ +interface RouteRepository { + + fun getRoutes(): Observable> + fun selectRoutes(): Observable> + fun deleteRoutes() + fun getVersion(): Observable + fun getApk(): Observable +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/repository/SecurityRepository.kt b/domain/src/main/kotlin/es/verdnatura/domain/repository/SecurityRepository.kt new file mode 100644 index 0000000..4635408 --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/repository/SecurityRepository.kt @@ -0,0 +1,13 @@ +package es.verdnatura.vndelivery.domain.repository + +import io.reactivex.Observable + +/** + * Created by nelo on 10/5/17. + */ +interface SecurityRepository { + + fun login(user: String, pass: String): Observable + + fun createApi(user: String, pass: String) +} \ No newline at end of file diff --git a/domain/src/main/kotlin/es/verdnatura/domain/repository/TicketRepository.kt b/domain/src/main/kotlin/es/verdnatura/domain/repository/TicketRepository.kt new file mode 100644 index 0000000..0002820 --- /dev/null +++ b/domain/src/main/kotlin/es/verdnatura/domain/repository/TicketRepository.kt @@ -0,0 +1,18 @@ +package es.verdnatura.domain.repository + +import es.verdnatura.domain.entity.SignData +import es.verdnatura.domain.entity.Ticket +import io.reactivex.Observable + +/** + * Created by nelo on 7/7/17. + */ +interface TicketRepository { + + fun getTickets(route: Int): Observable> + fun selectTickets(route: Int): Observable> + fun signTickets(sign: String, tickets: List, long: Double?, lat: Double?): Observable + fun uploadSign(sign: String? = null): Observable + fun getDataSignedTickets(): Observable> + fun deleteTicketsBySign(sign: String): Observable +} \ No newline at end of file diff --git a/domain/src/test/kotlin/es/verdnatura/domain/check/PreconditionsTest.kt b/domain/src/test/kotlin/es/verdnatura/domain/check/PreconditionsTest.kt new file mode 100644 index 0000000..f781bad --- /dev/null +++ b/domain/src/test/kotlin/es/verdnatura/domain/check/PreconditionsTest.kt @@ -0,0 +1,27 @@ +package es.verdnatura.vndelivery.domain.check + +import org.junit.Rule +import org.junit.Test +import org.junit.rules.ExpectedException + +/** + * Created by nelo on 21/3/17. + */ +class PreconditionsTest { + + @Rule + @JvmField + public var exception = ExpectedException.none() + + @Test + fun checkNotNull(){ + var message : String = "" + Preconditions.checkNotNull(message) + } + + @Test + fun checkNull(){ + exception.expect(NullPointerException::class.java) + Preconditions.checkNotNull(null) + } +} \ No newline at end of file diff --git a/domain/src/test/kotlin/es/verdnatura/domain/interactor/LoginUseCaseTest.kt b/domain/src/test/kotlin/es/verdnatura/domain/interactor/LoginUseCaseTest.kt new file mode 100644 index 0000000..b849404 --- /dev/null +++ b/domain/src/test/kotlin/es/verdnatura/domain/interactor/LoginUseCaseTest.kt @@ -0,0 +1,38 @@ +package es.verdnatura.vndelivery.domain.interactor + +import com.nhaarman.mockito_kotlin.* +import es.verdnatura.vndelivery.domain.repository.SecurityRepository +import io.reactivex.Scheduler +import org.junit.Before +import org.junit.Test + +/** + * Created by nelo on 19/5/17. + */ +class LoginUseCaseTest { + + private lateinit var loginUseCase: LoginUseCase + + private val user = "user" + private val pass = "pass" + + private val uiThread: Scheduler = mock() + private val thread: Scheduler = mock() + private val repository: SecurityRepository = mock() + + @Before + fun setUp(){ + loginUseCase = LoginUseCase(repository, uiThread, thread) + } + + @Test + fun testLogin(){ + loginUseCase.buildUseCaseObservable(LoginUseCase.Params.forLogin(user, pass)) + verify(repository).createApi(user, pass) + verify(repository).login(user, pass) + verifyNoMoreInteractions(repository) + verifyZeroInteractions(uiThread) + verifyZeroInteractions(thread) + } + +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..aac7c9b --- /dev/null +++ b/gradle.properties @@ -0,0 +1,17 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx1536m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..13372ae Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..598a642 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Thu Jul 20 07:53:04 CEST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..9d82f78 --- /dev/null +++ b/gradlew @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..aec9973 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/local.properties b/local.properties new file mode 100644 index 0000000..8ee1950 --- /dev/null +++ b/local.properties @@ -0,0 +1,10 @@ +## This file is automatically generated by Android Studio. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file should *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. +sdk.dir=/Users/nelo/Library/Android/sdk \ No newline at end of file diff --git a/presentation/.gitignore b/presentation/.gitignore new file mode 100644 index 0000000..855ff81 --- /dev/null +++ b/presentation/.gitignore @@ -0,0 +1,42 @@ +# Built application files +*.apk +*.ap_ + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# Intellij +*.iml +.idea/workspace.xml + +# Keystore files +*.jks + +.idea/ diff --git a/presentation/.hgignore b/presentation/.hgignore new file mode 100644 index 0000000..bcbc259 --- /dev/null +++ b/presentation/.hgignore @@ -0,0 +1,43 @@ +syntax: glob +# Built application files +*.apk +*.ap_ + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# Intellij +*.iml +.idea/workspace.xml + +# Keystore files +*.jks + +.idea/ diff --git a/presentation/build.gradle b/presentation/build.gradle new file mode 100644 index 0000000..9c64a94 --- /dev/null +++ b/presentation/build.gradle @@ -0,0 +1,113 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' + +android { + def globalConfiguration = rootProject.extensions.getByName("ext") + + compileSdkVersion globalConfiguration.getAt("androidCompileSdkVersion") + buildToolsVersion globalConfiguration.getAt("androidBuildToolsVersion") + + defaultConfig { + minSdkVersion globalConfiguration.getAt("androidMinSdkVersion") + targetSdkVersion globalConfiguration.getAt("androidTargetSdkVersion") + + applicationId globalConfiguration.getAt("androidApplicationId") + versionCode globalConfiguration.getAt("androidVersionCode") + versionName globalConfiguration.getAt("androidVersionName") + testInstrumentationRunner globalConfiguration.getAt("testInstrumentationRunner") + testApplicationId globalConfiguration.getAt("testApplicationId") + multiDexEnabled true + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + debug.java.srcDirs += 'src/debug/kotlin' + test.java.srcDirs += 'src/test/kotlin' + androidTest.java.srcDirs += 'src/androidTest/kotlin' + main.res.srcDirs = + [ + 'src/main/res', + 'src/main/res/layouts/fragment', + 'src/main/res/layouts/activity', + 'src/main/res/layouts/item', + 'src/main/res/layouts/view' + ] + + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + encoding = 'UTF-8' + } + + packagingOptions { + exclude 'LICENSE.txt' + exclude 'META-INF/DEPENDENCIES' + exclude 'META-INF/ASL2.0' + exclude 'META-INF/NOTICE' + exclude 'META-INF/LICENSE' + exclude 'META-INF/rxjava.properties' + } + +} + +afterEvaluate { + android.sourceSets.all { sourceSet -> + if (!sourceSet.name.startsWith('test') || !sourceSet.name.startsWith('androidTest')) { + sourceSet.kotlin.setSrcDirs([]) + } + } +} + +dependencies { + def presentationDependencies = rootProject.ext.presentationDependencies + def presentationTestDependencies = rootProject.ext.presentationTestDependencies + def presentationAndroidTestDependencies = rootProject.ext.presentationAndroidTestDependencies + + compile project(':domain') + compile project(':data') + compile project(':vncore') + + compile presentationDependencies.appcomapt_v7 + compile presentationDependencies.kotlin + compile presentationDependencies.dagger + compile presentationDependencies.rxAndroid + compile presentationDependencies.inkView + + testCompile presentationTestDependencies.jUnit + testCompile presentationTestDependencies.kotlin + testCompile presentationTestDependencies.kotlinTest + testCompile presentationTestDependencies.mockitoKotlin + testCompile presentationTestDependencies.kluent + + androidTestCompile presentationAndroidTestDependencies.espresso + androidTestCompile presentationAndroidTestDependencies.runner + androidTestCompile presentationAndroidTestDependencies.rules + androidTestCompile presentationAndroidTestDependencies.espressoIntents + androidTestCompile presentationAndroidTestDependencies.annotations + + provided presentationDependencies.javaxAnnotation + kapt presentationDependencies.kaptDagger + + //Development + //compile developmentDependencies.leakCanary + + compile fileTree(dir: 'libs', include: '*.jar') +} + +repositories { + mavenCentral() + maven { url "https://jitpack.io" } +} +kapt { + generateStubs = true +} \ No newline at end of file diff --git a/presentation/proguard-rules.pro b/presentation/proguard-rules.pro new file mode 100644 index 0000000..f6f0958 --- /dev/null +++ b/presentation/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Users/nelo/Library/Android/sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/presentation/src/androidTest/kotlin/es/verdnatura/test/framework/AcceptanceTest.kt b/presentation/src/androidTest/kotlin/es/verdnatura/test/framework/AcceptanceTest.kt new file mode 100644 index 0000000..b03e1bb --- /dev/null +++ b/presentation/src/androidTest/kotlin/es/verdnatura/test/framework/AcceptanceTest.kt @@ -0,0 +1,24 @@ +package es.verdnatura.vndelivery.test.framework + +import android.app.Activity +import android.support.test.espresso.intent.rule.IntentsTestRule +import android.support.test.rule.ActivityTestRule +import android.support.test.runner.AndroidJUnit4 +import android.test.suitebuilder.annotation.LargeTest +import org.junit.Rule +import org.junit.runner.RunWith + +/** + * Created by nelo on 22/3/17. + */ +@LargeTest +@RunWith(AndroidJUnit4::class) +abstract class AcceptanceTest(clazz: Class) { + + @Rule @JvmField + val testRule: ActivityTestRule = IntentsTestRule(clazz) + + val checkThat: Matchers = Matchers() + val events: Events = Events() +} + diff --git a/presentation/src/androidTest/kotlin/es/verdnatura/test/framework/Events.kt b/presentation/src/androidTest/kotlin/es/verdnatura/test/framework/Events.kt new file mode 100644 index 0000000..966119f --- /dev/null +++ b/presentation/src/androidTest/kotlin/es/verdnatura/test/framework/Events.kt @@ -0,0 +1,17 @@ +package es.verdnatura.vndelivery.test.framework + +import android.support.annotation.IdRes +import android.support.test.espresso.Espresso.onView +import android.support.test.espresso.action.ViewActions.click +import android.support.test.espresso.matcher.ViewMatchers.withId + +/** + * Created by nelo on 22/3/17. + */ +class Events { + + fun clickOnView(@IdRes viewId: Int) { + onView(withId(viewId)).perform(click()) + } + +} \ No newline at end of file diff --git a/presentation/src/androidTest/kotlin/es/verdnatura/test/framework/Matchers.kt b/presentation/src/androidTest/kotlin/es/verdnatura/test/framework/Matchers.kt new file mode 100644 index 0000000..e6d7c3a --- /dev/null +++ b/presentation/src/androidTest/kotlin/es/verdnatura/test/framework/Matchers.kt @@ -0,0 +1,33 @@ +package es.verdnatura.vndelivery.test.framework + +import android.app.Activity +import android.support.annotation.IdRes +import android.support.annotation.StringRes +import android.support.test.espresso.Espresso.onView +import android.support.test.espresso.assertion.ViewAssertions.matches +import android.support.test.espresso.intent.Intents.intended +import android.support.test.espresso.intent.matcher.IntentMatchers +import android.support.test.espresso.matcher.ViewMatchers.* + +/** + * Created by nelo on 22/3/17. + */ +class Matchers { + + fun nextOpenActivityIs(clazz: Class) { + intended(IntentMatchers.hasComponent(clazz.name)) + } + + fun viewIsVisibleAndContainsText(@StringRes stringResource: Int) { + onView(withText(stringResource)).check(matches(withEffectiveVisibility(Visibility.VISIBLE))) + } + + fun viewContainsText(@IdRes viewId: Int, @StringRes stringResource: Int) { + onView(withId(viewId)).check(matches(withText(stringResource))) + } + + fun viewIsVisible(@IdRes viewId: Int){ + onView(withId(viewId)).check(matches(withEffectiveVisibility(Visibility.VISIBLE))) + } + +} \ No newline at end of file diff --git a/presentation/src/androidTest/kotlin/es/verdnatura/test/view/activity/LoginActivityTest.kt b/presentation/src/androidTest/kotlin/es/verdnatura/test/view/activity/LoginActivityTest.kt new file mode 100644 index 0000000..58802ae --- /dev/null +++ b/presentation/src/androidTest/kotlin/es/verdnatura/test/view/activity/LoginActivityTest.kt @@ -0,0 +1,31 @@ +package es.verdnatura.vndelivery.test.view.activity + +import android.support.test.runner.AndroidJUnit4 +import es.verdnatura.vndelivery.presentation.R +import es.verdnatura.vndelivery.presentation.view.activity.LoginActivity +import es.verdnatura.vndelivery.test.framework.AcceptanceTest +import org.junit.Test +import org.junit.runner.RunWith + +/** + * Created by nelo on 12/5/17. + */ +@RunWith(AndroidJUnit4::class) +class LoginActivityTest: AcceptanceTest(LoginActivity::class.java) { + + @Test + fun putUserName(){ + val editId = R.id.editUser + events.typeTextOnView(editId, "user") + checkThat.viewContainsText(editId, "user") + } + + @Test + fun showPasswordTest(){ + val editId = R.id.editPassword + events.typeTextOnView(editId, "hola") + checkThat.viewContainsText(editId, "hola") + events.clickOnView(editId) + } + +} \ No newline at end of file diff --git a/presentation/src/main/AndroidManifest.xml b/presentation/src/main/AndroidManifest.xml new file mode 100644 index 0000000..cf4b672 --- /dev/null +++ b/presentation/src/main/AndroidManifest.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/presentation/src/main/ic_launcher-web.png b/presentation/src/main/ic_launcher-web.png new file mode 100644 index 0000000..68ddb17 Binary files /dev/null and b/presentation/src/main/ic_launcher-web.png differ diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/AndroidApplication.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/AndroidApplication.kt new file mode 100644 index 0000000..f574332 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/AndroidApplication.kt @@ -0,0 +1,38 @@ +package es.verdnatura.vndelivery.presentation + +import android.app.Application +import es.verdnatura.vndelivery.data.preferences.Preferences +import es.verdnatura.vndelivery.data.rest.NsConnector +import es.verdnatura.vndelivery.presentation.di.components.ApplicationComponent +import es.verdnatura.vndelivery.presentation.di.components.DaggerApplicationComponent +import es.verdnatura.vndelivery.presentation.di.modules.ApplicationModule +import es.verdnatura.vndelivery.presentation.navigation.Navigator +import javax.inject.Inject + +/** + * Created by nelo on 20/2/17. + */ + +class AndroidApplication: Application() { + + @Inject lateinit var navigator: Navigator + @Inject lateinit var preferences: Preferences + + val component: ApplicationComponent by lazy { + DaggerApplicationComponent.builder().applicationModule(ApplicationModule(this)).build() + } + + override fun onCreate() { + super.onCreate() + component.inject(this) + + //initializeLeakDetection() + } + + /*private fun initializeLeakDetection() { + if (BuildConfig.DEBUG) { + LeakCanary.install(this) + } + }*/ + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/di/HasComponent.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/di/HasComponent.kt new file mode 100644 index 0000000..e294842 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/di/HasComponent.kt @@ -0,0 +1,8 @@ +package es.verdnatura.vndelivery.presentation.di + +/** + * Created by nelo on 21/2/17. + */ +interface HasComponent { + fun getSubComponent(): C +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/di/PerActivity.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/di/PerActivity.kt new file mode 100644 index 0000000..d7326ea --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/di/PerActivity.kt @@ -0,0 +1,11 @@ +package es.verdnatura.vndelivery.presentation.di + +import javax.inject.Scope +import kotlin.annotation.AnnotationRetention.RUNTIME +/** + * Created by nelo on 20/2/17. + */ + +@Scope +@Retention(RUNTIME) +annotation class PerActivity diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/ApplicationComponent.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/ApplicationComponent.kt new file mode 100644 index 0000000..c22117e --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/ApplicationComponent.kt @@ -0,0 +1,70 @@ +package es.verdnatura.vndelivery.presentation.di.components + +import android.app.Application +import android.content.SharedPreferences +import dagger.Component +import es.verdnatura.core.database.VnOpenHelper +import es.verdnatura.data.database.RouteDb +import es.verdnatura.data.database.TicketDb +import es.verdnatura.data.image.ImageConverter +import es.verdnatura.domain.interactor.ticket.UploadSignsUseCase +import es.verdnatura.domain.repository.RouteRepository +import es.verdnatura.domain.repository.TicketRepository +import es.verdnatura.presentation.di.components.* +import es.verdnatura.presentation.di.modules.* +import es.verdnatura.presentation.location.LocationProvider +import es.verdnatura.vndelivery.data.preferences.Preferences +import es.verdnatura.vndelivery.data.rest.NsConnector +import es.verdnatura.vndelivery.data.rest.NsInterceptor +import es.verdnatura.vndelivery.domain.repository.SecurityRepository +import es.verdnatura.vndelivery.presentation.AndroidApplication +import es.verdnatura.vndelivery.presentation.di.modules.ApplicationModule +import es.verdnatura.vndelivery.presentation.di.modules.LoginModule +import es.verdnatura.vndelivery.presentation.syncadapter.SyncAdapter +import es.verdnatura.vndelivery.presentation.syncadapter.VerdnaturaAuthenticator +import io.reactivex.Scheduler + +import javax.inject.Named + +import javax.inject.Singleton + +/** + * Created by nelo on 20/2/17. + */ +@Singleton +@Component(modules = arrayOf(ApplicationModule::class)) +interface ApplicationComponent { + + @Named("ui_thread") fun uiThread(): Scheduler + @Named("executor_thread") fun executorThread(): Scheduler + fun application(): Application + //fun sharedPreferences(): SharedPreferences + fun nsConnector(): NsConnector + fun nsInterceptor(): NsInterceptor + fun vnOpenHelper(): VnOpenHelper + fun sharedPreferences(): SharedPreferences + fun preferences(): Preferences + fun RouteDb(): RouteDb + fun TicketDb(): TicketDb + + fun securityRepository(): SecurityRepository + fun routeRepository(): RouteRepository + fun ticketRepository(): TicketRepository + fun uploadSigns(): UploadSignsUseCase + + fun vnAuth(): VerdnaturaAuthenticator + fun syncAdapter(): SyncAdapter + + fun providerLocation(): LocationProvider + fun imageConverter(): ImageConverter + + fun inject(application: AndroidApplication) + + fun plus(loinModule: LoginModule): LoginComponent + fun plus(routeModule: RouteModule): RouteComponent + fun plus(ticketModule: TicketModule): TicketComponent + fun plus(signModule: SignModule): SignComponent + fun plus(serviceModule: ServiceModule): ServiceComponent + fun plus(signDataModule: SignDataModule): SignDataComponent + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/LoginComponent.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/LoginComponent.kt new file mode 100644 index 0000000..1c28432 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/LoginComponent.kt @@ -0,0 +1,21 @@ +package es.verdnatura.vndelivery.presentation.di.components + +import dagger.Subcomponent +import es.verdnatura.vndelivery.domain.interactor.LoginUseCase +import es.verdnatura.vndelivery.presentation.di.PerActivity +import es.verdnatura.vndelivery.presentation.di.modules.LoginModule +import es.verdnatura.vndelivery.presentation.presenter.LoginPresenter +import es.verdnatura.vndelivery.presentation.view.fragment.LoginFragment + +/** + * Created by nelo on 10/5/17. + */ +@PerActivity +@Subcomponent(modules = arrayOf(LoginModule::class)) +interface LoginComponent { + + fun inject(loginFragment: LoginFragment) + fun getLoginPresenter():LoginPresenter + fun getLoginUseCase(): LoginUseCase + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/RouteComponent.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/RouteComponent.kt new file mode 100644 index 0000000..772fb79 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/RouteComponent.kt @@ -0,0 +1,23 @@ +package es.verdnatura.presentation.di.components + +import dagger.Subcomponent +import es.verdnatura.domain.interactor.route.GetRoutesUseCase +import es.verdnatura.domain.interactor.route.SelectRoutesUseCase +import es.verdnatura.presentation.di.modules.RouteModule +import es.verdnatura.presentation.presenter.RoutePresenter +import es.verdnatura.presentation.view.fragment.RouteFragment +import es.verdnatura.vndelivery.presentation.di.PerActivity + +/** + * Created by nelo on 5/7/17. + */ +@PerActivity +@Subcomponent(modules = arrayOf(RouteModule::class)) +interface RouteComponent { + + fun inject(routeFragment: RouteFragment) + + fun routesPresenter(): RoutePresenter + fun getRoutesUseCase(): GetRoutesUseCase + fun selectRoutesUseCase(): SelectRoutesUseCase +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/ServiceComponent.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/ServiceComponent.kt new file mode 100644 index 0000000..d9e58ae --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/ServiceComponent.kt @@ -0,0 +1,19 @@ +package es.verdnatura.presentation.di.components + +import dagger.Subcomponent +import es.verdnatura.presentation.di.modules.ServiceModule +import es.verdnatura.vndelivery.presentation.syncadapter.AuthenticationService +import es.verdnatura.vndelivery.presentation.syncadapter.SyncService +import javax.inject.Singleton + +/** + * Created by nelo on 12/7/17. + */ +@Singleton +@Subcomponent(modules = arrayOf(ServiceModule::class)) +interface ServiceComponent { + + fun inject(service: AuthenticationService) + fun inject(service: SyncService) + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/SignComponent.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/SignComponent.kt new file mode 100644 index 0000000..291b05c --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/SignComponent.kt @@ -0,0 +1,20 @@ +package es.verdnatura.presentation.di.components + +import dagger.Subcomponent +import es.verdnatura.presentation.di.modules.SignModule +import es.verdnatura.presentation.presenter.SignPresenter +import es.verdnatura.vndelivery.presentation.di.PerActivity +import es.verdnatura.vndelivery.presentation.view.fragment.SignFragment + +/** + * Created by nelo on 11/7/17. + */ +@PerActivity +@Subcomponent(modules = arrayOf(SignModule::class)) +interface SignComponent { + + fun inject(signFragment: SignFragment) + + fun signPresenter(): SignPresenter + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/SignDataComponent.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/SignDataComponent.kt new file mode 100644 index 0000000..939ccfa --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/SignDataComponent.kt @@ -0,0 +1,24 @@ +package es.verdnatura.presentation.di.components + +import dagger.Subcomponent +import es.verdnatura.domain.interactor.ticket.DeleteTicketsBySignUseCase +import es.verdnatura.domain.interactor.ticket.SignDataUseCase +import es.verdnatura.presentation.di.modules.SignDataModule +import es.verdnatura.presentation.presenter.SignDataPresenter +import es.verdnatura.presentation.view.fragment.SignDataFragment +import es.verdnatura.vndelivery.presentation.di.PerActivity + +/** + * Created by nelo on 26/7/17. + */ +@PerActivity +@Subcomponent(modules = arrayOf(SignDataModule::class)) +interface SignDataComponent { + + fun inject(signDataFragment: SignDataFragment) + + fun signDataPresenter(): SignDataPresenter + fun signDataUseCase(): SignDataUseCase + fun deleteTicketsBySignUseCase(): DeleteTicketsBySignUseCase + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/TicketComponent.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/TicketComponent.kt new file mode 100644 index 0000000..7e9543c --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/di/components/TicketComponent.kt @@ -0,0 +1,25 @@ +package es.verdnatura.presentation.di.components + +import dagger.Subcomponent +import es.verdnatura.domain.interactor.ticket.FilterTicketsUseCase +import es.verdnatura.domain.interactor.ticket.GetTicketsUseCase +import es.verdnatura.domain.interactor.ticket.SelectTicketUseCase +import es.verdnatura.presentation.di.modules.TicketModule +import es.verdnatura.presentation.presenter.TicketPresenter +import es.verdnatura.presentation.view.fragment.TicketFragment +import es.verdnatura.vndelivery.presentation.di.PerActivity + +/** + * Created by nelo on 7/7/17. + */ +@PerActivity +@Subcomponent(modules = arrayOf(TicketModule::class)) +interface TicketComponent { + + fun inject(ticketFragment: TicketFragment) + + fun getTicketPresenter(): TicketPresenter + fun getTicketsUseCase(): GetTicketsUseCase + fun selectTicketUseCase(): SelectTicketUseCase + fun filterTicketsUseCase(): FilterTicketsUseCase +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/ApplicationModule.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/ApplicationModule.kt new file mode 100644 index 0000000..79ff0f9 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/ApplicationModule.kt @@ -0,0 +1,77 @@ +package es.verdnatura.vndelivery.presentation.di.modules + +import android.app.Application +import android.content.Context +import android.content.SharedPreferences +import dagger.Module +import javax.inject.Singleton +import dagger.Provides +import es.verdnatura.core.database.VnOpenHelper +import es.verdnatura.data.database.RouteDb +import es.verdnatura.data.database.TicketDb +import es.verdnatura.data.image.ImageConverter +import es.verdnatura.data.rest.RouteApiImpl +import es.verdnatura.data.rest.TicketApiImpl +import es.verdnatura.domain.interactor.ticket.UploadSignsUseCase +import es.verdnatura.domain.repository.RouteRepository +import es.verdnatura.domain.repository.TicketRepository +import es.verdnatura.presentation.location.LocationProvider +import es.verdnatura.vndelivery.data.preferences.Preferences +import es.verdnatura.vndelivery.data.rest.NsConnector +import es.verdnatura.vndelivery.data.rest.NsInterceptor +import es.verdnatura.vndelivery.data.rest.SecurityApiImpl +import es.verdnatura.vndelivery.domain.repository.SecurityRepository +import es.verdnatura.vndelivery.presentation.syncadapter.SyncAdapter +import es.verdnatura.vndelivery.presentation.syncadapter.VerdnaturaAuthenticator +import io.reactivex.Scheduler +import javax.inject.Named +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.schedulers.Schedulers + +/** + * Created by nelo on 20/2/17. + */ +@Module +class ApplicationModule(private val application: Application) { + + private val PREF_NAME = "prefs.xml" + + @Provides @Named("executor_thread") fun provideExecutorThread() = Schedulers.newThread() + + @Provides @Named("ui_thread") fun provideUiThread() = AndroidSchedulers.mainThread() + + @Provides @Singleton fun provideApplication() = application + + @Provides @Singleton fun providesNsConnector(interceptor: NsInterceptor) = NsConnector(application, interceptor) + + @Provides @Singleton fun providesInterceptor(preferences: Preferences) = NsInterceptor(application, preferences.getUser(), preferences.getPass()) + + @Provides @Singleton fun provideSecurityRepository(securityRepository: SecurityApiImpl): SecurityRepository = securityRepository + + @Provides @Singleton fun providesRouteRepository(routeRepository: RouteApiImpl): RouteRepository = routeRepository + + @Provides @Singleton fun ticketRepository(ticketRepository: TicketApiImpl): TicketRepository = ticketRepository + + @Provides @Singleton fun providesVnOpenHelper() = VnOpenHelper(application) + + @Provides @Singleton fun providesRouteDb(vnOpenHelper: VnOpenHelper): RouteDb = RouteDb(vnOpenHelper) + + @Provides @Singleton fun providesTicketDb(vnOpenHelper: VnOpenHelper): TicketDb = TicketDb(vnOpenHelper) + + @Provides @Singleton fun provideLocation(): LocationProvider = LocationProvider() + + @Provides @Singleton fun provideImageConverter() = ImageConverter() + + @Provides @Singleton fun provideSyncAdapter(uploadSignsUseCase: UploadSignsUseCase) = SyncAdapter(application, uploadSignsUseCase) + + @Provides @Singleton fun providesUploadSign(ticketRepository: TicketApiImpl, + @Named("executor_thread") thread: Scheduler, + @Named("ui_thread") uiThread: Scheduler) = UploadSignsUseCase(ticketRepository, uiThread, thread) + + @Provides @Singleton fun providesVnAuth() = VerdnaturaAuthenticator(application) + + @Provides @Singleton fun getAppPreferences(): SharedPreferences = application.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE) + + @Provides @Singleton fun getPreferences(sp: SharedPreferences): Preferences = Preferences(sp) + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/LoginModule.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/LoginModule.kt new file mode 100644 index 0000000..00005f6 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/LoginModule.kt @@ -0,0 +1,28 @@ +package es.verdnatura.vndelivery.presentation.di.modules + +import dagger.Module +import dagger.Provides +import es.verdnatura.vndelivery.domain.interactor.LoginUseCase +import es.verdnatura.vndelivery.domain.repository.SecurityRepository +import es.verdnatura.vndelivery.presentation.di.PerActivity +import es.verdnatura.vndelivery.presentation.presenter.LoginPresenter +import es.verdnatura.vndelivery.presentation.view.activity.LoginActivity +import io.reactivex.Scheduler +import javax.inject.Named + +/** + * Created by nelo on 10/5/17. + */ +@Module +class LoginModule(private val activity: LoginActivity) { + + @PerActivity @Provides fun getLoginPresenter(loginUseCase: LoginUseCase) = LoginPresenter(loginUseCase) + + @Provides + @PerActivity + fun getLoginUseCase(securityRepository: SecurityRepository, + @Named("ui_thread") uiThread: Scheduler, + @Named("executor_thread") executorThread: Scheduler): LoginUseCase{ + return LoginUseCase(securityRepository, uiThread, executorThread) + } +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/RouteModule.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/RouteModule.kt new file mode 100644 index 0000000..9336ae5 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/RouteModule.kt @@ -0,0 +1,60 @@ +package es.verdnatura.presentation.di.modules + +import dagger.Module +import dagger.Provides +import es.verdnatura.domain.interactor.route.GetRoutesUseCase +import es.verdnatura.domain.interactor.route.SelectRoutesUseCase +import es.verdnatura.domain.repository.RouteRepository +import es.verdnatura.presentation.presenter.RoutePresenter +import es.verdnatura.vndelivery.domain.interactor.UpdateUseCase +import es.verdnatura.vndelivery.presentation.di.PerActivity +import es.verdnatura.vndelivery.vndelivery.interactor.GetVersionUseCase +import io.reactivex.Scheduler +import javax.inject.Named + +/** + * Created by nelo on 5/7/17. + */ +@Module +class RouteModule { + + @Provides + @PerActivity + fun provideRoutePresenter(getRoutesUseCase: GetRoutesUseCase, + selectRoutesUseCase: SelectRoutesUseCase, + updateUseCase: UpdateUseCase, + getVersionUseCase: GetVersionUseCase): RoutePresenter = RoutePresenter(getRoutesUseCase, selectRoutesUseCase, updateUseCase, getVersionUseCase) + + @Provides + @PerActivity + fun providesGetRoutesUseCase(routeRepository: RouteRepository, + @Named("ui_thread") uiThread: Scheduler, + @Named("executor_thread") executorThread: Scheduler): GetRoutesUseCase { + return GetRoutesUseCase(routeRepository, uiThread, executorThread) + } + + @Provides + @PerActivity + fun providesSelectRoutesUseCase(routeRepository: RouteRepository, + @Named("ui_thread") uiThread: Scheduler, + @Named("executor_thread") executorThread: Scheduler): SelectRoutesUseCase { + return SelectRoutesUseCase(routeRepository, uiThread, executorThread) + } + + @Provides + @PerActivity + fun providesGetVersionUseCase(routeRepository: RouteRepository, + @Named("ui_thread") uiThread: Scheduler, + @Named("executor_thread") executorThread: Scheduler): GetVersionUseCase { + return GetVersionUseCase(routeRepository, uiThread, executorThread) + } + + @Provides + @PerActivity + fun providesUpdateUseCase(routeRepository: RouteRepository, + @Named("ui_thread") uiThread: Scheduler, + @Named("executor_thread") executorThread: Scheduler): UpdateUseCase { + return UpdateUseCase(routeRepository, uiThread, executorThread) + } + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/ServiceModule.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/ServiceModule.kt new file mode 100644 index 0000000..3d280f9 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/ServiceModule.kt @@ -0,0 +1,9 @@ +package es.verdnatura.presentation.di.modules + +import dagger.Module + +/** + * Created by nelo on 12/7/17. + */ +@Module +class ServiceModule \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/SignDataModule.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/SignDataModule.kt new file mode 100644 index 0000000..32c5343 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/SignDataModule.kt @@ -0,0 +1,35 @@ +package es.verdnatura.presentation.di.modules + +import dagger.Module +import dagger.Provides +import es.verdnatura.domain.interactor.ticket.DeleteTicketsBySignUseCase +import es.verdnatura.domain.interactor.ticket.SignDataUseCase +import es.verdnatura.domain.interactor.ticket.UploadSignsUseCase +import es.verdnatura.domain.repository.TicketRepository +import es.verdnatura.presentation.presenter.SignDataPresenter +import es.verdnatura.vndelivery.presentation.di.PerActivity +import io.reactivex.Scheduler +import javax.inject.Named + +/** + * Created by nelo on 26/7/17. + */ +@Module +class SignDataModule { + + @Provides @PerActivity + fun getSignDataPresenter(signDataUseCase: SignDataUseCase, uploadSignsUseCase: UploadSignsUseCase, + deleteTicketsBySignUseCase: DeleteTicketsBySignUseCase) = SignDataPresenter(signDataUseCase, uploadSignsUseCase, deleteTicketsBySignUseCase) + + + @Provides @PerActivity + fun getSignDataUseCase(ticketRepository: TicketRepository, + @Named("ui_thread") uiThread: Scheduler, + @Named("executor_thread") executorThread: Scheduler) = SignDataUseCase(ticketRepository, uiThread, executorThread) + + + @Provides @PerActivity + fun deleteBySignUseCase(ticketRepository: TicketRepository, + @Named("ui_thread") uiThread: Scheduler, + @Named("executor_thread") executorThread: Scheduler) = DeleteTicketsBySignUseCase(ticketRepository, uiThread, executorThread) +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/SignModule.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/SignModule.kt new file mode 100644 index 0000000..89ce1fc --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/SignModule.kt @@ -0,0 +1,28 @@ +package es.verdnatura.presentation.di.modules + +import dagger.Module +import dagger.Provides +import es.verdnatura.domain.interactor.ticket.SignTicketsUseCase +import es.verdnatura.domain.interactor.ticket.UploadSignsUseCase +import es.verdnatura.domain.repository.TicketRepository +import es.verdnatura.presentation.presenter.SignPresenter +import es.verdnatura.vndelivery.presentation.di.PerActivity +import io.reactivex.Scheduler +import javax.inject.Named + +/** + * Created by nelo on 11/7/17. + */ +@Module +class SignModule { + + @Provides @PerActivity + fun getSignPresenter(signTicketsUseCase: SignTicketsUseCase, uploadSignsUseCase: UploadSignsUseCase) = SignPresenter(signTicketsUseCase, uploadSignsUseCase) + + + @Provides @PerActivity + fun getSignUseCase(ticketRepository: TicketRepository, + @Named("ui_thread") uiThread: Scheduler, + @Named("executor_thread") executorThread: Scheduler) = SignTicketsUseCase(ticketRepository, uiThread, executorThread) + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/TicketModule.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/TicketModule.kt new file mode 100644 index 0000000..756019a --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/di/modules/TicketModule.kt @@ -0,0 +1,49 @@ +package es.verdnatura.presentation.di.modules + +import dagger.Module +import dagger.Provides +import es.verdnatura.domain.interactor.ticket.FilterTicketsUseCase +import es.verdnatura.domain.interactor.ticket.GetTicketsUseCase +import es.verdnatura.domain.interactor.ticket.SelectTicketUseCase +import es.verdnatura.domain.repository.TicketRepository +import es.verdnatura.presentation.presenter.TicketPresenter +import es.verdnatura.vndelivery.presentation.di.PerActivity +import io.reactivex.Scheduler +import javax.inject.Named + +/** + * Created by nelo on 7/7/17. + */ +@Module +class TicketModule { + + @Provides + @PerActivity + fun getTicketPresenter(getTicketsUseCase: GetTicketsUseCase, selectTicketUseCase: SelectTicketUseCase, filterTicketsUseCase: FilterTicketsUseCase): TicketPresenter{ + return TicketPresenter(getTicketsUseCase, selectTicketUseCase, filterTicketsUseCase) + } + + @Provides + @PerActivity + fun getTicketsUseCase(ticketRepository: TicketRepository, + @Named("ui_thread") uiThread: Scheduler, + @Named("executor_thread") executorThread: Scheduler): GetTicketsUseCase{ + return GetTicketsUseCase(ticketRepository, uiThread, executorThread) + } + + @Provides + @PerActivity + fun selectTickets(ticketRepository: TicketRepository, + @Named("ui_thread") uiThread: Scheduler, + @Named("executor_thread") executorThread: Scheduler): SelectTicketUseCase{ + return SelectTicketUseCase(ticketRepository, uiThread, executorThread) + } + + @Provides + @PerActivity + fun filterTickets(@Named("ui_thread") uiThread: Scheduler, + @Named("executor_thread") executorThread: Scheduler): FilterTicketsUseCase{ + return FilterTicketsUseCase(uiThread, executorThread) + } + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/location/LocationProvider.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/location/LocationProvider.kt new file mode 100644 index 0000000..e5678e2 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/location/LocationProvider.kt @@ -0,0 +1,78 @@ +package es.verdnatura.presentation.location + +import android.content.Context +import android.content.Intent +import android.location.Criteria +import android.location.Location +import android.location.LocationListener +import android.location.LocationManager +import android.os.Bundle +import android.provider.Settings +import android.util.Log +import es.verdnatura.presentation.view.dialog.DialogLocation +import javax.inject.Singleton + +/** + * Created by nelo on 11/7/17. + */ +@Singleton +class LocationProvider: LocationListener { + private val TIME_INTERVAL = 30000 + + private lateinit var locationManager: LocationManager + + override fun onLocationChanged(location: Location?) { + Log.d("Location", location.toString()) + } + + fun createLocationManager(context: Context){ + locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager + if (!isEnabledProvider()) + showAlertProvider(context) + else + updateLocation() + } + + fun getProvider(): String{ + val criteria = Criteria() + criteria.accuracy = Criteria.ACCURACY_FINE + return locationManager.getBestProvider(criteria, false) + } + + fun isEnabledProvider(): Boolean{ + return locationManager.isProviderEnabled(getProvider()) + } + + fun getLastKnowLocation(context: Context): Location? { + if (isEnabledProvider()) + return locationManager.getLastKnownLocation(getProvider()) + showAlertProvider(context) + return null + } + + fun updateLocation() { + if (locationManager != null) + locationManager.requestLocationUpdates(getProvider(), TIME_INTERVAL.toLong(), 0f, this) + + } + + fun stopProvider() { + if (locationManager != null) + locationManager.removeUpdates(this) + } + + fun turnOnLocation(context: Context) { + context.startActivity(Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)) + } + + fun showAlertProvider(context: Context) { + DialogLocation(context, { turnOnLocation(context) }).show() + } + + override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {} + + override fun onProviderEnabled(provider: String?) {} + + override fun onProviderDisabled(provider: String?) {} + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/navigation/NavigateToSign.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/navigation/NavigateToSign.kt new file mode 100644 index 0000000..1983ebf --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/navigation/NavigateToSign.kt @@ -0,0 +1,10 @@ +package es.verdnatura.presentation.navigation + +/** + * Created by nelo on 10/7/17. + */ +interface NavigateToSign { + + fun navigateToSign(tickets: List, packages: Int) + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/navigation/Navigator.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/navigation/Navigator.kt new file mode 100644 index 0000000..eb0228b --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/navigation/Navigator.kt @@ -0,0 +1,40 @@ +package es.verdnatura.vndelivery.presentation.navigation + +import android.content.Intent +import es.verdnatura.core.activity.BaseActivity +import es.verdnatura.vndelivery.presentation.view.activity.* +import javax.inject.Inject +import javax.inject.Singleton + +/** + * Created by nelo on 21/2/17. + */ +@Singleton +class Navigator @Inject constructor(){ + + fun navigateToLogin(activity: BaseActivity){ + activity.startActivity(Intent(activity, LoginActivity::class.java)) + } + + fun navigateToListRoutes(activity: BaseActivity){ + activity.startActivity(Intent(activity, RouteActivity::class.java)) + } + + fun navigateToTickets(activity: BaseActivity, route: Int){ + val intent = Intent(activity, TicketActivity::class.java) + intent.putExtra(TicketActivity.ROUTE, route) + activity.startActivity(intent) + } + + fun navigateToSign(activity: BaseActivity, tickets: List, packages: Int){ + val intent = Intent(activity, SignActivity::class.java) + intent.putExtra(SignActivity.TICKETS, tickets.toIntArray()) + intent.putExtra(SignActivity.PACKAGES, packages) + activity.startActivity(intent) + } + + fun navigateToSignData(activity: BaseActivity){ + activity.startActivity(Intent(activity, SignDataActivity::class.java)) + } + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/navigation/RouterNavigator.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/navigation/RouterNavigator.kt new file mode 100644 index 0000000..1d4b150 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/navigation/RouterNavigator.kt @@ -0,0 +1,14 @@ +package es.verdnatura.presentation.navigation + +import java.io.File + +/** + * Created by nelo on 21/7/17. + */ +interface RouterNavigator { + fun showDataVerdnatura() + fun logout() + fun navigateToTickets(route: Int) + fun installApk(file: File) + fun navigateToSignData() +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/navigation/UserNavigator.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/navigation/UserNavigator.kt new file mode 100644 index 0000000..0f0bd21 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/navigation/UserNavigator.kt @@ -0,0 +1,10 @@ +package es.verdnatura.vndelivery.presentation.navigation + +/** + * Created by nelo on 27/4/17. + */ +interface UserNavigator { + + fun navigate() + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/observer/GetVersionObserver.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/observer/GetVersionObserver.kt new file mode 100644 index 0000000..e0e1c71 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/observer/GetVersionObserver.kt @@ -0,0 +1,17 @@ +package es.verdnatura.vndelivery.presentation.observer + +import es.verdnatura.presentation.presenter.RoutePresenter +import io.reactivex.observers.DisposableObserver + +/** + * Created by nelo on 23/6/17. + */ +class GetVersionObserver(val presenter: RoutePresenter): DisposableObserver() { + override fun onError(e: Throwable?) {} + + override fun onNext(t: Boolean?) { + presenter.onGetVersion(t!!) + } + + override fun onComplete() {} +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/observer/UpdateObserver.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/observer/UpdateObserver.kt new file mode 100644 index 0000000..85d49e4 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/observer/UpdateObserver.kt @@ -0,0 +1,22 @@ +package es.verdnatura.vndelivery.presentation.observer + +import es.verdnatura.presentation.presenter.RoutePresenter +import io.reactivex.observers.DisposableObserver +import java.io.File + +/** + * Created by nelo on 23/6/17. + */ +class UpdateObserver(val presenter: RoutePresenter): DisposableObserver() { + override fun onComplete() { + presenter.hideProgress() + } + + override fun onNext(t: File?) { + presenter.installApk(t!!) + } + + override fun onError(e: Throwable?) { + presenter.errorUpdate(e?.message.toString()) + } +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/observer/UploadObserver.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/observer/UploadObserver.kt new file mode 100644 index 0000000..0f8796c --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/observer/UploadObserver.kt @@ -0,0 +1,21 @@ +package es.verdnatura.presentation.observer + +import android.util.Log +import io.reactivex.observers.DisposableObserver + +/** + * Created by nelo on 26/7/17. + */ +class UploadObserver(val complete:(() -> Unit)? = null, val error: ((String, String) -> Unit)? = null, val sign: String? = null) : DisposableObserver() { + + override fun onComplete() { + complete?.invoke() + } + + override fun onError(e: Throwable?) { + error?.invoke(e?.message.toString(), sign!!) + Log.e("ERROR", e?.message.toString()) + } + + override fun onNext(t: String?) {} +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/presenter/BasePresenter.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/presenter/BasePresenter.kt new file mode 100644 index 0000000..bdcea27 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/presenter/BasePresenter.kt @@ -0,0 +1,14 @@ +package es.verdnatura.vndelivery.presentation.presenter + +import android.os.Bundle +import android.support.annotation.NonNull +import es.verdnatura.vndelivery.presentation.view.view.BaseView + +/** + * Created by nelo on 20/2/17. + */ +interface BasePresenter { + + fun onDestroy() + fun setView(@NonNull v: BaseView) +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/presenter/LoginPresenter.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/presenter/LoginPresenter.kt new file mode 100644 index 0000000..87dad55 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/presenter/LoginPresenter.kt @@ -0,0 +1,58 @@ +package es.verdnatura.vndelivery.presentation.presenter + +import es.verdnatura.vndelivery.data.preferences.Preferences +import es.verdnatura.vndelivery.domain.interactor.DefaultObserver +import es.verdnatura.vndelivery.domain.interactor.LoginUseCase +import es.verdnatura.vndelivery.presentation.view.view.BaseView +import es.verdnatura.vndelivery.presentation.view.view.LoginView +import javax.inject.Inject + +/** + * Created by nelo on 10/5/17. + */ +class LoginPresenter: BasePresenter { + + private lateinit var loginView: LoginView + private val loginUseCase: LoginUseCase + + @Inject + constructor(loginUseCase: LoginUseCase){ + this.loginUseCase = loginUseCase + } + + override fun onDestroy() {} + + override fun setView(v: BaseView) { + loginView = v as LoginView + } + + fun login(user: String, pass: String){ + loginView.showProgress() + loginUseCase.execute(LoginObserver(this), LoginUseCase.Params.forLogin(user, pass)) + } + + fun onFinishLogin(){ + loginView.saveUserAndPass() + loginView.hideProgress() + loginView.navigateToMain() + } + + fun onErrorLogin(error: String){ + loginView.hideProgress() + loginView.showError(error) + } + + class LoginObserver(val loginPresenter: LoginPresenter) : DefaultObserver(){ + + override fun onComplete() { + super.onComplete() + loginPresenter.onFinishLogin() + } + + override fun onError(exception: Throwable) { + super.onError(exception) + loginPresenter.onErrorLogin(exception.message.toString()) + } + } + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/presenter/RoutePresenter.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/presenter/RoutePresenter.kt new file mode 100644 index 0000000..06ca685 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/presenter/RoutePresenter.kt @@ -0,0 +1,139 @@ +package es.verdnatura.presentation.presenter + +import android.os.Environment +import es.verdnatura.domain.entity.Route +import es.verdnatura.domain.interactor.route.GetRoutesUseCase +import es.verdnatura.domain.interactor.route.SelectRoutesUseCase +import es.verdnatura.presentation.view.view.UpdateView +import es.verdnatura.vndelivery.domain.interactor.UpdateUseCase +import es.verdnatura.vndelivery.presentation.observer.GetVersionObserver +import es.verdnatura.vndelivery.presentation.observer.UpdateObserver +import es.verdnatura.vndelivery.presentation.presenter.BasePresenter +import es.verdnatura.vndelivery.presentation.view.view.BaseView +import es.verdnatura.vndelivery.vndelivery.interactor.GetVersionUseCase +import io.reactivex.observers.DisposableObserver +import java.io.File +import javax.inject.Inject + +/** + * Created by nelo on 5/7/17. + */ +class RoutePresenter: BasePresenter { + + private val FILE_PATH = Environment.getExternalStorageDirectory().absolutePath + + private lateinit var view: UpdateView + private val getRoutesUseCase: GetRoutesUseCase + private val selectRoutesUseCase: SelectRoutesUseCase + private val updateUseCase: UpdateUseCase + private val getVersionUseCase: GetVersionUseCase + + @Inject + constructor(getRoutesUseCase: GetRoutesUseCase, selectRoutesUseCase: SelectRoutesUseCase, + updateUseCase: UpdateUseCase, getVersionUseCase: GetVersionUseCase){ + this.getRoutesUseCase = getRoutesUseCase + this.selectRoutesUseCase = selectRoutesUseCase + this.updateUseCase = updateUseCase + this.getVersionUseCase = getVersionUseCase + } + + override fun onDestroy() {} + + override fun setView(v: BaseView) { + view = v as UpdateView + } + + fun listRoutes(){ + view.showProgress() + downloadRoutes() + } + + fun downloadRoutes(){ + getRoutesUseCase.execute(RouteObserver(this), true) + } + + fun onDownloadRoutes(routes: List){ + view.createAdapter(routes) + } + + fun onErrorDownloadRoutes(error: String){ + view.hideProgress() + view.showErrorList(error) + } + + fun hideProgress(){ + view.hideProgress() + } + + fun selectRoutes(){ + selectRoutesUseCase.execute(SelectRoutesObserver(this), true) + } + + fun getVersion(v: Int){ + getVersionUseCase.execute(GetVersionObserver(this), GetVersionUseCase.Params.forGetVersion(v)) + } + + fun onGetVersion(isNewVersion: Boolean){ + if (isNewVersion) view.onNewVersion() + } + + fun update(){ + view.showProgress() + updateUseCase.execute(UpdateObserver(this), UpdateUseCase.Params.forUpdate(createFile()!!)) + } + + fun errorUpdate(error: String){ + view.errorUpdate(error) + hideProgress() + } + + fun createFile(): File? { + var file: File? = null + try { + val dir = File(FILE_PATH, "/Verdnatura/download") + dir.mkdirs() + file = File(dir, "vnsplits") + if (file.exists()) file.delete() + + } catch (e: Exception) { + e.printStackTrace() + } + + return file + } + + fun installApk(file: File) { + view.installApk(file) + } + + class RouteObserver(val presenter: RoutePresenter): DisposableObserver>(){ + override fun onComplete() { + presenter.hideProgress() + } + + override fun onNext(t: List?) { + presenter.onDownloadRoutes(t!!) + } + + override fun onError(e: Throwable?) { + presenter.selectRoutes() + } + + } + + class SelectRoutesObserver(val presenter: RoutePresenter): DisposableObserver>(){ + override fun onComplete() { + presenter.hideProgress() + } + + override fun onNext(t: List?) { + presenter.onDownloadRoutes(t!!) + } + + override fun onError(e: Throwable?) { + presenter.onErrorDownloadRoutes(e?.message.toString()) + } + + } + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/presenter/SignDataPresenter.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/presenter/SignDataPresenter.kt new file mode 100644 index 0000000..fc08cc9 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/presenter/SignDataPresenter.kt @@ -0,0 +1,108 @@ +package es.verdnatura.presentation.presenter + +import android.util.Log +import es.verdnatura.domain.entity.SignData +import es.verdnatura.domain.interactor.ticket.DeleteTicketsBySignUseCase +import es.verdnatura.domain.interactor.ticket.SignDataUseCase +import es.verdnatura.domain.interactor.ticket.UploadSignsUseCase +import es.verdnatura.presentation.observer.UploadObserver +import es.verdnatura.presentation.view.view.SignDataView +import es.verdnatura.vndelivery.presentation.presenter.BasePresenter +import es.verdnatura.vndelivery.presentation.view.view.BaseView +import io.reactivex.observers.DisposableObserver +import javax.inject.Inject + +/** + * Created by nelo on 26/7/17. + */ +class SignDataPresenter: BasePresenter { + + private val signDataUseCase: SignDataUseCase + private val uploadSignsUseCase: UploadSignsUseCase + private val deleteBySignUseCase: DeleteTicketsBySignUseCase + private lateinit var view: SignDataView + + @Inject + constructor(signDataUseCase: SignDataUseCase, uploadSignsUseCase: UploadSignsUseCase, deleteTicketsBySignUseCase: DeleteTicketsBySignUseCase){ + this.signDataUseCase = signDataUseCase + this.uploadSignsUseCase = uploadSignsUseCase + this.deleteBySignUseCase = deleteTicketsBySignUseCase + } + + fun getSignData(){ + view.showProgress() + loadSignData() + } + + fun loadSignData(){ + signDataUseCase.execute(GetSignDataObserver(this), true) + } + + fun createAdapter(items: List){ + view.createAdapter(items) + } + + fun hideProgress(){ + view.hideProgress() + } + + fun onErrorLoadSignData(error: String){ + hideProgress() + view.showErrorList(error) + } + + fun uploadSign(sign: String){ + view.showProgress() + uploadSignsUseCase.execute(UploadObserver({ hideProgress() }, { e, s -> onErrorUpload(e, s) }, sign), UploadSignsUseCase.Params.forUploadSign(sign)) + } + + fun onErrorUpload(error: String, sign: String){ + view.hideProgress() + view.onErrorUpload(error, sign) + } + + fun deleteBySign(sign: String, signs: List){ + view.showProgress() + deleteBySignUseCase.execute(DeleteBySignObserver(this), DeleteTicketsBySignUseCase.Params.forDelete(sign, signs)) + } + + fun updateList(signs: List){ + view.notifyDataHasChanged(signs) + } + + override fun onDestroy() {} + + override fun setView(v: BaseView) { + this.view = v as SignDataView + } + + class GetSignDataObserver(val presenter: SignDataPresenter): DisposableObserver>(){ + override fun onNext(t: List?) { + presenter.createAdapter(t!!) + } + + override fun onError(e: Throwable?) { + presenter.onErrorLoadSignData(e?.message.toString()) + } + + override fun onComplete() { + presenter.hideProgress() + } + + } + + class DeleteBySignObserver(val presenter: SignDataPresenter): DisposableObserver>(){ + override fun onError(e: Throwable?) { + Log.e("Error", e?.message.toString()) + presenter.hideProgress() + } + + override fun onNext(t: List?) { + presenter.updateList(t!!) + } + + override fun onComplete() { + presenter.hideProgress() + } + } +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/presenter/SignPresenter.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/presenter/SignPresenter.kt new file mode 100644 index 0000000..f499fe5 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/presenter/SignPresenter.kt @@ -0,0 +1,63 @@ +package es.verdnatura.presentation.presenter + +import android.util.Log +import es.verdnatura.domain.interactor.ticket.SignTicketsUseCase +import es.verdnatura.domain.interactor.ticket.UploadSignsUseCase +import es.verdnatura.presentation.observer.UploadObserver +import es.verdnatura.presentation.view.view.SignView +import es.verdnatura.vndelivery.presentation.presenter.BasePresenter +import es.verdnatura.vndelivery.presentation.view.view.BaseView +import io.reactivex.observers.DisposableObserver +import javax.inject.Inject + +/** + * Created by nelo on 11/7/17. + */ +class SignPresenter: BasePresenter { + + private lateinit var view: SignView + private val signUseCase: SignTicketsUseCase + private val uploadSignUseCase: UploadSignsUseCase + + @Inject + constructor(signTicketsUseCase: SignTicketsUseCase, uploadSignsUseCase: UploadSignsUseCase){ + this.signUseCase = signTicketsUseCase + this.uploadSignUseCase = uploadSignsUseCase + } + + override fun onDestroy() {} + + override fun setView(v: BaseView) { + this.view = v as SignView + } + + fun signTicket(sign: String, tickets: List, long: Double?, lat: Double?){ + signUseCase.execute(SignObserver(this), SignTicketsUseCase.Params.forSignTickets(sign, tickets, long, lat)) + } + + fun closeFragment(){ + view.close() + } + + fun uploadSign(fileName: String){ + uploadSignUseCase.execute(UploadObserver(), UploadSignsUseCase.Params.forUploadSign(fileName)) + } + + class SignObserver(val presenter: SignPresenter): DisposableObserver(){ + + override fun onNext(t: String?) { + presenter.uploadSign(t!!) + } + + override fun onError(e: Throwable?) { + Log.e("ERROR", e?.message.toString()) + } + + override fun onComplete() { + presenter.closeFragment() + } + + } + + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/presenter/TicketPresenter.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/presenter/TicketPresenter.kt new file mode 100644 index 0000000..1a2c098 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/presenter/TicketPresenter.kt @@ -0,0 +1,121 @@ +package es.verdnatura.presentation.presenter + +import android.util.Log +import es.verdnatura.domain.entity.Ticket +import es.verdnatura.domain.interactor.ticket.FilterTicketsUseCase +import es.verdnatura.domain.interactor.ticket.GetTicketsUseCase +import es.verdnatura.domain.interactor.ticket.SelectTicketUseCase +import es.verdnatura.vndelivery.presentation.presenter.BasePresenter +import es.verdnatura.vndelivery.presentation.view.view.BaseView +import es.verdnatura.vndelivery.presentation.view.view.ListView +import io.reactivex.observers.DisposableObserver +import javax.inject.Inject + +/** + * Created by nelo on 7/7/17. + */ +class TicketPresenter: BasePresenter { + + private lateinit var view: ListView + private lateinit var tickets: List> + private val getTicketsUseCase: GetTicketsUseCase + private val selectTicketUseCase: SelectTicketUseCase + private val filterTicketUSeCase: FilterTicketsUseCase + + + @Inject + constructor(getTicketsUseCase: GetTicketsUseCase, selectTicketUseCase: SelectTicketUseCase, filterTicketsUseCase: FilterTicketsUseCase){ + this.getTicketsUseCase = getTicketsUseCase + this.selectTicketUseCase = selectTicketUseCase + this.filterTicketUSeCase = filterTicketsUseCase + } + + override fun onDestroy() {} + + override fun setView(v: BaseView) { + this.view = v as ListView + } + + fun listTickets(route: Int){ + view.showProgress() + downloadTickets(route) + } + + fun downloadTickets(route: Int){ + getTicketsUseCase.execute(TicketObserver(this, route), GetTicketsUseCase.Params.forGetTickets(route)) + } + + fun onCopleteDownloadTickets(){ + view.hideProgress() + } + + fun onDownloadTickets(tickets: List>){ + this.tickets = tickets + filterTickets(false) + } + + fun onFilterTickets(tickets: List>){ + createAdapter(tickets) + } + + fun createAdapter(tickets: List>){ + view.createAdapter(tickets) + } + + fun onErrorDownloadTickets(error: String){ + view.showErrorList(error) + view.hideProgress() + } + + fun getTicketsDb(route: Int){ + selectTicketUseCase.execute(TicketDbObserver(this), SelectTicketUseCase.Params.forSelectTickets(route)) + } + + fun filterTickets(signed: Boolean){ + filterTicketUSeCase.execute(TicketFilterObserver(this), FilterTicketsUseCase.Params.forFilter(tickets, signed)) + } + + class TicketObserver(val presenter: TicketPresenter, val route: Int): DisposableObserver>>(){ + + override fun onNext(t: List>?) { + presenter.onDownloadTickets(t!!) + } + + override fun onError(e: Throwable?) { + presenter.getTicketsDb(route) + } + + override fun onComplete() { + presenter.onCopleteDownloadTickets() + } + + } + + class TicketDbObserver(val presenter: TicketPresenter): DisposableObserver>>(){ + + override fun onNext(t: List>?) { + presenter.onDownloadTickets(t!!) + } + + override fun onError(e: Throwable?) { + presenter.onErrorDownloadTickets(e?.message.toString()) + } + + override fun onComplete() { + presenter.onCopleteDownloadTickets() + } + + } + + class TicketFilterObserver(val presenter: TicketPresenter): DisposableObserver>> () { + override fun onNext(t: List>?) { + presenter.onFilterTickets(t!!) + } + + override fun onComplete() {} + + override fun onError(e: Throwable?) { + Log.e("ERROR", e?.message.toString()) + } + } +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/syncadapter/AuthenticationService.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/syncadapter/AuthenticationService.kt new file mode 100644 index 0000000..a6e97b7 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/syncadapter/AuthenticationService.kt @@ -0,0 +1,26 @@ +package es.verdnatura.vndelivery.presentation.syncadapter + +import android.app.Service +import android.content.Intent +import android.os.IBinder +import es.verdnatura.presentation.di.modules.ServiceModule +import es.verdnatura.vndelivery.presentation.AndroidApplication +import javax.inject.Inject + +/** + * Created by nelo on 12/7/17. + */ +class AuthenticationService: Service() { + + @Inject lateinit var autenticator: VerdnaturaAuthenticator + + override fun onCreate() { + super.onCreate() + (application as AndroidApplication).component.plus(ServiceModule()).inject(this) + } + + override fun onBind(intent: Intent?): IBinder { + return autenticator.iBinder + } + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/syncadapter/DummyProvider.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/syncadapter/DummyProvider.kt new file mode 100644 index 0000000..dc7062c --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/syncadapter/DummyProvider.kt @@ -0,0 +1,35 @@ +package es.verdnatura.vndelivery.presentation.syncadapter + +import android.content.ContentProvider +import android.content.ContentValues +import android.database.Cursor +import android.net.Uri + +/** + * Created by nelo on 19/7/17. + */ +class DummyProvider : ContentProvider(){ + override fun insert(uri: Uri?, values: ContentValues?): Uri? { + return null + } + + override fun query(uri: Uri?, projection: Array?, selection: String?, selectionArgs: Array?, sortOrder: String?): Cursor? { + return null + } + + override fun onCreate(): Boolean { + return false + } + + override fun update(uri: Uri?, values: ContentValues?, selection: String?, selectionArgs: Array?): Int { + return 0 + } + + override fun delete(uri: Uri?, selection: String?, selectionArgs: Array?): Int { + return 0 + } + + override fun getType(uri: Uri?): String? { + return null + } +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/syncadapter/SyncAdapter.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/syncadapter/SyncAdapter.kt new file mode 100644 index 0000000..5309ab6 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/syncadapter/SyncAdapter.kt @@ -0,0 +1,80 @@ +package es.verdnatura.vndelivery.presentation.syncadapter + +import android.accounts.Account +import android.accounts.AccountManager +import android.app.Application +import android.content.* +import android.os.Bundle +import android.util.Log +import es.verdnatura.domain.interactor.ticket.UploadSignsUseCase +import es.verdnatura.vndelivery.presentation.R +import io.reactivex.observers.DisposableObserver +import javax.inject.Singleton + +/** + * Created by nelo on 12/7/17. + */ +@Singleton +class SyncAdapter: AbstractThreadedSyncAdapter { + + private val TAG = SyncAdapter::class.java.simpleName + + val SECONDS_PER_MINUTE = 60L + val SYNC_INTERVAL_IN_MINUTES = 10L + val SYNC_INTERVAL = SYNC_INTERVAL_IN_MINUTES * SECONDS_PER_MINUTE + + private val app: Application + private val resolver: ContentResolver + private val uploadsigns: UploadSignsUseCase + + constructor(app: Application, uploadSignsUseCase: UploadSignsUseCase): super(app, true) { + this.app = app + this.resolver = app.contentResolver + this.uploadsigns = uploadSignsUseCase + initSyncAdapter() + } + + private fun initSyncAdapter() { + getAccounts() + periodicSync() + } + + override fun onPerformSync(account: Account, extras: Bundle, authority: String, provider: ContentProviderClient, syncResult: SyncResult) { + performSync() + } + + private fun performSync() { + Log.i(TAG, "Updating server...") + uploadsigns.execute(UploadObserver(), UploadSignsUseCase.Params.forUploadSign()) + } + + private fun getAccounts(): Account? { + val accountManager = app.getSystemService(Context.ACCOUNT_SERVICE) as AccountManager + val newAccount = Account(app.getString(R.string.app_name), app.getString(R.string.account_type)) + + if (null == accountManager.getPassword(newAccount)) { + if (!accountManager.addAccountExplicitly(newAccount, "", null)) + return null + } + + Log.i(TAG, "User account obtained.") + return newAccount + } + + private fun periodicSync() { + ContentResolver.addPeriodicSync(getAccounts(), app.getString(R.string.provider_authority), Bundle.EMPTY, SYNC_INTERVAL) + ContentResolver.setSyncAutomatically(getAccounts(), app.getString(R.string.provider_authority), true) + } + + class UploadObserver: DisposableObserver(){ + + override fun onNext(t: String?) {} + + override fun onComplete() {} + + override fun onError(e: Throwable?) { + Log.e("ERROR UPLOADING", e?.message.toString()) + } + + } +} diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/syncadapter/SyncAdapter.kt.orig b/presentation/src/main/kotlin/es/verdnatura/presentation/syncadapter/SyncAdapter.kt.orig new file mode 100644 index 0000000..a9ed09c --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/syncadapter/SyncAdapter.kt.orig @@ -0,0 +1,69 @@ +package es.verdnatura.vndelivery.presentation.syncadapter + +import android.accounts.Account +import android.accounts.AccountManager +import android.app.Application +import android.content.* +import android.os.Bundle +import android.util.Log +import es.verdnatura.domain.interactor.ticket.UploadSignsUseCase +import es.verdnatura.domain.repository.TicketRepository +import es.verdnatura.vndelivery.presentation.R +import io.reactivex.observers.DisposableObserver +import javax.inject.Singleton + +/** + * Created by nelo on 12/7/17. + */ +@Singleton +class SyncAdapter: AbstractThreadedSyncAdapter { + + private val TAG = SyncAdapter::class.java.simpleName + + val SECONDS_PER_MINUTE = 60L + val SYNC_INTERVAL_IN_MINUTES = 1L + val SYNC_INTERVAL = SYNC_INTERVAL_IN_MINUTES * SECONDS_PER_MINUTE + + private val app: Application + private val resolver: ContentResolver + private val repository: TicketRepository + + constructor(app: Application, ): super(app, true) { + this.app = app + this.resolver = app.contentResolver + initSyncAdapter() + } + + private fun initSyncAdapter() { + getAccounts() + periodicSync() + } + + override fun onPerformSync(account: Account, extras: Bundle, authority: String, provider: ContentProviderClient, syncResult: SyncResult) { + performSync() + } + + private fun performSync() { + Log.i(TAG, "Updating server...") + repository.uploadSign() + } + + private fun getAccounts(): Account? { + val accountManager = app.getSystemService(Context.ACCOUNT_SERVICE) as AccountManager + val newAccount = Account(app.getString(R.string.app_name), app.getString(R.string.account_type)) + + if (null == accountManager.getPassword(newAccount)) { + if (!accountManager.addAccountExplicitly(newAccount, "", null)) + return null + } + + Log.i(TAG, "User account obtained.") + return newAccount + } + + private fun periodicSync() { + ContentResolver.addPeriodicSync(getAccounts(), app.getString(R.string.provider_authority), Bundle.EMPTY, SYNC_INTERVAL) + ContentResolver.setSyncAutomatically(getAccounts(), app.getString(R.string.provider_authority), true) + } + +} diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/syncadapter/SyncService.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/syncadapter/SyncService.kt new file mode 100644 index 0000000..54b6c6e --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/syncadapter/SyncService.kt @@ -0,0 +1,29 @@ +package es.verdnatura.vndelivery.presentation.syncadapter + +import android.app.Service +import android.content.Intent +import android.os.IBinder +import es.verdnatura.presentation.di.modules.ServiceModule +import es.verdnatura.vndelivery.presentation.AndroidApplication +import javax.inject.Inject + +/** + * Created by nelo on 14/7/17. + */ +class SyncService: Service() { + + @Inject lateinit var syncAdapter: SyncAdapter + + override fun onCreate() { + super.onCreate() + (application as AndroidApplication).component.plus(ServiceModule()).inject(this) + } + + override fun onBind(intent: Intent?): IBinder { + return syncAdapter.syncAdapterBinder + } + + override fun onDestroy() { + super.onDestroy() + } +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/syncadapter/VerdnaturaAuthenticator.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/syncadapter/VerdnaturaAuthenticator.kt new file mode 100644 index 0000000..b5d39d6 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/syncadapter/VerdnaturaAuthenticator.kt @@ -0,0 +1,47 @@ +package es.verdnatura.vndelivery.presentation.syncadapter + +import android.accounts.AbstractAccountAuthenticator +import android.accounts.Account +import android.accounts.AccountAuthenticatorResponse +import android.app.Application +import android.os.Bundle +import javax.inject.Inject +import javax.inject.Singleton + +/** + * Created by nelo on 12/7/17. + */ +@Singleton +class VerdnaturaAuthenticator: AbstractAccountAuthenticator { + + @Inject + constructor(app: Application): super(app) + + override fun getAuthTokenLabel(authTokenType: String?): String { + throw UnsupportedOperationException() + } + + override fun confirmCredentials(response: AccountAuthenticatorResponse?, account: Account?, options: Bundle?): Bundle? { + return null + } + + override fun updateCredentials(response: AccountAuthenticatorResponse?, account: Account?, authTokenType: String?, options: Bundle?): Bundle { + throw UnsupportedOperationException() + } + + override fun getAuthToken(response: AccountAuthenticatorResponse?, account: Account?, authTokenType: String?, options: Bundle?): Bundle { + throw UnsupportedOperationException() + } + + override fun hasFeatures(response: AccountAuthenticatorResponse?, account: Account?, features: Array?): Bundle { + throw UnsupportedOperationException() + } + + override fun editProperties(response: AccountAuthenticatorResponse?, accountType: String?): Bundle { + throw UnsupportedOperationException() + } + + override fun addAccount(response: AccountAuthenticatorResponse?, accountType: String?, authTokenType: String?, requiredFeatures: Array?, options: Bundle?): Bundle? { + return null + } +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/BaseActivity.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/BaseActivity.kt new file mode 100644 index 0000000..c6851d9 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/BaseActivity.kt @@ -0,0 +1,43 @@ +package es.verdnatura.vndelivery.presentation.view.activity + +import android.app.Fragment +import android.content.Intent +import android.os.Bundle +import es.verdnatura.core.activity.BaseActivity +import es.verdnatura.vndelivery.presentation.AndroidApplication +import es.verdnatura.vndelivery.presentation.R +import es.verdnatura.vndelivery.presentation.navigation.Navigator + + +/** + * Created by nelo on 20/2/17. + */ +open class BaseActivity : BaseActivity() { + + val app: AndroidApplication get() = application as AndroidApplication + val navigator: Navigator get() = app.navigator + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_layout) + } + + protected fun addFragment(containerViewId: Int, fragment: Fragment) { + val fragmentTransaction = this.fragmentManager.beginTransaction() + fragmentTransaction.add(containerViewId, fragment) + fragmentTransaction.commit() + } + + fun changeFragment(containerViewId: Int, fragment: Fragment) { + val transaccion = fragmentManager.beginTransaction() + transaccion.replace(containerViewId, fragment) + transaccion.addToBackStack(null) + transaccion.commit() + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + } + +} + diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/LoginActivity.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/LoginActivity.kt new file mode 100644 index 0000000..9c10f77 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/LoginActivity.kt @@ -0,0 +1,39 @@ +package es.verdnatura.vndelivery.presentation.view.activity + +import android.os.Build +import android.os.Bundle +import es.verdnatura.vndelivery.presentation.R +import es.verdnatura.vndelivery.presentation.di.HasComponent +import es.verdnatura.vndelivery.presentation.di.components.LoginComponent +import es.verdnatura.vndelivery.presentation.di.modules.LoginModule +import es.verdnatura.vndelivery.presentation.navigation.UserNavigator +import es.verdnatura.vndelivery.presentation.view.fragment.LoginFragment + +/** + * Created by nelo on 4/5/17. + */ +class LoginActivity : BaseActivity(), HasComponent,UserNavigator { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + addFragment(R.id.fragmentContainer, LoginFragment(R.layout.fragment_login)) + } + + override fun navigate() { + navigator.navigateToListRoutes(this) + } + + override fun getSubComponent(): LoginComponent { + return app.component.plus(LoginModule(this)) + } + + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + val fragment = fragmentManager.findFragmentById(R.id.fragmentContainer) + if (fragment != null) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + fragment.onRequestPermissionsResult(requestCode, permissions, grantResults) + } + } + } +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/RouteActivity.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/RouteActivity.kt new file mode 100644 index 0000000..b5a21f3 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/RouteActivity.kt @@ -0,0 +1,53 @@ +package es.verdnatura.vndelivery.presentation.view.activity + +import android.content.Intent +import android.net.Uri +import android.os.Bundle +import es.verdnatura.presentation.di.components.RouteComponent +import es.verdnatura.presentation.di.modules.RouteModule +import es.verdnatura.presentation.navigation.RouterNavigator +import es.verdnatura.presentation.view.fragment.DataFragment +import es.verdnatura.presentation.view.fragment.RouteFragment +import es.verdnatura.vndelivery.presentation.R +import es.verdnatura.vndelivery.presentation.di.HasComponent +import java.io.File + +/** + * Created by nelo on 5/7/17. + */ +class RouteActivity: BaseActivity(), HasComponent, RouterNavigator { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + addFragment(R.id.fragmentContainer, RouteFragment()) + } + + override fun getSubComponent(): RouteComponent { + return app.component.plus(RouteModule()) + } + + override fun showDataVerdnatura() { + changeFragment(R.id.fragmentContainer, DataFragment()) + } + + override fun navigateToTickets(route: Int) { + navigator.navigateToTickets(this, route) + } + + override fun logout(){ + app.preferences.removeUserAndPass() + navigator.navigateToLogin(this) + finish() + } + + override fun navigateToSignData() { + navigator.navigateToSignData(this) + } + + override fun installApk(file: File) { + val intent = Intent(Intent.ACTION_VIEW) + intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive") + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK + startActivity(intent) + } +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/SignActivity.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/SignActivity.kt new file mode 100644 index 0000000..3662d15 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/SignActivity.kt @@ -0,0 +1,31 @@ +package es.verdnatura.vndelivery.presentation.view.activity + +import android.os.Bundle +import es.verdnatura.presentation.di.components.SignComponent +import es.verdnatura.presentation.di.modules.SignModule +import es.verdnatura.vndelivery.presentation.R +import es.verdnatura.vndelivery.presentation.di.HasComponent +import es.verdnatura.vndelivery.presentation.view.fragment.SignFragment + + +/** + * Created by nelo on 10/7/17. + */ +class SignActivity: BaseActivity(), HasComponent { + + companion object{ + val TICKETS = "TICKETS" + val PACKAGES = "PACKAGES" + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val tickets = intent.extras.getIntArray(TICKETS).toList() + val packages = intent.extras.getInt(PACKAGES) + addFragment(R.id.fragmentContainer, SignFragment(tickets, packages)) + } + + override fun getSubComponent(): SignComponent { + return app.component.plus(SignModule()) + } +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/SignDataActivity.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/SignDataActivity.kt new file mode 100644 index 0000000..63d347c --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/SignDataActivity.kt @@ -0,0 +1,24 @@ +package es.verdnatura.vndelivery.presentation.view.activity + +import android.os.Bundle +import es.verdnatura.presentation.di.components.SignDataComponent +import es.verdnatura.presentation.di.modules.SignDataModule +import es.verdnatura.presentation.view.fragment.SignDataFragment +import es.verdnatura.vndelivery.presentation.R +import es.verdnatura.vndelivery.presentation.di.HasComponent + +/** + * Created by nelo on 26/7/17. + */ +class SignDataActivity: BaseActivity(), HasComponent { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + addFragment(R.id.fragmentContainer, SignDataFragment()) + } + + override fun getSubComponent(): SignDataComponent { + return app.component.plus(SignDataModule()) + } + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/SplashActivity.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/SplashActivity.kt new file mode 100644 index 0000000..0a4f9bb --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/SplashActivity.kt @@ -0,0 +1,19 @@ +package es.verdnatura.vndelivery.presentation.view.activity + +import android.content.Intent +import android.os.Bundle +import android.support.v7.app.AppCompatActivity + +/** + * Created by nelo on 20/6/17. + */ +class SplashActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + val intent = Intent(this, LoginActivity::class.java) + startActivity(intent) + finish() + } +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/TicketActivity.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/TicketActivity.kt new file mode 100644 index 0000000..9b2efc2 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/activity/TicketActivity.kt @@ -0,0 +1,35 @@ +package es.verdnatura.vndelivery.presentation.view.activity + +import android.os.Bundle +import es.verdnatura.presentation.di.components.TicketComponent +import es.verdnatura.presentation.di.modules.TicketModule +import es.verdnatura.presentation.navigation.NavigateToSign +import es.verdnatura.presentation.view.fragment.TicketFragment +import es.verdnatura.vndelivery.presentation.R +import es.verdnatura.vndelivery.presentation.di.HasComponent + + +/** + * Created by nelo on 7/7/17. + */ +class TicketActivity: BaseActivity(), HasComponent, NavigateToSign { + + companion object{ + val ROUTE = "ROUTE" + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val route = intent.extras.getInt(ROUTE) + addFragment(R.id.fragmentContainer, TicketFragment(route)) + } + + override fun getSubComponent(): TicketComponent { + return app.component.plus(TicketModule()) + } + + override fun navigateToSign(tickets: List, packages: Int) { + navigator.navigateToSign(this, tickets, packages) + } + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/adapter/RouteAdapter.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/adapter/RouteAdapter.kt new file mode 100644 index 0000000..1752d15 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/adapter/RouteAdapter.kt @@ -0,0 +1,47 @@ +package es.verdnatura.presentation.view.adapter + +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import es.verdnatura.domain.entity.Route +import es.verdnatura.vndelivery.presentation.R +import kotlinx.android.synthetic.main.item_route.view.* + +/** + * Created by nelo on 6/7/17. + */ +class RouteAdapter(var items: MutableList, val listener: (Route) -> Unit) : RecyclerView.Adapter() { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_route, parent, false) + return ViewHolder(view) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) = holder.bind(items[position], listener) + + override fun getItemCount() = items.size + + class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + fun bind(item: Route, listener: (Route) -> Unit) = with(itemView) { + textRouteValue.text = item.Id.toString() + textAgencyValue.text = item.Agency + textDateValue.text = item.Date + textHourValue.text = item.Hour + textPlateValue.text = item.Plate + textM3Value.text = item.M3.toString() + if(item.Driver != ""){ + textDriver.text = item.Driver + textDriver.visibility = View.VISIBLE + } + else{ + textDriver.visibility = View.GONE + } + + setOnClickListener { listener(item) } + + } + + } + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/adapter/SignDataAdapter.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/adapter/SignDataAdapter.kt new file mode 100644 index 0000000..7160b0b --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/adapter/SignDataAdapter.kt @@ -0,0 +1,45 @@ +package es.verdnatura.presentation.view.adapter + +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + +import es.verdnatura.domain.entity.SignData +import es.verdnatura.vndelivery.presentation.R +import kotlinx.android.synthetic.main.item_upload.view.* + + +/** + * Created by nelo on 25/7/17. + */ +class SignDataAdapter(var items: List, val upload: (String) -> Unit, val delete: (String) -> Unit): RecyclerView.Adapter() { + + override fun onBindViewHolder(holder: ViewHolder, position: Int) = holder.bind(items[position], upload, delete) + + override fun getItemCount(): Int { + return items.size + } + + override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder{ + val view = LayoutInflater.from(parent?.context).inflate(R.layout.item_upload, parent, false) + return SignDataAdapter.ViewHolder(view) + } + + class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){ + fun bind(item: SignData, upload: (String) -> Unit, delete: (String) -> Unit) = with(itemView) { + signRoute.text = item.Route.toString() + signClient.text = item.Client.toString() + signAddress.text = item.Address.toString() + signTickets.text = getTextTickets(item) + signUpload.setOnClickListener { upload(item.Sign) } + signDelete.setOnClickListener { delete(item.Sign) } + } + + fun getTextTickets(item: SignData): String{ + val text = item.Tickets.map { t -> t.toString() }.fold(""){s, its -> s + its + ","} + return text.substring(0, text.length - 1) + } + + } +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/adapter/TicketAdapter.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/adapter/TicketAdapter.kt new file mode 100644 index 0000000..7508ccb --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/adapter/TicketAdapter.kt @@ -0,0 +1,92 @@ +package es.verdnatura.presentation.view.adapter + +import android.content.Intent +import android.net.Uri +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import es.verdnatura.core.components.dialogs.options.DialogOptions +import es.verdnatura.core.components.dialogs.options.DialogOptionsItem +import es.verdnatura.domain.entity.Ticket +import es.verdnatura.presentation.view.component.ticket.TicketData +import es.verdnatura.presentation.view.dialog.DialogNotes +import es.verdnatura.vndelivery.presentation.R +import kotlinx.android.synthetic.main.item_ticket.view.* +import java.util.* + +/** + * Created by nelo on 7/7/17. + */ +class TicketAdapter(var items: MutableList>, val signAction: (List, Int) -> Unit) : RecyclerView.Adapter() { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_ticket, parent, false) + return ViewHolder(view) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) = holder.bind(items[position], signAction) + + override fun getItemCount() = items.size + + class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + fun bind(item: List, signAction: (List, Int) -> Unit) = with(itemView) { + val ticket = item[0] + textClientValue.text = "${ticket.Client} ${ticket.ClientName}" + textConsigneValue.text = ticket.Address.toString() + textAddressValue.text = ticket.AddressName + textPcValue.text = ticket.PostalCode + textCity.text = ticket.City + + if(ticket.Signed == 1) okSigned.visibility = View.VISIBLE else okSigned.visibility = View.GONE + if(ticket.Uploaded == 1) okUploaded.visibility = View.VISIBLE else okUploaded.visibility = View.GONE + + val ns = getNotes(item) + if(ns.length > 0) notes.visibility = View.VISIBLE else notes.visibility = View.INVISIBLE + notes.setOnClickListener { DialogNotes(context, ns).show() } + + val phones = mutableListOf() + ticket.Phones.forEach { p -> phones.add(p) } + if(ticket.SalePersonPhone.length > 0) phones.add("${ticket.SalePersonPhone} - Comercial") + call.setOnClickListener { createDialogCall(phones) } + + maps.setOnClickListener { goToMaps(ticket) } + + sign.setOnClickListener { signAction(item.map { t -> t.Id }, getPackagesNumber(item)) } + + ticketGrouped.removeAllViews() + item.forEach { t -> ticketGrouped.addView(getTicketData(t)) } + + } + + fun getNotes(tickets: List): String{ + var note = "" + tickets.map { t -> t.Note }.map { n -> if(n.length > 0 && !(n in note)) note += n + "\n" } + return note + } + + fun getTicketData(ticket: Ticket): TicketData{ + var ticketData = TicketData(itemView.context) + ticketData.setTicketData(ticket) + return ticketData + } + + fun createDialogCall(phones: List){ + val options = phones.map { p -> DialogOptionsItem(p, { itemView.context.startActivity(Intent(Intent.ACTION_CALL, Uri.parse("tel:" + p.replace(" - Comercial", "")))) }) } + DialogOptions(itemView.context, options).show() + } + + fun goToMaps(ticket: Ticket){ + var uri = "geo:0,0?q=${ticket.ClientName}" + if(ticket.Loc.Longitude != 0.0 && ticket.Loc.Latitude != 0.0) + uri = String.format(Locale.ENGLISH, "geo:0,0?q=%f,%f", ticket.Loc.Latitude, ticket.Loc.Longitude) + itemView.context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(uri))) + } + + fun getPackagesNumber(tickets: List): Int{ + var packages = 0 + tickets.forEach { t -> packages += t.Packages } + return packages + } + } +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/component/ticket/TicketData.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/component/ticket/TicketData.kt new file mode 100644 index 0000000..657a8c4 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/component/ticket/TicketData.kt @@ -0,0 +1,32 @@ +package es.verdnatura.presentation.view.component.ticket + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.LinearLayout +import es.verdnatura.domain.entity.Ticket +import es.verdnatura.vndelivery.presentation.R +import kotlinx.android.synthetic.main.ticket_data.view.* + +/** + * Created by nelo on 7/7/17. + */ +class TicketData: LinearLayout { + + constructor(context: Context?): super(context) { render(context) } + + constructor(context: Context?, attrs: AttributeSet?): super(context, attrs) { render(context) } + + constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int): super(context, attrs, defStyleAttr) { render(context) } + + private fun render(context: Context?){ + LayoutInflater.from(context).inflate(R.layout.ticket_data, this) + } + + fun setTicketData(ticket: Ticket){ + textTicketValue.text = ticket.Id.toString() + textWarehouseValue.text = ticket.Warehouse + textPackagesValue.text = ticket.Packages.toString() + } + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/dialog/DialogLocation.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/dialog/DialogLocation.kt new file mode 100644 index 0000000..7e00708 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/dialog/DialogLocation.kt @@ -0,0 +1,37 @@ +package es.verdnatura.presentation.view.dialog + +import android.app.Activity +import android.app.AlertDialog +import android.content.Context +import android.content.DialogInterface +import es.verdnatura.core.UtilsResources +import es.verdnatura.vndelivery.presentation.R + +/** + * Created by nelo on 11/7/17. + */ +class DialogLocation { + + val dialog: AlertDialog.Builder + val action: () -> Unit + + constructor(context: Context, action: () -> Unit){ + dialog = createDialog(context) + this.action = action + } + + private fun createDialog(context: Context): AlertDialog.Builder { + var dialog = AlertDialog.Builder(context) + dialog.setMessage(UtilsResources.getResourceString(context, R.string.location_message)) + dialog.setPositiveButton(UtilsResources.getResourceString(context, R.string.accept), DialogInterface.OnClickListener { _, _ -> action() }) + dialog.setNegativeButton(UtilsResources.getResourceString(context, R.string.cancel), DialogInterface.OnClickListener { _, _ -> (context as Activity).finish() }) + dialog.setCancelable(false) + return dialog + } + + fun show(){ + dialog.show() + } + + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/dialog/DialogNotes.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/dialog/DialogNotes.kt new file mode 100644 index 0000000..be203b7 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/dialog/DialogNotes.kt @@ -0,0 +1,26 @@ +package es.verdnatura.presentation.view.dialog + +import android.app.AlertDialog +import android.content.Context + +/** + * Created by nelo on 10/7/17. + */ +class DialogNotes { + + val dialog: AlertDialog.Builder + + constructor(context: Context, notes: String){ + dialog = createDialog(context, notes) + } + + private fun createDialog(context: Context, notes: String): AlertDialog.Builder { + var dialog = AlertDialog.Builder(context) + dialog.setMessage(notes) + return dialog + } + + fun show(){ + dialog.show() + } +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/BaseFragment.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/BaseFragment.kt new file mode 100644 index 0000000..f734db4 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/BaseFragment.kt @@ -0,0 +1,46 @@ +package es.verdnatura.vndelivery.presentation.view.fragment + +import android.app.Activity +import android.app.Fragment +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Toast +import es.verdnatura.vndelivery.presentation.di.HasComponent +import es.verdnatura.vndelivery.presentation.view.activity.BaseActivity +import es.verdnatura.vndelivery.presentation.navigation.UserNavigator + +/** + * Created by nelo on 21/2/17. + */ +open class BaseFragment(val layout: Int) : Fragment(){ + + val app get() = (activity as BaseActivity).app + lateinit var userNavigatior: UserNavigator + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setHasOptionsMenu(true) + } + + override fun onAttach(activity: Activity?) { + super.onAttach(activity) + if(activity is UserNavigator) + userNavigatior = activity + } + + override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { + val fragmentView = inflater?.inflate(layout, container, false) + return fragmentView + } + + fun showToastMessage(message: String){ + Toast.makeText(activity, message, Toast.LENGTH_SHORT).show() + } + + protected fun getComponent(componentType: Class): C { + return componentType.cast((activity as HasComponent).getSubComponent()) + } + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/DataFragment.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/DataFragment.kt new file mode 100644 index 0000000..9851385 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/DataFragment.kt @@ -0,0 +1,9 @@ +package es.verdnatura.presentation.view.fragment + +import es.verdnatura.vndelivery.presentation.R +import es.verdnatura.vndelivery.presentation.view.fragment.BaseFragment + +/** + * Created by nelo on 6/7/17. + */ +class DataFragment: BaseFragment(R.layout.fragment_verdnatura_data) \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/ListFragment.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/ListFragment.kt new file mode 100644 index 0000000..91589c2 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/ListFragment.kt @@ -0,0 +1,65 @@ +package es.verdnatura.vndelivery.presentation.view.fragment + +import android.os.Bundle +import android.support.v7.widget.RecyclerView +import android.view.View +import es.verdnatura.core.components.dialogs.retry.DialogRetry +import es.verdnatura.vndelivery.presentation.R +import es.verdnatura.vndelivery.presentation.view.view.ListView +import kotlinx.android.synthetic.main.fragment_list.* +import kotlinx.android.synthetic.main.progress.* + + +/** + * Created by nelo on 7/6/17. + */ +abstract class ListFragment : BaseFragment(R.layout.fragment_list), ListView { + + override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initSwipeRefresh() + } + + override fun showProgress() = vnProgress.show() + + override fun hideProgress() { + vnProgress.hide() + swipeList.hideProgress() + } + + override fun createAdapter(elements: List) { + list.setAdapterList(generateAdapter(elements)) + enableVnSwipeRefresh() + } + + override fun showErrorList(error: String) { showDialogRetry(error, { actionErrorList() }) } + + override fun notifyDataHasChanged(elements: List) { + changeItems(elements) + list.adapter.notifyDataSetChanged() + } + + fun showDialogRetry(error: String, retry: () -> Unit){ + DialogRetry(error, { retry() }).show(fragmentManager, "dialogFragment") + } + + fun enableVnSwipeRefresh() = swipeList.enableProgress() + + fun initSwipeRefresh() { + swipeList.setOnRefreshListener { onRefreshList() } + swipeList.disableProgress() + } + + fun onRefreshList(){ + swipeList.showProgress() + onRefresh() + } + + abstract fun generateAdapter(elements: List): RecyclerView.Adapter<*> + + abstract fun changeItems(elements: List) + + abstract fun actionErrorList() + + abstract fun onRefresh() +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/LoginFragment.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/LoginFragment.kt new file mode 100644 index 0000000..40c60b0 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/LoginFragment.kt @@ -0,0 +1,87 @@ +package es.verdnatura.vndelivery.presentation.view.fragment + +import android.Manifest +import android.content.pm.PackageManager +import android.os.Bundle +import android.view.View +import es.verdnatura.core.UtilPermissions +import es.verdnatura.core.components.dialogs.retry.DialogRetry +import es.verdnatura.vndelivery.data.preferences.Preferences +import es.verdnatura.vndelivery.presentation.di.components.LoginComponent +import es.verdnatura.vndelivery.presentation.presenter.LoginPresenter +import es.verdnatura.vndelivery.presentation.view.view.LoginView +import kotlinx.android.synthetic.main.fragment_login.* +import kotlinx.android.synthetic.main.progress.* +import javax.inject.Inject + + +/** + * Created by nelo on 9/5/17. + */ +class LoginFragment(layout: Int): BaseFragment(layout), LoginView { + + @Inject lateinit var loginPresenter: LoginPresenter + @Inject lateinit var preferences: Preferences + + private val permissions = arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.CALL_PHONE) + + override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + this.getComponent(LoginComponent::class.java).inject(this) + loginPresenter.setView(this) + vnLogin.setLogin { checkPermission() } + if(preferences.getUser() != "") + navigateToMain() + } + + override fun navigateToMain() { + userNavigatior.navigate() + activity.finish() + } + + override fun saveUserAndPass() { + preferences.saveUserAndPass(vnLogin.getUser(), vnLogin.getPassword()) + } + + override fun showProgress() { + vnProgress.show() + } + + override fun hideProgress() { + vnProgress.hide() + } + + override fun showError(error: String) { + val dialog = DialogRetry(error, { login() }) + dialog.show(fragmentManager, "loginFragment") + } + + fun login(){ + loginPresenter.login(vnLogin.getUser(), vnLogin.getPassword()) + } + + fun checkPermission() { + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M && + (!UtilPermissions.checkPermisionReadExternalStorage(activity) || + UtilPermissions.checkPermisionWriteExternalStorage(activity))) + UtilPermissions.getPermissions(activity, permissions) + else login() + + } + + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + if (requestCode == UtilPermissions.OKPERMISSIONS) { + if (grantResults.size > 0 && + grantResults[0] == PackageManager.PERMISSION_GRANTED && + grantResults[1] == PackageManager.PERMISSION_GRANTED && + grantResults[2] == PackageManager.PERMISSION_GRANTED && + grantResults[3] == PackageManager.PERMISSION_GRANTED) { + login() + } + } + } +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/RouteFragment.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/RouteFragment.kt new file mode 100644 index 0000000..7721421 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/RouteFragment.kt @@ -0,0 +1,114 @@ +package es.verdnatura.presentation.view.fragment + +import android.app.Activity +import android.os.Bundle +import android.support.v7.widget.RecyclerView +import android.view.Menu +import android.view.MenuInflater +import android.view.MenuItem +import android.view.View +import es.verdnatura.core.components.dialogs.retry.DialogRetry +import es.verdnatura.core.components.dialogs.update.DialogUpdate +import es.verdnatura.presentation.location.LocationProvider +import es.verdnatura.domain.entity.Route +import es.verdnatura.presentation.di.components.RouteComponent +import es.verdnatura.presentation.navigation.RouterNavigator +import es.verdnatura.presentation.presenter.RoutePresenter +import es.verdnatura.presentation.view.adapter.RouteAdapter +import es.verdnatura.presentation.view.view.UpdateView +import es.verdnatura.vndelivery.presentation.R +import es.verdnatura.vndelivery.presentation.syncadapter.SyncAdapter + +import es.verdnatura.vndelivery.presentation.view.fragment.ListFragment +import kotlinx.android.synthetic.main.fragment_list.* +import java.io.File +import javax.inject.Inject + +/** + * Created by nelo on 5/7/17. + */ +class RouteFragment: ListFragment(), UpdateView { + + @Inject lateinit var presenter: RoutePresenter + @Inject lateinit var location: LocationProvider + @Inject lateinit var syncAdapter: SyncAdapter + + lateinit var routerNavigator: RouterNavigator + + override fun onAttach(activity: Activity?) { + super.onAttach(activity) + if(activity is RouterNavigator) + this.routerNavigator = activity + } + + override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + getComponent(RouteComponent::class.java).inject(this) + presenter.setView(this) + presenter.listRoutes() + presenter.getVersion(getVersionApp()) + } + + override fun onResume() { + super.onResume() + location.createLocationManager(activity) + } + + override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { + super.onCreateOptionsMenu(menu, inflater) + inflater?.inflate(R.menu.menu_routes, menu) + } + + override fun onOptionsItemSelected(item: MenuItem?): Boolean { + when(item?.itemId){ + R.id.dataVerdnatura -> { showDataVerdnatura() } + R.id.logout -> { logout() } + R.id.menuCloud -> { routerNavigator.navigateToSignData() } + } + return super.onOptionsItemSelected(item) + } + + override fun generateAdapter(elements: List): RecyclerView.Adapter<*> { + return RouteAdapter(elements as MutableList, { routerNavigator.navigateToTickets(it.Id) }) + } + + override fun changeItems(elements: List) { + (list.adapter as RouteAdapter).items = elements as MutableList + } + + override fun actionErrorList() { + presenter.listRoutes() + } + + override fun onRefresh() { + presenter.downloadRoutes() + } + + fun getVersionApp(): Int{ + return activity.packageManager.getPackageInfo(activity.packageName, 0).versionCode + } + + override fun onNewVersion() { + DialogUpdate({ update() }).show(fragmentManager, "update") + } + + override fun installApk(file: File) { + routerNavigator.installApk(file) + } + + override fun errorUpdate(error: String) { + DialogRetry(error, { update() }).show(fragmentManager, "update") + } + + fun update(){ + presenter.update() + } + + fun showDataVerdnatura(){ + routerNavigator.showDataVerdnatura() + } + + fun logout(){ + routerNavigator.logout() + } +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/SignDataFragment.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/SignDataFragment.kt new file mode 100644 index 0000000..d58a234 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/SignDataFragment.kt @@ -0,0 +1,55 @@ +package es.verdnatura.presentation.view.fragment + +import android.os.Bundle +import android.support.v7.widget.RecyclerView +import android.view.View +import es.verdnatura.core.components.dialogs.retry.DialogRetry +import es.verdnatura.domain.entity.SignData +import es.verdnatura.presentation.di.components.SignDataComponent +import es.verdnatura.presentation.presenter.SignDataPresenter +import es.verdnatura.presentation.view.adapter.SignDataAdapter +import es.verdnatura.presentation.view.view.SignDataView +import es.verdnatura.vndelivery.presentation.view.fragment.ListFragment +import kotlinx.android.synthetic.main.fragment_list.* +import javax.inject.Inject + +/** + * Created by nelo on 26/7/17. + */ +class SignDataFragment: ListFragment(), SignDataView { + + @Inject lateinit var presenter: SignDataPresenter + + override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + getComponent(SignDataComponent::class.java).inject(this) + presenter.setView(this) + presenter.getSignData() + } + + override fun generateAdapter(elements: List): RecyclerView.Adapter<*> { + return SignDataAdapter(elements as List, {s -> presenter.uploadSign(s)}, { s -> deleteBySign(s, (list.adapter as SignDataAdapter).items) }) + } + + override fun changeItems(elements: List) { + (list.adapter as SignDataAdapter).items = elements as List + } + + override fun actionErrorList() { + presenter.getSignData() + } + + override fun onRefresh() { + presenter.loadSignData() + } + + override fun onErrorUpload(error: String, sign: String) { + DialogRetry(error, { presenter.uploadSign(sign) }).show(fragmentManager, "DialogUpload") + } + + override fun onErrorDelete(error: String) {} + + fun deleteBySign(sign: String, signs: List){ + presenter.deleteBySign(sign, signs) + } +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/SignFragment.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/SignFragment.kt new file mode 100644 index 0000000..7d4968e --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/SignFragment.kt @@ -0,0 +1,59 @@ +package es.verdnatura.vndelivery.presentation.view.fragment + +import android.os.Bundle +import android.view.Menu +import android.view.MenuInflater +import android.view.MenuItem +import android.view.View +import es.verdnatura.core.UtilsResources +import es.verdnatura.data.image.ImageConverter +import es.verdnatura.presentation.di.components.SignComponent +import es.verdnatura.presentation.location.LocationProvider +import es.verdnatura.presentation.presenter.SignPresenter +import es.verdnatura.presentation.view.view.SignView +import es.verdnatura.vndelivery.presentation.R +import kotlinx.android.synthetic.main.fragment_sign.* +import javax.inject.Inject + +/** + * Created by nelo on 10/7/17. + */ +class SignFragment(val tickets: List, val packages: Int): BaseFragment(R.layout.fragment_sign), SignView { + + @Inject lateinit var presenter: SignPresenter + @Inject lateinit var location: LocationProvider + @Inject lateinit var imageConverter: ImageConverter + + override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + getComponent(SignComponent::class.java).inject(this) + presenter.setView(this) + textPackages.text = "${UtilsResources.getResourceString(activity, R.string.packages)}: ${packages}" + } + + override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { + super.onCreateOptionsMenu(menu, inflater) + inflater?.inflate(R.menu.menu_sign, menu) + } + + override fun onOptionsItemSelected(item: MenuItem?): Boolean { + when(item?.itemId){ + R.id.deleteSign -> { ink.clear() } + R.id.confirmSign -> { signTickets() } + } + return super.onOptionsItemSelected(item) + } + + override fun close() { + activity.onBackPressed() + } + + fun signTickets(){ + val loc = location.getLastKnowLocation(activity) + val sign = ink.bitmap + val signString = imageConverter.imageToString(sign) + if(loc != null) presenter.signTicket(signString, tickets, loc.longitude, loc.latitude) + else presenter.signTicket(signString, tickets, null, null) + } + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/TicketFragment.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/TicketFragment.kt new file mode 100644 index 0000000..ad4021f --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/fragment/TicketFragment.kt @@ -0,0 +1,104 @@ +package es.verdnatura.presentation.view.fragment + +import android.app.Activity +import android.os.Bundle +import android.support.v7.widget.RecyclerView +import android.view.Menu +import android.view.MenuInflater +import android.view.MenuItem +import android.view.View +import es.verdnatura.core.UtilsResources +import es.verdnatura.domain.entity.Ticket +import es.verdnatura.presentation.di.components.TicketComponent +import es.verdnatura.presentation.navigation.NavigateToSign +import es.verdnatura.presentation.presenter.TicketPresenter +import es.verdnatura.presentation.view.adapter.TicketAdapter +import es.verdnatura.vndelivery.presentation.R +import es.verdnatura.vndelivery.presentation.view.fragment.ListFragment +import kotlinx.android.synthetic.main.fragment_list.* +import org.jetbrains.anko.act +import javax.inject.Inject + +/** + * Created by nelo on 7/7/17. + */ +class TicketFragment(val route: Int): ListFragment() { + + @Inject lateinit var presenter: TicketPresenter + private lateinit var navigator: NavigateToSign + + override fun onAttach(activity: Activity?) { + super.onAttach(activity) + if(activity is NavigateToSign) + this.navigator = activity + } + + override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + getComponent(TicketComponent::class.java).inject(this) + presenter.setView(this) + } + + override fun onResume() { + super.onResume() + presenter.listTickets(route) + } + + override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { + super.onCreateOptionsMenu(menu, inflater) + inflater?.inflate(R.menu.menu_tickets, menu) + } + + override fun onOptionsItemSelected(item: MenuItem?): Boolean { + when(item?.itemId){ + R.id.show_sign -> { + changeMenuTitle(item) + filterTickets(item?.title.toString()) + } + } + + return super.onOptionsItemSelected(item) + } + + override fun generateAdapter(elements: List): RecyclerView.Adapter<*> { + return TicketAdapter(elements as MutableList>, { it, p -> sign(it, p) }) + } + + override fun changeItems(elements: List) { + (list.adapter as TicketAdapter).items = elements as MutableList> + } + + override fun actionErrorList() { + presenter.listTickets(route) + } + + override fun onRefresh() { + presenter.downloadTickets(route) + } + + fun sign(tickets: List, packages: Int){ + navigator.navigateToSign(tickets, packages) + } + + fun changeMenuTitle(item: MenuItem?) { + var title = UtilsResources.getResourceString(act, R.string.hide_signed) + if(item?.title == title) + title = getShowSignedText() + item?.title = title + } + + fun filterTickets(title: String) { + when(title) { + getShowSignedText() -> { presenter.filterTickets(false) } + getHideSignedText() -> { presenter.filterTickets(true) } + } + } + + fun getShowSignedText(): String { + return UtilsResources.getResourceString(act, R.string.show_signed) + } + + fun getHideSignedText(): String { + return UtilsResources.getResourceString(act, R.string.hide_signed) + } +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/view/BaseView.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/view/BaseView.kt new file mode 100644 index 0000000..e3cca7c --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/view/BaseView.kt @@ -0,0 +1,6 @@ +package es.verdnatura.vndelivery.presentation.view.view + +/** + * Created by nelo on 8/3/17. + */ +interface BaseView \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/view/ListView.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/view/ListView.kt new file mode 100644 index 0000000..18221c1 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/view/ListView.kt @@ -0,0 +1,15 @@ +package es.verdnatura.vndelivery.presentation.view.view + + +/** + * Created by nelo on 5/6/17. + */ +interface ListView: BaseView { + + fun showProgress() + fun hideProgress() + fun createAdapter(scans: List) + fun showErrorList(error: String) + fun notifyDataHasChanged(elements: List) + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/view/LoginView.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/view/LoginView.kt new file mode 100644 index 0000000..a0cd84c --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/view/LoginView.kt @@ -0,0 +1,13 @@ +package es.verdnatura.vndelivery.presentation.view.view + +/** + * Created by nelo on 10/5/17. + */ +interface LoginView: BaseView { + + fun navigateToMain() + fun saveUserAndPass() + fun showProgress() + fun hideProgress() + fun showError(error: String) +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/view/SignDataView.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/view/SignDataView.kt new file mode 100644 index 0000000..26e9374 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/view/SignDataView.kt @@ -0,0 +1,12 @@ +package es.verdnatura.presentation.view.view + +import es.verdnatura.vndelivery.presentation.view.view.ListView + +/** + * Created by nelo on 26/7/17. + */ +interface SignDataView: ListView { + + fun onErrorUpload(error: String, sign: String) + fun onErrorDelete(error: String) +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/view/SignView.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/view/SignView.kt new file mode 100644 index 0000000..d86d74d --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/view/SignView.kt @@ -0,0 +1,12 @@ +package es.verdnatura.presentation.view.view + +import es.verdnatura.vndelivery.presentation.view.view.BaseView + +/** + * Created by nelo on 11/7/17. + */ +interface SignView: BaseView { + + fun close() + +} \ No newline at end of file diff --git a/presentation/src/main/kotlin/es/verdnatura/presentation/view/view/UpdateView.kt b/presentation/src/main/kotlin/es/verdnatura/presentation/view/view/UpdateView.kt new file mode 100644 index 0000000..38d09b3 --- /dev/null +++ b/presentation/src/main/kotlin/es/verdnatura/presentation/view/view/UpdateView.kt @@ -0,0 +1,15 @@ +package es.verdnatura.presentation.view.view + +import es.verdnatura.vndelivery.presentation.view.view.ListView +import java.io.File + +/** + * Created by nelo on 24/7/17. + */ +interface UpdateView: ListView { + + fun onNewVersion() + fun installApk(file: File) + fun errorUpdate(error: String) + +} \ No newline at end of file diff --git a/presentation/src/main/res/drawable-hdpi/splash.png b/presentation/src/main/res/drawable-hdpi/splash.png new file mode 100644 index 0000000..ae91f01 Binary files /dev/null and b/presentation/src/main/res/drawable-hdpi/splash.png differ diff --git a/presentation/src/main/res/drawable-ldpi/splash.png b/presentation/src/main/res/drawable-ldpi/splash.png new file mode 100644 index 0000000..422cbf9 Binary files /dev/null and b/presentation/src/main/res/drawable-ldpi/splash.png differ diff --git a/presentation/src/main/res/drawable-mdpi/splash.png b/presentation/src/main/res/drawable-mdpi/splash.png new file mode 100644 index 0000000..1fbe4b0 Binary files /dev/null and b/presentation/src/main/res/drawable-mdpi/splash.png differ diff --git a/presentation/src/main/res/drawable-xhdpi/splash.png b/presentation/src/main/res/drawable-xhdpi/splash.png new file mode 100644 index 0000000..262296f Binary files /dev/null and b/presentation/src/main/res/drawable-xhdpi/splash.png differ diff --git a/presentation/src/main/res/drawable-xxhdpi/splash.png b/presentation/src/main/res/drawable-xxhdpi/splash.png new file mode 100644 index 0000000..d1ba43b Binary files /dev/null and b/presentation/src/main/res/drawable-xxhdpi/splash.png differ diff --git a/presentation/src/main/res/drawable/ic_alert.xml b/presentation/src/main/res/drawable/ic_alert.xml new file mode 100644 index 0000000..97c9dd8 --- /dev/null +++ b/presentation/src/main/res/drawable/ic_alert.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/drawable/ic_check.xml b/presentation/src/main/res/drawable/ic_check.xml new file mode 100644 index 0000000..c632cd1 --- /dev/null +++ b/presentation/src/main/res/drawable/ic_check.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/drawable/ic_cloud.xml b/presentation/src/main/res/drawable/ic_cloud.xml new file mode 100644 index 0000000..84215c9 --- /dev/null +++ b/presentation/src/main/res/drawable/ic_cloud.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/drawable/ic_data.xml b/presentation/src/main/res/drawable/ic_data.xml new file mode 100644 index 0000000..0d2b780 --- /dev/null +++ b/presentation/src/main/res/drawable/ic_data.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/drawable/ic_delete.xml b/presentation/src/main/res/drawable/ic_delete.xml new file mode 100644 index 0000000..689db8c --- /dev/null +++ b/presentation/src/main/res/drawable/ic_delete.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/drawable/ic_delete_sign.xml b/presentation/src/main/res/drawable/ic_delete_sign.xml new file mode 100644 index 0000000..ea3bb75 --- /dev/null +++ b/presentation/src/main/res/drawable/ic_delete_sign.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/drawable/ic_directions.xml b/presentation/src/main/res/drawable/ic_directions.xml new file mode 100644 index 0000000..b2354e3 --- /dev/null +++ b/presentation/src/main/res/drawable/ic_directions.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/drawable/ic_exit.xml b/presentation/src/main/res/drawable/ic_exit.xml new file mode 100644 index 0000000..f8001ed --- /dev/null +++ b/presentation/src/main/res/drawable/ic_exit.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/drawable/ic_note.xml b/presentation/src/main/res/drawable/ic_note.xml new file mode 100644 index 0000000..493ef63 --- /dev/null +++ b/presentation/src/main/res/drawable/ic_note.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/drawable/ic_ok.xml b/presentation/src/main/res/drawable/ic_ok.xml new file mode 100644 index 0000000..74f367a --- /dev/null +++ b/presentation/src/main/res/drawable/ic_ok.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/drawable/ic_phone.xml b/presentation/src/main/res/drawable/ic_phone.xml new file mode 100644 index 0000000..f586281 --- /dev/null +++ b/presentation/src/main/res/drawable/ic_phone.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/drawable/ic_sign.xml b/presentation/src/main/res/drawable/ic_sign.xml new file mode 100644 index 0000000..e730edf --- /dev/null +++ b/presentation/src/main/res/drawable/ic_sign.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/drawable/ic_splash.xml b/presentation/src/main/res/drawable/ic_splash.xml new file mode 100644 index 0000000..1f0bcba --- /dev/null +++ b/presentation/src/main/res/drawable/ic_splash.xml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/presentation/src/main/res/drawable/ic_upload.xml b/presentation/src/main/res/drawable/ic_upload.xml new file mode 100644 index 0000000..ec13317 --- /dev/null +++ b/presentation/src/main/res/drawable/ic_upload.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/layouts/activity/layout/activity_layout.xml b/presentation/src/main/res/layouts/activity/layout/activity_layout.xml new file mode 100644 index 0000000..f3a24bf --- /dev/null +++ b/presentation/src/main/res/layouts/activity/layout/activity_layout.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/presentation/src/main/res/layouts/fragment/layout/fragment_list.xml b/presentation/src/main/res/layouts/fragment/layout/fragment_list.xml new file mode 100644 index 0000000..ae0b2ae --- /dev/null +++ b/presentation/src/main/res/layouts/fragment/layout/fragment_list.xml @@ -0,0 +1,17 @@ + + + + + + + + + + \ No newline at end of file diff --git a/presentation/src/main/res/layouts/fragment/layout/fragment_login.xml b/presentation/src/main/res/layouts/fragment/layout/fragment_login.xml new file mode 100644 index 0000000..540da63 --- /dev/null +++ b/presentation/src/main/res/layouts/fragment/layout/fragment_login.xml @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/presentation/src/main/res/layouts/fragment/layout/fragment_sign.xml b/presentation/src/main/res/layouts/fragment/layout/fragment_sign.xml new file mode 100644 index 0000000..928397c --- /dev/null +++ b/presentation/src/main/res/layouts/fragment/layout/fragment_sign.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/presentation/src/main/res/layouts/fragment/layout/fragment_verdnatura_data.xml b/presentation/src/main/res/layouts/fragment/layout/fragment_verdnatura_data.xml new file mode 100644 index 0000000..349a2b2 --- /dev/null +++ b/presentation/src/main/res/layouts/fragment/layout/fragment_verdnatura_data.xml @@ -0,0 +1,21 @@ + + + + + + + + + + \ No newline at end of file diff --git a/presentation/src/main/res/layouts/item/layout/item_route.xml b/presentation/src/main/res/layouts/item/layout/item_route.xml new file mode 100644 index 0000000..d998103 --- /dev/null +++ b/presentation/src/main/res/layouts/item/layout/item_route.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/presentation/src/main/res/layouts/item/layout/item_ticket.xml b/presentation/src/main/res/layouts/item/layout/item_ticket.xml new file mode 100644 index 0000000..733059c --- /dev/null +++ b/presentation/src/main/res/layouts/item/layout/item_ticket.xml @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/presentation/src/main/res/layouts/item/layout/item_upload.xml b/presentation/src/main/res/layouts/item/layout/item_upload.xml new file mode 100644 index 0000000..8ede1c8 --- /dev/null +++ b/presentation/src/main/res/layouts/item/layout/item_upload.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/presentation/src/main/res/layouts/view/layout/progress.xml b/presentation/src/main/res/layouts/view/layout/progress.xml new file mode 100644 index 0000000..4f9cea2 --- /dev/null +++ b/presentation/src/main/res/layouts/view/layout/progress.xml @@ -0,0 +1,9 @@ + + diff --git a/presentation/src/main/res/layouts/view/layout/ticket_data.xml b/presentation/src/main/res/layouts/view/layout/ticket_data.xml new file mode 100644 index 0000000..ba40dd0 --- /dev/null +++ b/presentation/src/main/res/layouts/view/layout/ticket_data.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/presentation/src/main/res/menu/menu_routes.xml b/presentation/src/main/res/menu/menu_routes.xml new file mode 100644 index 0000000..1cace2e --- /dev/null +++ b/presentation/src/main/res/menu/menu_routes.xml @@ -0,0 +1,20 @@ + + + + + + + + + + \ No newline at end of file diff --git a/presentation/src/main/res/menu/menu_sign.xml b/presentation/src/main/res/menu/menu_sign.xml new file mode 100644 index 0000000..2614142 --- /dev/null +++ b/presentation/src/main/res/menu/menu_sign.xml @@ -0,0 +1,15 @@ + + + + + + + + \ No newline at end of file diff --git a/presentation/src/main/res/menu/menu_tickets.xml b/presentation/src/main/res/menu/menu_tickets.xml new file mode 100644 index 0000000..282ff6d --- /dev/null +++ b/presentation/src/main/res/menu/menu_tickets.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/presentation/src/main/res/mipmap-hdpi/ic_launcher.png b/presentation/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..8766319 Binary files /dev/null and b/presentation/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/presentation/src/main/res/mipmap-mdpi/ic_launcher.png b/presentation/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..17957b8 Binary files /dev/null and b/presentation/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/presentation/src/main/res/mipmap-xhdpi/ic_launcher.png b/presentation/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..0111e3b Binary files /dev/null and b/presentation/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/presentation/src/main/res/mipmap-xxhdpi/ic_launcher.png b/presentation/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..13cf825 Binary files /dev/null and b/presentation/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..7d32a7d Binary files /dev/null and b/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/presentation/src/main/res/values-es/strings.xml b/presentation/src/main/res/values-es/strings.xml new file mode 100644 index 0000000..dce5835 --- /dev/null +++ b/presentation/src/main/res/values-es/strings.xml @@ -0,0 +1,38 @@ + + VnDelivery + com.verdnatura.vndelivery.account + com.verdnatura.vndelivery.provider + + Rutas + Tickets + + Mostrar firmados + Ocultar firmados + Ver datos Verdnatura + Subir firmas + + Ruta + Agencia + Hora + Matrícula + Conductor + Fecha + + Cliente + Consigna + Dirección + CP + Ciudad + Ticket + Tickets + Almacén + Paquetes + Firma + Mostrar firmados + Ocultar firmados + + Salir + + Encienda la localización para continuar + + \ No newline at end of file diff --git a/presentation/src/main/res/values-w820dp/dimens.xml b/presentation/src/main/res/values-w820dp/dimens.xml new file mode 100644 index 0000000..63fc816 --- /dev/null +++ b/presentation/src/main/res/values-w820dp/dimens.xml @@ -0,0 +1,6 @@ + + + 64dp + diff --git a/presentation/src/main/res/values/colors.xml b/presentation/src/main/res/values/colors.xml new file mode 100644 index 0000000..d781ec5 --- /dev/null +++ b/presentation/src/main/res/values/colors.xml @@ -0,0 +1,4 @@ + + + + diff --git a/presentation/src/main/res/values/dimens.xml b/presentation/src/main/res/values/dimens.xml new file mode 100644 index 0000000..f11f745 --- /dev/null +++ b/presentation/src/main/res/values/dimens.xml @@ -0,0 +1,3 @@ + + + diff --git a/presentation/src/main/res/values/strings.xml b/presentation/src/main/res/values/strings.xml new file mode 100644 index 0000000..64fbc93 --- /dev/null +++ b/presentation/src/main/res/values/strings.xml @@ -0,0 +1,38 @@ + + VnDelivery + com.verdnatura.vndelivery.account + com.verdnatura.vndelivery.provider + + Routes + Tickets + + Show signed + Hide signed + Show data Verdnatura + Upload signs + + Route + Agency + Hour + Number plate + Driver + Date + + Client + Consigne + Address + PC + City + Ticket + Tickets + Warehouse + Packages + Sign + Show signed + Hide signed + + Logout + + Turn on location to continue + + \ No newline at end of file diff --git a/presentation/src/main/res/values/styles.xml b/presentation/src/main/res/values/styles.xml new file mode 100644 index 0000000..0325542 --- /dev/null +++ b/presentation/src/main/res/values/styles.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + diff --git a/presentation/src/main/res/xml/authenticator.xml b/presentation/src/main/res/xml/authenticator.xml new file mode 100644 index 0000000..dc35957 --- /dev/null +++ b/presentation/src/main/res/xml/authenticator.xml @@ -0,0 +1,6 @@ + + \ No newline at end of file diff --git a/presentation/src/main/res/xml/sync_adapter.xml b/presentation/src/main/res/xml/sync_adapter.xml new file mode 100644 index 0000000..91af794 --- /dev/null +++ b/presentation/src/main/res/xml/sync_adapter.xml @@ -0,0 +1,8 @@ + + \ No newline at end of file diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..ba92be9 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,5 @@ +include ':presentation' +include ':domain' +include ':data' +include ':vncore' +project (":vncore").projectDir = new File("../vncore") \ No newline at end of file diff --git a/vndelivery.iml b/vndelivery.iml new file mode 100644 index 0000000..c1d7bab --- /dev/null +++ b/vndelivery.iml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file