diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 00000000..8a17a5ce --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +Mobile-applications \ No newline at end of file diff --git a/.idea/Mobile-applications.iml b/.idea/Mobile-applications.iml new file mode 100644 index 00000000..c451ed2f --- /dev/null +++ b/.idea/Mobile-applications.iml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 00000000..96cc43ef --- /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 00000000..e7bedf33 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..7e634167 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..aad95cac --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..6e141825 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 00000000..b7bcaccf --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,451 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1453469782441 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Learn from Map/App/.idea/.name b/Learn from Map/App/.idea/.name new file mode 100644 index 00000000..958b371e --- /dev/null +++ b/Learn from Map/App/.idea/.name @@ -0,0 +1 @@ +App \ No newline at end of file diff --git a/Learn from Map/App/.idea/compiler.xml b/Learn from Map/App/.idea/compiler.xml new file mode 100644 index 00000000..96cc43ef --- /dev/null +++ b/Learn from Map/App/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Learn from Map/App/.idea/copyright/profiles_settings.xml b/Learn from Map/App/.idea/copyright/profiles_settings.xml new file mode 100644 index 00000000..e7bedf33 --- /dev/null +++ b/Learn from Map/App/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Learn from Map/App/.idea/gradle.xml b/Learn from Map/App/.idea/gradle.xml new file mode 100644 index 00000000..47fdc160 --- /dev/null +++ b/Learn from Map/App/.idea/gradle.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/Learn from Map/App/.idea/misc.xml b/Learn from Map/App/.idea/misc.xml new file mode 100644 index 00000000..bc3190ec --- /dev/null +++ b/Learn from Map/App/.idea/misc.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + 1.7 + + + + + + + + \ No newline at end of file diff --git a/Learn from Map/App/.idea/modules.xml b/Learn from Map/App/.idea/modules.xml new file mode 100644 index 00000000..febc03ef --- /dev/null +++ b/Learn from Map/App/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Learn from Map/App/.idea/vcs.xml b/Learn from Map/App/.idea/vcs.xml new file mode 100644 index 00000000..5a1f85ca --- /dev/null +++ b/Learn from Map/App/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Learn from Map/App/.idea/workspace.xml b/Learn from Map/App/.idea/workspace.xml new file mode 100644 index 00000000..96425af0 --- /dev/null +++ b/Learn from Map/App/.idea/workspace.xml @@ -0,0 +1,392 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1441318259654 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Learn from Map/App/App.iml b/Learn from Map/App/App.iml new file mode 100644 index 00000000..cd5269d9 --- /dev/null +++ b/Learn from Map/App/App.iml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.gradle/2.2.1/taskArtifacts/cache.properties b/LearnFromMap/.gradle/2.2.1/taskArtifacts/cache.properties new file mode 100644 index 00000000..204ca459 --- /dev/null +++ b/LearnFromMap/.gradle/2.2.1/taskArtifacts/cache.properties @@ -0,0 +1 @@ +#Fri Sep 04 03:37:05 IST 2015 diff --git a/LearnFromMap/.gradle/2.2.1/taskArtifacts/cache.properties.lock b/LearnFromMap/.gradle/2.2.1/taskArtifacts/cache.properties.lock new file mode 100644 index 00000000..daa857f8 Binary files /dev/null and b/LearnFromMap/.gradle/2.2.1/taskArtifacts/cache.properties.lock differ diff --git a/LearnFromMap/.gradle/2.2.1/taskArtifacts/fileHashes.bin b/LearnFromMap/.gradle/2.2.1/taskArtifacts/fileHashes.bin new file mode 100644 index 00000000..adcffb8e Binary files /dev/null and b/LearnFromMap/.gradle/2.2.1/taskArtifacts/fileHashes.bin differ diff --git a/LearnFromMap/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin b/LearnFromMap/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin new file mode 100644 index 00000000..a329aa77 Binary files /dev/null and b/LearnFromMap/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin differ diff --git a/LearnFromMap/.gradle/2.2.1/taskArtifacts/outputFileStates.bin b/LearnFromMap/.gradle/2.2.1/taskArtifacts/outputFileStates.bin new file mode 100644 index 00000000..8a83a8d5 Binary files /dev/null and b/LearnFromMap/.gradle/2.2.1/taskArtifacts/outputFileStates.bin differ diff --git a/LearnFromMap/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin b/LearnFromMap/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin new file mode 100644 index 00000000..ab222490 Binary files /dev/null and b/LearnFromMap/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin differ diff --git a/LearnFromMap/.idea/.name b/LearnFromMap/.idea/.name new file mode 100644 index 00000000..9bd39d8a --- /dev/null +++ b/LearnFromMap/.idea/.name @@ -0,0 +1 @@ +LearnFromMap \ No newline at end of file diff --git a/LearnFromMap/.idea/compiler.xml b/LearnFromMap/.idea/compiler.xml new file mode 100644 index 00000000..96cc43ef --- /dev/null +++ b/LearnFromMap/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/copyright/profiles_settings.xml b/LearnFromMap/.idea/copyright/profiles_settings.xml new file mode 100644 index 00000000..e7bedf33 --- /dev/null +++ b/LearnFromMap/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/gradle.xml b/LearnFromMap/.idea/gradle.xml new file mode 100644 index 00000000..9a903ec4 --- /dev/null +++ b/LearnFromMap/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/appcompat_v7_22_0_0.xml b/LearnFromMap/.idea/libraries/appcompat_v7_22_0_0.xml new file mode 100644 index 00000000..e77ca55e --- /dev/null +++ b/LearnFromMap/.idea/libraries/appcompat_v7_22_0_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/mediarouter_v7_22_0_0.xml b/LearnFromMap/.idea/libraries/mediarouter_v7_22_0_0.xml new file mode 100644 index 00000000..e76318fd --- /dev/null +++ b/LearnFromMap/.idea/libraries/mediarouter_v7_22_0_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_7_5_0.xml new file mode 100644 index 00000000..1799c497 --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_ads_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_ads_7_5_0.xml new file mode 100644 index 00000000..047993c6 --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_ads_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_analytics_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_analytics_7_5_0.xml new file mode 100644 index 00000000..15447db8 --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_analytics_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_appindexing_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_appindexing_7_5_0.xml new file mode 100644 index 00000000..f3dc0ebb --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_appindexing_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_appinvite_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_appinvite_7_5_0.xml new file mode 100644 index 00000000..507a6019 --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_appinvite_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_appstate_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_appstate_7_5_0.xml new file mode 100644 index 00000000..aea4d451 --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_appstate_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_base_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_base_7_5_0.xml new file mode 100644 index 00000000..13a90016 --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_base_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_cast_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_cast_7_5_0.xml new file mode 100644 index 00000000..71ec45a3 --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_cast_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_drive_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_drive_7_5_0.xml new file mode 100644 index 00000000..bcce2f61 --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_drive_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_fitness_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_fitness_7_5_0.xml new file mode 100644 index 00000000..a28aab26 --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_fitness_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_games_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_games_7_5_0.xml new file mode 100644 index 00000000..544239bd --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_games_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_gcm_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_gcm_7_5_0.xml new file mode 100644 index 00000000..3c4e6370 --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_gcm_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_identity_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_identity_7_5_0.xml new file mode 100644 index 00000000..6f9dfad8 --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_identity_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_location_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_location_7_5_0.xml new file mode 100644 index 00000000..c38a361d --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_location_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_maps_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_maps_7_5_0.xml new file mode 100644 index 00000000..f2b031d0 --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_maps_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_nearby_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_nearby_7_5_0.xml new file mode 100644 index 00000000..d89c778a --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_nearby_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_panorama_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_panorama_7_5_0.xml new file mode 100644 index 00000000..ef9d2b96 --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_panorama_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_plus_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_plus_7_5_0.xml new file mode 100644 index 00000000..2285da15 --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_plus_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_safetynet_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_safetynet_7_5_0.xml new file mode 100644 index 00000000..1f9eee95 --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_safetynet_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_wallet_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_wallet_7_5_0.xml new file mode 100644 index 00000000..4e111332 --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_wallet_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/play_services_wearable_7_5_0.xml b/LearnFromMap/.idea/libraries/play_services_wearable_7_5_0.xml new file mode 100644 index 00000000..a76fe53e --- /dev/null +++ b/LearnFromMap/.idea/libraries/play_services_wearable_7_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/simmetrics_jar_v1_6_2_d07_02_07.xml b/LearnFromMap/.idea/libraries/simmetrics_jar_v1_6_2_d07_02_07.xml new file mode 100644 index 00000000..a69d2349 --- /dev/null +++ b/LearnFromMap/.idea/libraries/simmetrics_jar_v1_6_2_d07_02_07.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/sqliteassethelper_2_0_1.xml b/LearnFromMap/.idea/libraries/sqliteassethelper_2_0_1.xml new file mode 100644 index 00000000..46854b1f --- /dev/null +++ b/LearnFromMap/.idea/libraries/sqliteassethelper_2_0_1.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/support_annotations_22_0_0.xml b/LearnFromMap/.idea/libraries/support_annotations_22_0_0.xml new file mode 100644 index 00000000..2c747b39 --- /dev/null +++ b/LearnFromMap/.idea/libraries/support_annotations_22_0_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/libraries/support_v4_22_0_0.xml b/LearnFromMap/.idea/libraries/support_v4_22_0_0.xml new file mode 100644 index 00000000..e00abb76 --- /dev/null +++ b/LearnFromMap/.idea/libraries/support_v4_22_0_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/misc.xml b/LearnFromMap/.idea/misc.xml new file mode 100644 index 00000000..8f712fe7 --- /dev/null +++ b/LearnFromMap/.idea/misc.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + 1.7 + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/modules.xml b/LearnFromMap/.idea/modules.xml new file mode 100644 index 00000000..b78acba0 --- /dev/null +++ b/LearnFromMap/.idea/modules.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/vcs.xml b/LearnFromMap/.idea/vcs.xml new file mode 100644 index 00000000..6c0b8635 --- /dev/null +++ b/LearnFromMap/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/LearnFromMap/.idea/workspace.xml b/LearnFromMap/.idea/workspace.xml new file mode 100644 index 00000000..76ae3142 --- /dev/null +++ b/LearnFromMap/.idea/workspace.xml @@ -0,0 +1,2976 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1441317376223 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/LearnFromMap.iml b/LearnFromMap/LearnFromMap.iml new file mode 100644 index 00000000..432e345c --- /dev/null +++ b/LearnFromMap/LearnFromMap.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/build.gradle b/LearnFromMap/build.gradle new file mode 100644 index 00000000..88d246d4 --- /dev/null +++ b/LearnFromMap/build.gradle @@ -0,0 +1,15 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:1.2.3' + } +} + +allprojects { + repositories { + jcenter() + } +} diff --git a/LearnFromMap/gradle/wrapper/gradle-wrapper.jar b/LearnFromMap/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 00000000..8c0fb64a Binary files /dev/null and b/LearnFromMap/gradle/wrapper/gradle-wrapper.jar differ diff --git a/LearnFromMap/gradle/wrapper/gradle-wrapper.properties b/LearnFromMap/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..0c71e760 --- /dev/null +++ b/LearnFromMap/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Wed Apr 10 15:27:10 PDT 2013 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip diff --git a/LearnFromMap/gradlew b/LearnFromMap/gradlew new file mode 100755 index 00000000..91a7e269 --- /dev/null +++ b/LearnFromMap/gradlew @@ -0,0 +1,164 @@ +#!/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 + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# 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\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +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"` + + # 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/LearnFromMap/gradlew.bat b/LearnFromMap/gradlew.bat new file mode 100644 index 00000000..aec99730 --- /dev/null +++ b/LearnFromMap/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/LearnFromMap/holoGraphLibrary/build.gradle b/LearnFromMap/holoGraphLibrary/build.gradle new file mode 100644 index 00000000..48321aab --- /dev/null +++ b/LearnFromMap/holoGraphLibrary/build.gradle @@ -0,0 +1,16 @@ +apply plugin: 'com.android.library' + +android { + compileSdkVersion 18 + buildToolsVersion "22.0.1" + + defaultConfig { + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' + } + } +} diff --git a/LearnFromMap/holoGraphLibrary/holoGraphLibrary.iml b/LearnFromMap/holoGraphLibrary/holoGraphLibrary.iml new file mode 100644 index 00000000..101876e9 --- /dev/null +++ b/LearnFromMap/holoGraphLibrary/holoGraphLibrary.iml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/holoGraphLibrary/src/main/AndroidManifest.xml b/LearnFromMap/holoGraphLibrary/src/main/AndroidManifest.xml new file mode 100644 index 00000000..8524b5ad --- /dev/null +++ b/LearnFromMap/holoGraphLibrary/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/Bar.java b/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/Bar.java new file mode 100644 index 00000000..ddea6088 --- /dev/null +++ b/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/Bar.java @@ -0,0 +1,146 @@ +/* + * Created by Daniel Nadeau + * daniel.nadeau01@gmail.com + * danielnadeau.blogspot.com + * + * Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ + +package com.echo.holographlibrary; + +import android.graphics.Color; +import android.graphics.Path; +import android.graphics.Region; + +public class Bar { + + private final Path mPath = new Path(); + private final Region mRegion = new Region(); + private int mColor = 0xFF33B5E5; + private int mLabelColor = -1; + private int mSelectedColor = -1; + private int mValueColor = Color.WHITE; + private int mColorAlpha = 255;//no transparency by default. Used in animations to transition to a final alpha. + private String mName = null; + private float mValue; + private float mOldValue; + private float mGoalValue; + private String mValueString = null; + private String mValuePrefix = null; + private String mValueSuffix = null; + + public int mAnimateSpecial = HoloGraphAnimate.ANIMATE_NORMAL;//add getter setter + + public int getColor() { + return mColor; + } + + public int getColorAlpha(){return mColorAlpha;} + + public void setColor(int color) { + mColor = color; + mColorAlpha = Color.alpha(color); + } + + public int getLabelColor() { + return mLabelColor == -1 ? mColor : mLabelColor; + } + + public void setLabelColor(int labelColor) { + mLabelColor = labelColor; + } + + public int getSelectedColor() { + if (-1 == mSelectedColor) mSelectedColor = Utils.darkenColor(mColor); + return mSelectedColor; + } + + public void setSelectedColor(int selectedColor) { + mSelectedColor = selectedColor; + } + + public int getValueColor() { + return mValueColor; + } + + public void setValueColor(int valueColor) { + mValueColor = valueColor; + } + + public String getName() { + return (null == mName) ? "" : mName; + } + + public void setName(String name) { + mName = name; + } + + public float getValue() { + return mValue; + } + + public void setValue(float value) { + mValue = value; + } + + public float getOldValue() { + return mOldValue; + } + + public void setOldValue(float oldValue) { mOldValue = oldValue; } + + public float getGoalValue() { + return mGoalValue; + } + + public void setGoalValue(float goalValue) { mGoalValue = goalValue; } + + public String getValueString() { + if (mValueString != null) { + return mValueString; + } else { + return String.valueOf(mValue); + } + } + + public void setValueString(final String valueString) { + mValueString = valueString; + } + public String getValuePrefix() {return mValuePrefix;} + + public void setValuePrefix(String valuePrefix) { mValuePrefix = valuePrefix; } + + public String getValueSuffix() {return mValueSuffix;} + + public void setValueSuffix(String valueSuffix) { mValueSuffix = valueSuffix; } + + public void makeValueString(int decimalPrecision){ + String base = String.format("%." + String.valueOf(decimalPrecision)+"f",mValue); + if (getValuePrefix() != null) base = getValuePrefix() + base; + if (getValueSuffix() != null) base = base + getValueSuffix(); + setValueString(base); + } + + public Path getPath() { + return mPath; + } + + public Region getRegion() { + return mRegion; + } +} diff --git a/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/BarGraph.java b/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/BarGraph.java new file mode 100644 index 00000000..04d93cf7 --- /dev/null +++ b/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/BarGraph.java @@ -0,0 +1,552 @@ +/* + * Created by Daniel Nadeau + * daniel.nadeau01@gmail.com + * danielnadeau.blogspot.com + * + * Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ + +package com.echo.holographlibrary; + +import android.animation.Animator; +import android.animation.TimeInterpolator; +import android.animation.ValueAnimator; +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.Point; +import android.graphics.Rect; +import android.graphics.Region; +import android.graphics.drawable.NinePatchDrawable; +import android.os.Build; +import android.util.AttributeSet; +import android.util.Log; +import android.util.SparseArray; +import android.view.MotionEvent; +import android.view.View; +import android.view.animation.Interpolator; +import android.view.animation.LinearInterpolator; + +import java.text.DecimalFormat; +import java.util.ArrayList; + +public class BarGraph extends View implements HoloGraphAnimate { + + private static final int VALUE_FONT_SIZE = 30; + private static final int AXIS_LABEL_FONT_SIZE = 15; + // How much space to leave between labels when shrunken. Increase for less space. + private static final float LABEL_PADDING_MULTIPLIER = 1.6f; + private static final int ORIENTATION_HORIZONTAL = 0; + private static final int ORIENTATION_VERTICAL = 1; + + private final int mOrientation; + private ArrayList mBars = new ArrayList(); + private Paint mPaint = new Paint(); + private Rect mBoundsRect = new Rect(); + private Rect mTextRect = new Rect(); + private boolean mShowAxis; + private boolean mShowAxisLabel; + private boolean mShowBarText; + private boolean mShowPopup; + private int mSelectedIndex = -1; + private OnBarClickedListener mListener; + private int mAxisColor; + + private int mDuration = 300;//in ms + private Interpolator mInterpolator; + private Animator.AnimatorListener mAnimationListener; + private ValueAnimator mValueAnimator; + private float mMaxValue; //max value to use when animating + private float mOldMaxValue; + private float mGoalMaxValue; + private long mLastTimeValueStringsUpdated; + private long mValueStringUpdateInterval = 200;//ms; how often to update the value strings when animating + private int mValueStringPrecision = 0;//how many decimals to put in the value string when animating; 0 for integers + + public BarGraph(Context context) { + this(context, null); + } + + public BarGraph(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public BarGraph(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.BarGraph); + mOrientation = a.getInt(R.styleable.BarGraph_orientation, ORIENTATION_VERTICAL); + mAxisColor = a.getColor(R.styleable.BarGraph_barAxisColor, Color.LTGRAY); + mShowAxis = a.getBoolean(R.styleable.BarGraph_barShowAxis, true); + mShowAxisLabel = a.getBoolean(R.styleable.BarGraph_barShowAxisLabel, true); + mShowBarText = a.getBoolean(R.styleable.BarGraph_barShowText, true); + mShowPopup = a.getBoolean(R.styleable.BarGraph_barShowPopup, true); + } + + public void setShowAxis(boolean show) { + mShowAxis = show; + } + + public void setShowAxisLabel(boolean show) { + mShowAxisLabel = show; + } + + public void setShowBarText(boolean show) { + mShowBarText = show; + } + + public void setShowPopup(boolean show) { + mShowPopup = show; + } + + public void setBars(ArrayList points) { + mBars = points; + postInvalidate(); + } + + public ArrayList getBars() { + return mBars; + } + + public void setAxisColor(int axisColor) { + mAxisColor = axisColor; + } + + public void onDraw(Canvas canvas) { + final Resources resources = getContext().getResources(); + + canvas.drawColor(Color.TRANSPARENT); + NinePatchDrawable popup = (NinePatchDrawable) resources.getDrawable(R.drawable.popup_black); + + float maxValue = 0; + float padding = 7 * resources.getDisplayMetrics().density; + float bottomPadding = 30 * resources.getDisplayMetrics().density; + + float usableHeight; + if (mShowBarText) { + mPaint.setTextSize(VALUE_FONT_SIZE * resources.getDisplayMetrics().scaledDensity); + mPaint.getTextBounds("$", 0, 1, mTextRect); + if (mShowPopup) { + usableHeight = getHeight() - bottomPadding + - Math.abs(mTextRect.top - mTextRect.bottom) + - 24 * resources.getDisplayMetrics().density; + } else { + usableHeight = getHeight() - bottomPadding + - Math.abs(mTextRect.top - mTextRect.bottom) + - 18 * resources.getDisplayMetrics().density; + } + } else { + usableHeight = getHeight() - bottomPadding; + } + + // Draw x-axis line + if (mShowAxis) { + mPaint.setColor(mAxisColor); + mPaint.setStrokeWidth(2 * resources.getDisplayMetrics().density); + mPaint.setAntiAlias(true); + canvas.drawLine(0, + getHeight() - bottomPadding + 10 * resources.getDisplayMetrics().density, + getWidth(), + getHeight() - bottomPadding + 10 * resources.getDisplayMetrics().density, + mPaint); + } + //Determine ideal bar size with number of bars at end not deleted + + int insertCount = 0; + int deleteCount = 0; + for (Bar bar :mBars) + { + if (bar.mAnimateSpecial ==ANIMATE_INSERT) + insertCount++; + + if (bar.mAnimateSpecial ==ANIMATE_DELETE) + deleteCount++; + } + int specialCount = insertCount + deleteCount; + float barWidthHelper = (getWidth() - (padding * 2) * (mBars.size()-insertCount)) / (mBars.size()-insertCount); + float insertHelper = (getWidth() - (padding * 2) * (mBars.size()-deleteCount)) / (mBars.size()-deleteCount); + float specialWidthTotal = 0; + + int count = 0; + float barWidths [] = new float[mBars.size()]; + for (final Bar bar : mBars) { //calculate total widths of bars being inserted/deleted + if (bar.mAnimateSpecial == ANIMATE_INSERT) { + barWidths[count] = (int) (getAnimatedFractionSafe() * insertHelper); + specialWidthTotal += barWidths[count]; + + } + else if (bar.mAnimateSpecial == ANIMATE_DELETE){ + barWidths[count] = (int) ( (1-getAnimatedFractionSafe()) * barWidthHelper); + specialWidthTotal += barWidths[count]; + } + count++; + } + specialWidthTotal += (deleteCount * (padding *2 *(1-getAnimationFraction()))); + specialWidthTotal += (insertCount * (padding *2 *getAnimationFraction())); + int normalCount = mBars.size() - specialCount; + //calculate the width of the exsisting normal bars + float barWidth = (getWidth() - specialWidthTotal - (padding * 2 *normalCount)) / (normalCount);//calculate regular widths + float defaultBarWidth = barWidth; + for (int i = 0; i maxValue) { + maxValue = bar.getValue(); + } + } + if (maxValue == 0) { + maxValue = 1; + } + } + + count = 0; + // Calculate the maximum text size for all the axis labels without regard to animation state so text doesn't jitter. + // TODO there's probably a better way to do this. + mPaint.setTextSize(AXIS_LABEL_FONT_SIZE + * resources.getDisplayMetrics().scaledDensity); + for (final Bar bar : mBars) { + int left = (int) ((padding * 2) * count + padding + barWidth * count); + int right = (int) ((padding * 2) * count + padding + barWidth * (count + 1)); + int width = (int)(defaultBarWidth + (padding *2)); + float textWidth = mPaint.measureText(bar.getName()); + // Decrease text size to fit and not overlap with other labels. + while (right -left + (padding * LABEL_PADDING_MULTIPLIER) < textWidth) { + mPaint.setTextSize(mPaint.getTextSize() - 1); + float newTextWidth = mPaint.measureText(bar.getName()); + if (textWidth == newTextWidth) break; + textWidth =newTextWidth; + } + count++; + } + // Save it to use later + float labelTextSize = mPaint.getTextSize(); + + count = 0; + int oldright = (int) (padding *-1); + int alpha = 255;//for bar color. Max values is bar.getColorAlpha + int popupAlpha = 255;// for bar popup and text. Max value is 255; + SparseArray valueTextSizes = new SparseArray(); + for (final Bar bar : mBars) { + //Set alpha and width percentage if inserting or deleting + if (isAnimating()){ + if (bar.mAnimateSpecial == ANIMATE_INSERT) { + alpha = ((int) (getAnimatedFractionSafe() * bar.getColorAlpha())); + popupAlpha = ((int) (getAnimatedFractionSafe() * 255)); + } + else if (bar.mAnimateSpecial == ANIMATE_DELETE){ + alpha = ((int) ((1 - getAnimatedFractionSafe()) * bar.getColorAlpha())); + popupAlpha = ((int) ((1- getAnimatedFractionSafe()) * 255)); + } + else { + alpha = bar.getColorAlpha(); + popupAlpha = 255; + } + } + else { + mPaint.setAlpha(bar.getColorAlpha()); + popupAlpha = 255; + } + barWidth = barWidths[count]; + // Set bar bounds + int left = (int) (oldright + (padding * 2 * + (bar.mAnimateSpecial ==ANIMATE_DELETE ? 1-getAnimationFraction()://scale padding by animation time same as bar width + bar.mAnimateSpecial == ANIMATE_INSERT ? getAnimationFraction() + :1))); + int top = (int) (getHeight() - bottomPadding + - (usableHeight * (bar.getValue() / maxValue))); + int right = (int) (left + barWidth ); + int bottom = (int) (getHeight() - bottomPadding); + oldright = right; + mBoundsRect.set(left, top, right, bottom); + + // Draw bar + if (count == mSelectedIndex && null != mListener) { + mPaint.setColor(bar.getSelectedColor()); + } else { + mPaint.setColor(bar.getColor()); + } + if (isAnimating()) mPaint.setAlpha(alpha); + canvas.drawRect(mBoundsRect, mPaint); + + // Create selection region + Path p = bar.getPath(); + p.reset(); + p.addRect(mBoundsRect.left, + mBoundsRect.top, + mBoundsRect.right, + mBoundsRect.bottom, + Path.Direction.CW); + bar.getRegion().set(mBoundsRect.left, + mBoundsRect.top, + mBoundsRect.right, + mBoundsRect.bottom); + + // Draw x-axis label text + if (mShowAxisLabel) { + mPaint.setColor(bar.getLabelColor()); + mPaint.setTextSize(labelTextSize); + if (isAnimating()) mPaint.setAlpha(alpha); + float textWidth = mPaint.measureText(bar.getName()); + int x = (int) (((mBoundsRect.left + mBoundsRect.right) / 2) - (textWidth / 2)); + int y = (int) (getHeight() - 3 * resources.getDisplayMetrics().scaledDensity); + canvas.drawText(bar.getName(), x, y, mPaint); + } + + // Draw value text + if (mShowBarText) { + mPaint.setTextSize(VALUE_FONT_SIZE + * resources.getDisplayMetrics().scaledDensity); + mPaint.setColor(bar.getValueColor()); + if (isAnimating()) mPaint.setAlpha(popupAlpha); + mPaint.getTextBounds(bar.getValueString(), 0, 1, mTextRect); + + int boundLeft = (int) (((mBoundsRect.left + mBoundsRect.right) / 2) + - (mPaint.measureText(bar.getValueString()) / 2) + - 10 * resources.getDisplayMetrics().density); + int boundTop = (int) (mBoundsRect.top + (mTextRect.top - mTextRect.bottom) + - 18 * resources.getDisplayMetrics().density); + int boundRight = (int) (((mBoundsRect.left + mBoundsRect.right) / 2) + + (mPaint.measureText(bar.getValueString()) / 2) + + 10 * resources.getDisplayMetrics().density); + + // Limit popup width to bar width + if (boundLeft < mBoundsRect.left) { + boundLeft = mBoundsRect.left - ((int) padding / 2); + } + if (boundRight > mBoundsRect.right) { + boundRight = mBoundsRect.right + ((int) padding / 2); + } + + if (mShowPopup) { + if (isAnimating()) popup.setAlpha(popupAlpha); + popup.setBounds(boundLeft, boundTop, boundRight, mBoundsRect.top); + popup.draw(canvas); + } + + // Check cache to see if we've calculated value text size for bars that aren't being inserted/deleted. + // Not 100% accurate with non monospace fonts but close enough + // This is actually performance critical for 10+ bars. + if (bar.mAnimateSpecial == ANIMATE_NORMAL) { + if (0 > valueTextSizes.indexOfKey(bar.getValueString().length())) {//cache miss + while (mPaint.measureText(bar.getValueString()) > boundRight - boundLeft) { + mPaint.setTextSize(mPaint.getTextSize() - (float) 1); + } + valueTextSizes.put(bar.getValueString().length(), mPaint.getTextSize());//cache save + } else {//cache hit + mPaint.setTextSize(valueTextSizes.get(bar.getValueString().length())); + } + } //for bars inserting/deleting, do the math everytime without a cache. + else + while (mPaint.measureText(bar.getValueString()) > boundRight - boundLeft) { + mPaint.setTextSize(mPaint.getTextSize() - (float) 1); + } + + + if (isAnimating()) mPaint.setAlpha(popupAlpha); + canvas.drawText(bar.getValueString(), + (int) (((mBoundsRect.left + mBoundsRect.right) / 2) + - (mPaint.measureText(bar.getValueString())) / 2), + mBoundsRect.top - (mBoundsRect.top - boundTop) / 2f + + (float) Math.abs(mTextRect.top - mTextRect.bottom) / 2f * 0.7f, + mPaint + ); + } + count++; + } + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + + Point point = new Point(); + point.x = (int) event.getX(); + point.y = (int) event.getY(); + + int count = 0; + Region r = new Region(); + for (Bar bar : mBars) { + r.setPath(bar.getPath(), bar.getRegion()); + switch (event.getAction()) { + default: + break; + case MotionEvent.ACTION_DOWN: + if (r.contains(point.x, point.y)) { + mSelectedIndex = count; + postInvalidate(); + } + break; + case MotionEvent.ACTION_UP: + if (count == mSelectedIndex + && mListener != null + && r.contains(point.x, point.y)) { + mListener.onClick(mSelectedIndex); + } + break; + } + count++; + } + // Reset selection + if (MotionEvent.ACTION_UP == event.getAction() + || MotionEvent.ACTION_CANCEL == event.getAction()) { + mSelectedIndex = -1; + postInvalidate(); + } + return true; + } + + public void setOnBarClickedListener(OnBarClickedListener listener) { + mListener = listener; + } + + + @Override + public int getDuration() { + return mDuration; + } + + @Override + public void setDuration(int duration) {mDuration = duration;} + + @Override + public Interpolator getInterpolator() { + return mInterpolator; + } + + /** + * Make sure your interpolator ends at exactly 1.0 (Bounce interpolator doesnt) + * or else call makeValueString(int precision) on each bar in onAnimationEnd so the value label will be the goal value. + * @param interpolator + */ + @Override + public void setInterpolator(Interpolator interpolator) {mInterpolator = interpolator;} + + public int getmValueStringPrecision() { + return mValueStringPrecision; + } + + public void setValueStringPrecision(int valueStringPrecision) {mValueStringPrecision = valueStringPrecision;} + + public long getValueStringUpdateInterval() { + return mValueStringUpdateInterval; + } + + public void setValueStringUpdateInterval(long valueStringUpdateInterval) {mValueStringUpdateInterval = valueStringUpdateInterval;} + + @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1) + @Override + public boolean isAnimating() { + if(mValueAnimator != null) + return mValueAnimator.isRunning(); + return false; + } + @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1) + private float getAnimationFraction(){ + if (mValueAnimator != null && isAnimating()) + return mValueAnimator.getAnimatedFraction(); + else return 1f; + } + private float getAnimatedFractionSafe(){ + float f = getAnimationFraction(); + if (f >1) return 1; + if (f < 0) return 0; + else return f; + } + @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1) + @Override + public boolean cancelAnimating() { + if (mValueAnimator != null) + mValueAnimator.cancel(); + return false; + } + + /** + * Cancels then starts an animation to goal values, inserting or deleting bars. + */ + @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1) + @Override + public void animateToGoalValues() { + if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1){ + Log.e("HoloGraphLibrary compatibility error", "Animation not supported on api level 11 and below. Returning without animating."); + return; + } + if (mValueAnimator != null) + mValueAnimator.cancel(); + + mOldMaxValue = 0; + mGoalMaxValue = 0; + for (Bar b : mBars) { + b.setOldValue(b.getValue()); + mOldMaxValue = Math.max(mOldMaxValue, b.getValue()); + mGoalMaxValue = Math.max(mGoalMaxValue, b.getGoalValue()); + } + mMaxValue = mOldMaxValue; + ValueAnimator va = ValueAnimator.ofFloat(0,1); + mValueAnimator = va; + va.setDuration(getDuration()); + if (mInterpolator == null) mInterpolator = new LinearInterpolator(); + va.setInterpolator(mInterpolator); + if (mAnimationListener != null) va.addListener(mAnimationListener); + mLastTimeValueStringsUpdated = System.currentTimeMillis(); + va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + float f = animation.getAnimatedFraction(); + // Log.d("f", String.valueOf(f)); + + for (Bar b : mBars) { + float x = b.getGoalValue() - b.getOldValue(); + b.setValue(b.getOldValue() + (x * f)); + float xMax = mGoalMaxValue - mOldMaxValue; + mMaxValue = mOldMaxValue + (xMax * f); + } + long now = System.currentTimeMillis(); + //change value string after interval or when animation is at end point. + if ((mLastTimeValueStringsUpdated + mValueStringUpdateInterval < now) || f==1f) + { + for (Bar b : mBars) + b.makeValueString(mValueStringPrecision); + mLastTimeValueStringsUpdated = now; + } + postInvalidate(); + }}); + va.start(); + + } + + + + @Override + public void setAnimationListener(Animator.AnimatorListener animationListener) { + mAnimationListener = animationListener; + + } + + public interface OnBarClickedListener { + abstract void onClick(int index); + } +} diff --git a/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/HoloGraphAnimate.java b/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/HoloGraphAnimate.java new file mode 100644 index 00000000..a4b1e1c2 --- /dev/null +++ b/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/HoloGraphAnimate.java @@ -0,0 +1,24 @@ +package com.echo.holographlibrary; + +import android.animation.Animator; +import android.view.animation.Interpolator; + +/** + * Created by DouglasW on 6/8/2014. + */ +public interface HoloGraphAnimate { + + final int ANIMATE_NORMAL = 0; + final int ANIMATE_INSERT = 1; + final int ANIMATE_DELETE = 2; + int getDuration(); + void setDuration(int duration); + + Interpolator getInterpolator(); + void setInterpolator(Interpolator interpolator); + + boolean isAnimating(); + boolean cancelAnimating(); + void animateToGoalValues(); + void setAnimationListener(Animator.AnimatorListener animationListener); +} diff --git a/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/Line.java b/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/Line.java new file mode 100644 index 00000000..cb669b9d --- /dev/null +++ b/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/Line.java @@ -0,0 +1,116 @@ +/* + * Created by Daniel Nadeau + * daniel.nadeau01@gmail.com + * danielnadeau.blogspot.com + * + * Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ + +package com.echo.holographlibrary; + +import java.util.ArrayList; + +public class Line { + private ArrayList mPoints = new ArrayList(); + private int mColor; + private boolean mShowPoints = true; + // 6 has been the default prior to the addition of custom stroke widths + private int mStrokeWidth = 6; + // Since this is a new addition, it has to default to false to be backwards compatible + private boolean mUseDips = false; + + + public boolean isUsingDips() { + return mUseDips; + } + + public void setUsingDips(boolean treatSizesAsDips) { + mUseDips = treatSizesAsDips; + } + + public int getStrokeWidth() { + return mStrokeWidth; + } + + public void setStrokeWidth(int strokeWidth) { + if (strokeWidth < 0) { + throw new IllegalArgumentException("strokeWidth must not be less than zero"); + } + mStrokeWidth = strokeWidth; + } + + public int getColor() { + return mColor; + } + + public void setColor(int color) { + mColor = color; + } + + public ArrayList getPoints() { + return mPoints; + } + + public void setPoints(ArrayList points) { + mPoints = points; + } + + public void addPoint(LinePoint point) { + LinePoint p; + for (int i = 0; i < mPoints.size(); i++) { + p = mPoints.get(i); + if (point.getX() < p.getX()) { + mPoints.add(i, point); + return; + } + } + mPoints.add(point); + } + + public void removePoint(LinePoint point) { + mPoints.remove(point); + } + + public LinePoint getPoint(int index) { + return mPoints.get(index); + } + + public LinePoint getPoint(float x, float y) { + LinePoint p; + for (int i = 0; i < mPoints.size(); i++) { + p = mPoints.get(i); + if (p.getX() == x && p.getY() == y) { + return p; + } + } + return null; + } + + public int getSize() { + return mPoints.size(); + } + + public boolean isShowingPoints() { + return mShowPoints; + } + + public void setShowingPoints(boolean showPoints) { + mShowPoints = showPoints; + } + +} diff --git a/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/LineGraph.java b/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/LineGraph.java new file mode 100644 index 00000000..9e36869d --- /dev/null +++ b/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/LineGraph.java @@ -0,0 +1,573 @@ +/* + * Created by Daniel Nadeau + * daniel.nadeau01@gmail.com + * danielnadeau.blogspot.com + * + * Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ + +package com.echo.holographlibrary; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.Path.Direction; +import android.graphics.Point; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.graphics.Region; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.MotionEvent; +import android.view.View; + +import java.util.ArrayList; + +public class LineGraph extends View { + + private static final int DEFAULT_PADDING = 10; + private final int mDipPadding; + private final int mFillColor; + private final int mAxisColor; + private final float mStrokeWidth; + private final int mStrokeSpacing; + private ArrayList mLines = new ArrayList(); + private Paint mPaint = new Paint(); + private float mMinY = 0, mMinX = 0; + private float mMaxY = 0, mMaxX = 0; + private double mRangeYRatio = 0; + private double mRangeXRatio = 0; + private boolean mUserSetMaxX = false; + private int mLineToFill = -1; + private int mSelectedIndex = -1; + private OnPointClickedListener mListener; + private Bitmap mFullImage; + // Since this is a new addition, it has to default to false to be backwards compatible + private boolean mUseDips; + private Path mPath = new Path(); + private PorterDuffXfermode mXfermode = new PorterDuffXfermode(PorterDuff.Mode.CLEAR); + private Canvas mCanvas; + + public LineGraph(Context context) { + this(context, null); + } + + public LineGraph(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public LineGraph(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + mDipPadding = getPixelForDip(DEFAULT_PADDING); + + TypedArray a = context.getTheme().obtainStyledAttributes( + attrs, R.styleable.LineGraph, 0, 0); + mFillColor = a.getColor(R.styleable.LineGraph_lineStrokeColor, Color.BLACK); + mAxisColor = a.getColor(R.styleable.LineGraph_lineAxisColor, Color.LTGRAY); + mStrokeWidth = a.getDimension(R.styleable.LineGraph_lineStrokeWidth, 2); + mStrokeSpacing = a.getDimensionPixelSize(R.styleable.LineGraph_lineStrokeSpacing, 10); + mUseDips = a.getBoolean(R.styleable.LineGraph_lineUseDip, false); + } + + public boolean isUsingDips() { + return mUseDips; + } + + public void setUsingDips(boolean treatSizesAsDips) { + mUseDips = treatSizesAsDips; + } + + public void removeAllLines() { + while (mLines.size() > 0) { + mLines.remove(0); + } + postInvalidate(); + } + + public void addLine(Line line) { + mLines.add(line); + postInvalidate(); + } + + public void addPointToLine(int lineIndex, double x, double y) { + addPointToLine(lineIndex, (float) x, (float) y); + } + + public void addPointToLine(int lineIndex, float x, float y) { + LinePoint p = new LinePoint(x, y); + + addPointToLine(lineIndex, p); + } + + public double getRangeYRatio() { + return mRangeYRatio; + } + + public void setRangeYRatio(double rr) { + mRangeYRatio = rr; + } + + public double getRangeXRatio() { + return mRangeXRatio; + } + + public void setRangeXRatio(double rr) { + mRangeXRatio = rr; + } + + public void addPointToLine(int lineIndex, LinePoint point) { + Line line = getLine(lineIndex); + line.addPoint(point); + mLines.set(lineIndex, line); + resetLimits(); + postInvalidate(); + } + + public void addPointsToLine(int lineIndex, LinePoint[] points) { + Line line = getLine(lineIndex); + for (LinePoint point : points) { + line.addPoint(point); + } + mLines.set(lineIndex, line); + resetLimits(); + postInvalidate(); + } + + public void removeAllPointsAfter(int lineIndex, double x) { + removeAllPointsBetween(lineIndex, x, getMaxX()); + } + + public void removeAllPointsBefore(int lineIndex, double x) { + removeAllPointsBetween(lineIndex, getMinX(), x); + } + + public void removeAllPointsBetween(int lineIndex, double startX, double finishX) { + Line line = getLine(lineIndex); + LinePoint[] pts = new LinePoint[line.getPoints().size()]; + pts = line.getPoints().toArray(pts); + for (LinePoint point : pts) { + if (point.getX() >= startX && point.getX() <= finishX) { + line.removePoint(point); + } + } + mLines.set(lineIndex, line); + resetLimits(); + postInvalidate(); + } + + public void removePointsFromLine(int lineIndex, LinePoint[] points) { + Line line = getLine(lineIndex); + for (LinePoint point : points) { + line.removePoint(point); + } + mLines.set(lineIndex, line); + resetLimits(); + postInvalidate(); + } + + public void removePointFromLine(int lineIndex, float x, float y) { + LinePoint p = null; + Line line = getLine(lineIndex); + p = line.getPoint(x, y); + removePointFromLine(lineIndex, p); + } + + public void removePointFromLine(int lineIndex, LinePoint point) { + Line line = getLine(lineIndex); + line.removePoint(point); + mLines.set(lineIndex, line); + resetLimits(); + postInvalidate(); + } + + public void resetYLimits() { + float range = getMaxY() - getMinY(); + setRangeY(getMinY() - range * getRangeYRatio(), getMaxY() + range * getRangeYRatio()); + } + + public void resetXLimits() { + float range = getMaxX() - getMinX(); + setRangeX(getMinX() - range * getRangeXRatio(), getMaxX() + range * getRangeXRatio()); + } + + public void resetLimits() { + resetYLimits(); + resetXLimits(); + } + + public ArrayList getLines() { + return mLines; + } + + public void setLineToFill(int indexOfLine) { + mLineToFill = indexOfLine; + postInvalidate(); + } + + public int getLineToFill() { + return mLineToFill; + } + + public void setLines(ArrayList lines) { + mLines = lines; + } + + public Line getLine(int index) { + return mLines.get(index); + } + + public int getSize() { + return mLines.size(); + } + + public void setRangeY(float min, float max) { + mMinY = min; + mMaxY = max; + } + + private void setRangeY(double min, double max) { + mMinY = (float) min; + mMaxY = (float) max; + } + + public void setRangeX(float min, float max) { + mMinX = min; + mMaxX = max; + mUserSetMaxX = true; + } + + private void setRangeX(double min, double max) { + mMinX = (float) min; + mMaxX = (float) max; + } + + public float getMaxY() { + float max = mLines.get(0).getPoint(0).getY(); + for (Line line : mLines) { + for (LinePoint point : line.getPoints()) { + max = point.getY() > max ? point.getY() : max; + } + } + mMaxY = max; + return mMaxY; + } + + public float getMinY() { + float min = mLines.get(0).getPoint(0).getY(); + for (Line line : mLines) { + for (LinePoint point : line.getPoints()) { + min = point.getY() < min ? point.getY() : min; + } + } + mMinY = min; + return mMinY; + } + + public float getMinLimY() { + return mMinY; + } + + public float getMaxLimY() { + return mMaxY; + } + + public float getMinLimX() { + return mMinX; + } + + public float getMaxLimX() { + if (mUserSetMaxX) { + return mMaxX; + } else { + return getMaxX(); + } + } + + public float getMaxX() { + float max = mLines.size() > 0 ? mLines.get(0).getPoint(0).getX() : 0; + for (Line line : mLines) { + for (LinePoint point : line.getPoints()) { + max = point.getX() > max ? point.getX() : max; + } + } + mMaxX = max; + return mMaxX; + + } + + public float getMinX() { + float min = mLines.size() > 0 ? mLines.get(0).getPoint(0).getX() : 0; + for (Line line : mLines) { + for (LinePoint point : line.getPoints()) { + min = point.getX() < min ? point.getX() : min; + } + } + mMinX = min; + return mMinX; + } + + public void onDraw(Canvas canvas) { + if (null == mFullImage) { + mFullImage = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); + mCanvas = new Canvas(mFullImage); + } + + mCanvas.drawColor(Color.WHITE); + mPaint.reset(); + float bottomPadding = 10, topPadding = 10; + float sidePadding = 10; + if (mUseDips) { + bottomPadding = mDipPadding; + topPadding = mDipPadding; + sidePadding = mDipPadding; + } + float usableHeight = getHeight() - bottomPadding - topPadding; + float usableWidth = getWidth() - 2 * sidePadding; + + float maxY = getMaxLimY(); + float minY = getMinLimY(); + float maxX = getMaxLimX(); + float minX = getMinLimX(); + + + int lineCount = 0; + for (Line line : mLines) { + int count = 0; + float lastXPixels = 0, newYPixels = 0; + float lastYPixels = 0, newXPixels = 0; + + if (lineCount == mLineToFill) { + // Draw lines + mPaint.setColor(mFillColor); + mPaint.setStrokeWidth(mStrokeWidth); + for (int i = 10; i - getWidth() < getHeight(); i = i + mStrokeSpacing) { + mCanvas.drawLine( + i, getHeight() - bottomPadding, + 0, getHeight() - bottomPadding - i, mPaint); + } + + // Erase lines above the line + mPaint.reset(); + mPaint.setXfermode(mXfermode); + for (LinePoint p : line.getPoints()) { + float yPercent = (p.getY() - minY) / (maxY - minY); + float xPercent = (p.getX() - minX) / (maxX - minX); + if (count == 0) { + lastXPixels = sidePadding + (xPercent * usableWidth); + lastYPixels = getHeight() - bottomPadding - (usableHeight * yPercent); + mPath.moveTo(lastXPixels, lastYPixels); + } else { + newXPixels = sidePadding + (xPercent * usableWidth); + newYPixels = getHeight() - bottomPadding - (usableHeight * yPercent); + mPath.lineTo(newXPixels, newYPixels); + mPath.moveTo(lastXPixels, lastYPixels); + mPath.lineTo(newXPixels, newYPixels); + mPath.lineTo(newXPixels, 0); + mPath.lineTo(lastXPixels, 0); + mPath.close(); + mCanvas.drawPath(mPath, mPaint); + lastXPixels = newXPixels; + lastYPixels = newYPixels; + } + count++; + } + + mPath.reset(); + mPath.moveTo(0, getHeight() - bottomPadding); + mPath.lineTo(sidePadding, getHeight() - bottomPadding); + mPath.lineTo(sidePadding, 0); + mPath.lineTo(0, 0); + mPath.close(); + mCanvas.drawPath(mPath, mPaint); + + mPath.reset(); + mPath.moveTo(getWidth(), getHeight() - bottomPadding); + mPath.lineTo(getWidth() - sidePadding, getHeight() - bottomPadding); + mPath.lineTo(getWidth() - sidePadding, 0); + mPath.lineTo(getWidth(), 0); + mPath.close(); + + mCanvas.drawPath(mPath, mPaint); + } + lineCount++; + } + + // Draw x-axis line + mPaint.reset(); + mPaint.setColor(mAxisColor); + mPaint.setStrokeWidth(2 * getResources().getDisplayMetrics().density); + mPaint.setAntiAlias(true); + mCanvas.drawLine( + sidePadding, getHeight() - bottomPadding, + getWidth() - sidePadding, getHeight() - bottomPadding, mPaint); + mPaint.reset(); + + // Draw lines + for (Line line : mLines) { + int count = 0; + float lastXPixels = 0, newYPixels = 0; + float lastYPixels = 0, newXPixels = 0; + + mPaint.setColor(line.getColor()); + mPaint.setStrokeWidth(getStrokeWidth(line)); + + for (LinePoint p : line.getPoints()) { + float yPercent = (p.getY() - minY) / (maxY - minY); + float xPercent = (p.getX() - minX) / (maxX - minX); + if (count == 0) { + lastXPixels = sidePadding + (xPercent * usableWidth); + lastYPixels = getHeight() - bottomPadding - (usableHeight * yPercent); + } else { + newXPixels = sidePadding + (xPercent * usableWidth); + newYPixels = getHeight() - bottomPadding - (usableHeight * yPercent); + mCanvas.drawLine(lastXPixels, lastYPixels, newXPixels, newYPixels, mPaint); + lastXPixels = newXPixels; + lastYPixels = newYPixels; + } + count++; + } + } + + // Draw points + int pointCount = 0; + for (Line line : mLines) { + mPaint.setColor(line.getColor()); + mPaint.setStrokeWidth(getStrokeWidth(line)); + mPaint.setStrokeCap(Paint.Cap.ROUND); + + if (line.isShowingPoints()) { + for (LinePoint p : line.getPoints()) { + float yPercent = (p.getY() - minY) / (maxY - minY); + float xPercent = (p.getX() - minX) / (maxX - minX); + float xPixels = sidePadding + (xPercent * usableWidth); + float yPixels = getHeight() - bottomPadding - (usableHeight * yPercent); + + int outerRadius; + if (line.isUsingDips()) { + outerRadius = getPixelForDip(line.getStrokeWidth() + 4); + } else { + outerRadius = line.getStrokeWidth() + 4; + } + int innerRadius = outerRadius / 2; + + mPaint.setColor(p.getColor()); + mCanvas.drawCircle(xPixels, yPixels, outerRadius, mPaint); + mPaint.setColor(Color.WHITE); + mCanvas.drawCircle(xPixels, yPixels, innerRadius, mPaint); + + // Create selection region + Path path = p.getPath(); + path.reset(); + outerRadius *= 2; + path.addCircle(xPixels, yPixels, outerRadius, Direction.CW); + p.getRegion().set((int) (xPixels - outerRadius), + (int) (yPixels - outerRadius), + (int) (xPixels + outerRadius), + (int) (yPixels + outerRadius)); + + // Draw selection + if (mSelectedIndex == pointCount && mListener != null) { + mPaint.setColor(p.getSelectedColor()); + mCanvas.drawPath(p.getPath(), mPaint); + mPaint.setAlpha(255); + } + + pointCount++; + } + } + } + canvas.drawBitmap(mFullImage, 0, 0, null); + } + + private int getStrokeWidth(Line line) { + int strokeWidth; + if (line.isUsingDips()) { + strokeWidth = getPixelForDip(line.getStrokeWidth()); + } else { + strokeWidth = line.getStrokeWidth(); + } + return strokeWidth; + } + + private int getPixelForDip(int dipValue) { + return (int) TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_DIP, + dipValue, + getResources().getDisplayMetrics()); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + + Point point = new Point(); + point.x = (int) event.getX(); + point.y = (int) event.getY(); + + int count = 0; + int lineCount = 0; + int pointCount; + + Region r = new Region(); + for (Line line : mLines) { + pointCount = 0; + for (LinePoint p : line.getPoints()) { + r.setPath(p.getPath(), p.getRegion()); + + switch (event.getAction()) { + default: + break; + case MotionEvent.ACTION_DOWN: + if (r.contains(point.x, point.y)) { + mSelectedIndex = count; + postInvalidate(); + } + break; + case MotionEvent.ACTION_UP: + if (count == mSelectedIndex + && mListener != null + && r.contains(point.x, point.y)) { + mListener.onClick(lineCount, pointCount); + } + break; + } + pointCount++; + count++; + } + lineCount++; + } + // Reset selection + if (MotionEvent.ACTION_UP == event.getAction() + || MotionEvent.ACTION_CANCEL == event.getAction()) { + mSelectedIndex = -1; + postInvalidate(); + } + return true; + } + + public void setOnPointClickedListener(OnPointClickedListener listener) { + mListener = listener; + } + + public interface OnPointClickedListener { + abstract void onClick(int lineIndex, int pointIndex); + } +} diff --git a/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/LinePoint.java b/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/LinePoint.java new file mode 100644 index 00000000..c2bb4f1f --- /dev/null +++ b/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/LinePoint.java @@ -0,0 +1,107 @@ +/* + * Created by Daniel Nadeau + * daniel.nadeau01@gmail.com + * danielnadeau.blogspot.com + * + * Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ + +package com.echo.holographlibrary; + +import android.graphics.Path; +import android.graphics.Region; + +public class LinePoint { + + private final Path mPath = new Path(); + private final Region mRegion = new Region(); + private float mX; + private float mY; + private int mColor = 0xFF000000; + private int mSelectedColor = -1; + + public LinePoint() { + this(0, 0); + } + + public LinePoint(double x, double y) { + this((float) x, (float) y); + } + + public LinePoint(float x, float y) { + mX = x; + mY = y; + } + + public float getX() { + return mX; + } + + public void setX(float x) { + mX = x; + } + + public float getY() { + return mY; + } + + public void setY(float y) { + mY = y; + } + + public void setX(double x) { + mX = (float) x; + } + + public void setY(double y) { + mY = (float) y; + } + + public Region getRegion() { + return mRegion; + } + + public Path getPath() { + return mPath; + } + + @Override + public String toString() { + return "x= " + mX + ", y= " + mY; + } + + public int getColor() { + return mColor; + } + + public void setColor(int color) { + mColor = color; + } + + public int getSelectedColor() { + if (-1 == mSelectedColor) { + mSelectedColor = Utils.darkenColor(mColor); + mSelectedColor &= 0x80FFFFFF; + } + return mSelectedColor; + } + + public void setSelectedColor(int selectedColor) { + mSelectedColor = selectedColor; + } +} diff --git a/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/PieGraph.java b/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/PieGraph.java new file mode 100644 index 00000000..836e64b0 --- /dev/null +++ b/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/PieGraph.java @@ -0,0 +1,339 @@ +/* + * Created by Daniel Nadeau + * daniel.nadeau01@gmail.com + * danielnadeau.blogspot.com + * + * Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ + +package com.echo.holographlibrary; + +import android.animation.Animator; +import android.animation.ValueAnimator; +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.Point; +import android.graphics.RectF; +import android.graphics.Region; +import android.os.Build; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.animation.Animation; +import android.view.animation.Interpolator; +import android.view.animation.LinearInterpolator; + +import java.util.ArrayList; + +public class PieGraph extends View implements HoloGraphAnimate { + + private int mPadding; + private int mInnerCircleRatio; + private ArrayList mSlices = new ArrayList(); + private Paint mPaint = new Paint(); + private int mSelectedIndex = -1; + private OnSliceClickedListener mListener; + private boolean mDrawCompleted = false; + private RectF mRectF = new RectF(); + private Bitmap mBackgroundImage = null; + private Point mBackgroundImageAnchor = new Point(0,0); + private boolean mBackgroundImageCenter = false; + + + + private int mDuration = 300;//in ms + private Interpolator mInterpolator; + private Animator.AnimatorListener mAnimationListener; + private ValueAnimator mValueAnimator; + + public PieGraph(Context context) { + this(context, null); + } + + public PieGraph(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public PieGraph(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs); + + TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.PieGraph, 0, 0); + mInnerCircleRatio = a.getInt(R.styleable.PieGraph_pieInnerCircleRatio, 0); + mPadding = a.getDimensionPixelSize(R.styleable.PieGraph_pieSlicePadding, 0); + } + + public void onDraw(Canvas canvas) { + float midX, midY, radius, innerRadius; + + canvas.drawColor(Color.TRANSPARENT); + mPaint.reset(); + mPaint.setAntiAlias(true); + + if(mBackgroundImage != null) { + if(mBackgroundImageCenter) + mBackgroundImageAnchor.set( + getWidth() / 2 - mBackgroundImage.getWidth() / 2, + getHeight() / 2 - mBackgroundImage.getHeight() / 2 + ); + canvas.drawBitmap(mBackgroundImage, mBackgroundImageAnchor.x, mBackgroundImageAnchor.y, mPaint); + } + + float currentAngle = 270; + float currentSweep = 0; + float totalValue = 0; + + midX = getWidth() / 2; + midY = getHeight() / 2; + if (midX < midY) { + radius = midX; + } else { + radius = midY; + } + radius -= mPadding; + innerRadius = radius * mInnerCircleRatio / 255; + + for (PieSlice slice : mSlices) { + totalValue += slice.getValue(); + } + + int count = 0; + for (PieSlice slice : mSlices) { + Path p = slice.getPath(); + p.reset(); + + if (mSelectedIndex == count && mListener != null) { + mPaint.setColor(slice.getSelectedColor()); + } else { + mPaint.setColor(slice.getColor()); + } + currentSweep = (slice.getValue() / totalValue) * (360); + mRectF.set(midX - radius, midY - radius, midX + radius, midY + radius); + p.arcTo(mRectF, + currentAngle + mPadding, currentSweep - mPadding); + mRectF.set(midX - innerRadius, midY - innerRadius, + midX + innerRadius, midY + innerRadius); + p.arcTo(mRectF, + (currentAngle + mPadding) + (currentSweep - mPadding), + -(currentSweep - mPadding)); + p.close(); + + // Create selection region + Region r = slice.getRegion(); + r.set((int) (midX - radius), + (int) (midY - radius), + (int) (midX + radius), + (int) (midY + radius)); + canvas.drawPath(p, mPaint); + currentAngle = currentAngle + currentSweep; + + count++; + } + mDrawCompleted = true; + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (mDrawCompleted) { + Point point = new Point(); + point.x = (int) event.getX(); + point.y = (int) event.getY(); + + int count = 0; + Region r = new Region(); + for (PieSlice slice : mSlices) { + r.setPath(slice.getPath(), slice.getRegion()); + switch (event.getAction()) { + default: + break; + case MotionEvent.ACTION_DOWN: + if (r.contains(point.x, point.y)) { + mSelectedIndex = count; + postInvalidate(); + } + break; + case MotionEvent.ACTION_UP: + if (count == mSelectedIndex + && mListener != null + && r.contains(point.x, point.y)) { + mListener.onClick(mSelectedIndex); + } + break; + } + count++; + } + } + // Case we click somewhere else, also get feedback! + if(MotionEvent.ACTION_UP == event.getAction() + && mSelectedIndex == -1 + && mListener != null) { + mListener.onClick(mSelectedIndex); + } + // Reset selection + if (MotionEvent.ACTION_UP == event.getAction() + || MotionEvent.ACTION_CANCEL == event.getAction()) { + mSelectedIndex = -1; + postInvalidate(); + } + return true; + } + + public Bitmap getBackgroundBitmap() { + return mBackgroundImage; + } + + public void setBackgroundBitmap(Bitmap backgroundBitmap, int pos_x, int pos_y) { + mBackgroundImage = backgroundBitmap; + mBackgroundImageAnchor.set(pos_x, pos_y); + postInvalidate(); + } + + public void setBackgroundBitmap(Bitmap backgroundBitmap) { + mBackgroundImageCenter = true; + mBackgroundImage = backgroundBitmap; + postInvalidate(); + } + + /** + * sets padding + * @param padding + */ + public void setPadding(int padding) { + mPadding = padding; + postInvalidate(); + } + + public void setInnerCircleRatio(int innerCircleRatio) { + mInnerCircleRatio = innerCircleRatio; + postInvalidate(); + } + + public ArrayList getSlices() { + return mSlices; + } + + public void setSlices(ArrayList slices) { + mSlices = slices; + postInvalidate(); + } + + public PieSlice getSlice(int index) { + return mSlices.get(index); + } + + public void addSlice(PieSlice slice) { + mSlices.add(slice); + postInvalidate(); + } + + public void setOnSliceClickedListener(OnSliceClickedListener listener) { + mListener = listener; + } + + public void removeSlices() { + mSlices.clear(); + postInvalidate(); + } + + @Override + public int getDuration() { + return mDuration; + } + + @Override + public void setDuration(int duration) {mDuration = duration;} + + @Override + public Interpolator getInterpolator() { + return mInterpolator; + } + + @Override + public void setInterpolator(Interpolator interpolator) {mInterpolator = interpolator;} + + + @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1) + @Override + public boolean isAnimating() { + if(mValueAnimator != null) + return mValueAnimator.isRunning(); + return false; + } + + @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1) + @Override + public boolean cancelAnimating() { + if (mValueAnimator != null) + mValueAnimator.cancel(); + return false; + } + + + /** + * Stops running animation and starts a new one, animating each slice from their current to goal value. + * If removing a slice, consider animating to 0 then removing in onAnimationEnd listener. + * Default inerpolator is linear; constant speed. + */ + @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1) + @Override + public void animateToGoalValues() { + if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1){ + Log.e("HoloGraphLibrary compatibility error", "Animation not supported on api level 12 and below. Returning without animating."); + return; + } + if (mValueAnimator != null) + mValueAnimator.cancel(); + + for (PieSlice s : mSlices) + s.setOldValue(s.getValue()); + ValueAnimator va = ValueAnimator.ofFloat(0,1); + mValueAnimator = va; + va.setDuration(getDuration()); + if (mInterpolator == null) mInterpolator = new LinearInterpolator(); + va.setInterpolator(mInterpolator); + if (mAnimationListener != null) va.addListener(mAnimationListener); + va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + float f = Math.max(animation.getAnimatedFraction(), 0.01f);//avoid blank frames; never multiply values by 0 + // Log.d("f", String.valueOf(f)); + for (PieSlice s : mSlices) { + float x = s.getGoalValue() - s.getOldValue(); + s.setValue(s.getOldValue() + (x * f)); + } + postInvalidate(); + }}); + va.start(); + + } + + + + @Override + public void setAnimationListener(Animator.AnimatorListener animationListener) { mAnimationListener = animationListener;} + + public interface OnSliceClickedListener { + public abstract void onClick(int index); + } +} diff --git a/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/PieSlice.java b/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/PieSlice.java new file mode 100644 index 00000000..b80d8a89 --- /dev/null +++ b/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/PieSlice.java @@ -0,0 +1,92 @@ +/* + * Created by Daniel Nadeau + * daniel.nadeau01@gmail.com + * danielnadeau.blogspot.com + * + * Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ + +package com.echo.holographlibrary; + +import android.graphics.Path; +import android.graphics.Region; + +public class PieSlice { + + private final Path mPath = new Path(); + private final Region mRegion = new Region(); + private int mColor = 0xFF33B5E5; + private int mSelectedColor = -1; + private float mValue; + private float mOldValue; + private float mGoalValue; + private String mTitle; + + public String getTitle() { + return mTitle; + } + + public void setTitle(String title) { + mTitle = title; + } + + public int getColor() { + return mColor; + } + + public void setColor(int color) { + mColor = color; + } + + public int getSelectedColor() { + if (-1 == mSelectedColor) mSelectedColor = Utils.darkenColor(mColor); + return mSelectedColor; + } + + public void setSelectedColor(int selectedColor) { + mSelectedColor = selectedColor; + } + + public float getValue() { + return mValue; + } + + public void setValue(float value) { + mValue = value; + } + + public float getOldValue() { + return mOldValue; + } + + public void setOldValue(float oldValue) { mOldValue = oldValue; } + + public float getGoalValue() { + return mGoalValue; + } + + public void setGoalValue(float goalValue) { mGoalValue = goalValue; } + + public Path getPath() { + return mPath; + } + + public Region getRegion() { + return mRegion; + } +} diff --git a/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/Utils.java b/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/Utils.java new file mode 100644 index 00000000..b77615c0 --- /dev/null +++ b/LearnFromMap/holoGraphLibrary/src/main/java/com/echo/holographlibrary/Utils.java @@ -0,0 +1,16 @@ +package com.echo.holographlibrary; + +import android.graphics.Color; + +/** + * Created by sbaiget on 11/04/2014. + */ +public class Utils { + + public static int darkenColor(int color) { + float[] hsv = new float[3]; + Color.colorToHSV(color, hsv); + hsv[2] *= 0.8f; + return Color.HSVToColor(hsv); + } +} diff --git a/LearnFromMap/holoGraphLibrary/src/main/res/drawable-xhdpi/popup_black.9.png b/LearnFromMap/holoGraphLibrary/src/main/res/drawable-xhdpi/popup_black.9.png new file mode 100644 index 00000000..6b99b7a1 Binary files /dev/null and b/LearnFromMap/holoGraphLibrary/src/main/res/drawable-xhdpi/popup_black.9.png differ diff --git a/LearnFromMap/holoGraphLibrary/src/main/res/values/attrs.xml b/LearnFromMap/holoGraphLibrary/src/main/res/values/attrs.xml new file mode 100644 index 00000000..7979837c --- /dev/null +++ b/LearnFromMap/holoGraphLibrary/src/main/res/values/attrs.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/import-summary.txt b/LearnFromMap/import-summary.txt new file mode 100644 index 00000000..3158c42f --- /dev/null +++ b/LearnFromMap/import-summary.txt @@ -0,0 +1,208 @@ +ECLIPSE ANDROID PROJECT IMPORT SUMMARY +====================================== + +Manifest Merging: +----------------- +Your project uses libraries that provide manifests, and your Eclipse +project did not explicitly turn on manifest merging. In Android Gradle +projects, manifests are always merged (meaning that contents from your +libraries' manifests will be merged into the app manifest. If you had +manually copied contents from library manifests into your app manifest +you may need to remove these for the app to build correctly. + +Ignored Files: +-------------- +The following files were *not* copied into the new Gradle project; you +should evaluate whether these are still needed in your project and if +so manually move them: + +From HoloGraphLibrary: +* LICENSE.txt +* NOTICE.txt +* build.gradle +* proguard-project.txt +From LearnFromMap: +* Main.jpg +* Main.ucls +* ic_launcher-web.png +* javadoc.xml +* proguard-project.txt +* sequence diagram.useq +From volley_buildmlearn: +* Android.mk +* AndroidManifest.xml +* build.gradle +* build.xml +* custom_rules.xml +* proguard-project.txt +* proguard.cfg +* tests/ +* tests/Android.mk +* tests/AndroidManifest.xml +* tests/bin/ +* tests/bin/AndroidManifest.xml +* tests/bin/classes/ +* tests/bin/classes/com/ +* tests/bin/classes/com/android/ +* tests/bin/classes/com/android/volley/ +* tests/bin/classes/com/android/volley/CacheDispatcherTest.class +* tests/bin/classes/com/android/volley/NetworkDispatcherTest.class +* tests/bin/classes/com/android/volley/RequestQueueTest$1.class +* tests/bin/classes/com/android/volley/RequestQueueTest$DelayedRequest.class +* tests/bin/classes/com/android/volley/RequestQueueTest$OrderCheckingNetwork.class +* tests/bin/classes/com/android/volley/RequestQueueTest.class +* tests/bin/classes/com/android/volley/RequestTest$TestRequest.class +* tests/bin/classes/com/android/volley/RequestTest$UrlParseRequest.class +* tests/bin/classes/com/android/volley/RequestTest.class +* tests/bin/classes/com/android/volley/ResponseDeliveryTest.class +* tests/bin/classes/com/android/volley/mock/ +* tests/bin/classes/com/android/volley/mock/MockCache.class +* tests/bin/classes/com/android/volley/mock/MockHttpClient.class +* tests/bin/classes/com/android/volley/mock/MockHttpStack.class +* tests/bin/classes/com/android/volley/mock/MockHttpURLConnection.class +* tests/bin/classes/com/android/volley/mock/MockNetwork.class +* tests/bin/classes/com/android/volley/mock/MockRequest.class +* tests/bin/classes/com/android/volley/mock/MockResponseDelivery.class +* tests/bin/classes/com/android/volley/mock/TestRequest$Base.class +* tests/bin/classes/com/android/volley/mock/TestRequest$Delete.class +* tests/bin/classes/com/android/volley/mock/TestRequest$DeprecatedGet.class +* tests/bin/classes/com/android/volley/mock/TestRequest$DeprecatedPost.class +* tests/bin/classes/com/android/volley/mock/TestRequest$Get.class +* tests/bin/classes/com/android/volley/mock/TestRequest$Head.class +* tests/bin/classes/com/android/volley/mock/TestRequest$Options.class +* tests/bin/classes/com/android/volley/mock/TestRequest$Patch.class +* tests/bin/classes/com/android/volley/mock/TestRequest$PatchWithBody.class +* tests/bin/classes/com/android/volley/mock/TestRequest$Post.class +* tests/bin/classes/com/android/volley/mock/TestRequest$PostWithBody.class +* tests/bin/classes/com/android/volley/mock/TestRequest$Put.class +* tests/bin/classes/com/android/volley/mock/TestRequest$PutWithBody.class +* tests/bin/classes/com/android/volley/mock/TestRequest$Trace.class +* tests/bin/classes/com/android/volley/mock/TestRequest.class +* tests/bin/classes/com/android/volley/mock/WaitableQueue$MagicStopRequest.class +* tests/bin/classes/com/android/volley/mock/WaitableQueue.class +* tests/bin/classes/com/android/volley/tests/ +* tests/bin/classes/com/android/volley/tests/BuildConfig.class +* tests/bin/classes/com/android/volley/tests/R$attr.class +* tests/bin/classes/com/android/volley/tests/R$raw.class +* tests/bin/classes/com/android/volley/tests/R.class +* tests/bin/classes/com/android/volley/toolbox/ +* tests/bin/classes/com/android/volley/toolbox/BasicNetworkTest$1.class +* tests/bin/classes/com/android/volley/toolbox/BasicNetworkTest.class +* tests/bin/classes/com/android/volley/toolbox/ByteArrayPoolTest.class +* tests/bin/classes/com/android/volley/toolbox/DiskBasedCacheTest.class +* tests/bin/classes/com/android/volley/toolbox/HttpClientStackTest.class +* tests/bin/classes/com/android/volley/toolbox/HttpHeaderParserTest.class +* tests/bin/classes/com/android/volley/toolbox/HurlStackTest.class +* tests/bin/classes/com/android/volley/toolbox/ImageRequestTest.class +* tests/bin/classes/com/android/volley/toolbox/NetworkImageViewTest$MockImageLoader.class +* tests/bin/classes/com/android/volley/toolbox/NetworkImageViewTest.class +* tests/bin/classes/com/android/volley/toolbox/PoolingByteArrayOutputStreamTest.class +* tests/bin/classes/com/android/volley/utils/ +* tests/bin/classes/com/android/volley/utils/CacheTestUtils.class +* tests/bin/classes/com/android/volley/utils/ImmediateResponseDelivery$1.class +* tests/bin/classes/com/android/volley/utils/ImmediateResponseDelivery.class +* tests/gen/ +* tests/gen/com/ +* tests/gen/com/android/ +* tests/gen/com/android/volley/ +* tests/gen/com/android/volley/tests/ +* tests/gen/com/android/volley/tests/BuildConfig.java +* tests/gen/com/android/volley/tests/R.java +* tests/project.properties +* tests/res/ +* tests/res/raw/ +* tests/res/raw/large_jpeg_1024_500.jpg +* tests/src/ +* tests/src/com/ +* tests/src/com/android/ +* tests/src/com/android/volley/ +* tests/src/com/android/volley/CacheDispatcherTest.java +* tests/src/com/android/volley/NetworkDispatcherTest.java +* tests/src/com/android/volley/RequestQueueTest.java +* tests/src/com/android/volley/RequestTest.java +* tests/src/com/android/volley/ResponseDeliveryTest.java +* tests/src/com/android/volley/mock/ +* tests/src/com/android/volley/mock/MockCache.java +* tests/src/com/android/volley/mock/MockHttpClient.java +* tests/src/com/android/volley/mock/MockHttpStack.java +* tests/src/com/android/volley/mock/MockHttpURLConnection.java +* tests/src/com/android/volley/mock/MockNetwork.java +* tests/src/com/android/volley/mock/MockRequest.java +* tests/src/com/android/volley/mock/MockResponseDelivery.java +* tests/src/com/android/volley/mock/TestRequest.java +* tests/src/com/android/volley/mock/WaitableQueue.java +* tests/src/com/android/volley/toolbox/ +* tests/src/com/android/volley/toolbox/BasicNetworkTest.java +* tests/src/com/android/volley/toolbox/ByteArrayPoolTest.java +* tests/src/com/android/volley/toolbox/DiskBasedCacheTest.java +* tests/src/com/android/volley/toolbox/HttpClientStackTest.java +* tests/src/com/android/volley/toolbox/HttpHeaderParserTest.java +* tests/src/com/android/volley/toolbox/HurlStackTest.java +* tests/src/com/android/volley/toolbox/ImageRequestTest.java +* tests/src/com/android/volley/toolbox/NetworkImageViewTest.java +* tests/src/com/android/volley/toolbox/PoolingByteArrayOutputStreamTest.java +* tests/src/com/android/volley/utils/ +* tests/src/com/android/volley/utils/CacheTestUtils.java +* tests/src/com/android/volley/utils/ImmediateResponseDelivery.java + +Replaced Jars with Dependencies: +-------------------------------- +The importer recognized the following .jar files as third party +libraries and replaced them with Gradle dependencies instead. This has +the advantage that more explicit version information is known, and the +libraries can be updated automatically. However, it is possible that +the .jar file in your project was of an older version than the +dependency we picked, which could render the project not compileable. +You can disable the jar replacement in the import wizard and try again: + +android-support-v4.jar => com.android.support:support-v4:19.1.0 +android-support-v7-appcompat.jar => com.android.support:appcompat-v7:19.1.0 + +Replaced Libraries with Dependencies: +------------------------------------- +The importer recognized the following library projects as third party +libraries and replaced them with Gradle dependencies instead. This has +the advantage that more explicit version information is known, and the +libraries can be updated automatically. However, it is possible that +the source files in your project were of an older version than the +dependency we picked, which could render the project not compileable. +You can disable the library replacement in the import wizard and try +again: + +android-support-v7-appcompat => [com.android.support:appcompat-v7:19.1.0] +google-play-services_lib => [com.google.android.gms:play-services:+] + +Moved Files: +------------ +Android Gradle projects use a different directory structure than ADT +Eclipse projects. Here's how the projects were restructured: + +In HoloGraphLibrary: +* AndroidManifest.xml => holoGraphLibrary/src/main/AndroidManifest.xml +* res/ => holoGraphLibrary/src/main/res/ +* src/ => holoGraphLibrary/src/main/java/ +In volley_buildmlearn: +* src/ => volley_buildmlearn/src/main/java/ +In LearnFromMap: +* AndroidManifest.xml => learnFromMap/src/main/AndroidManifest.xml +* assets/ => learnFromMap/src/main/assets/ +* libs/simmetrics_jar_v1_6_2_d07_02_07.jar => learnFromMap/libs/simmetrics_jar_v1_6_2_d07_02_07.jar +* libs/sqliteassethelper-2.0.1.jar => learnFromMap/libs/sqliteassethelper-2.0.1.jar +* lint.xml => learnFromMap/lint.xml +* res/ => learnFromMap/src/main/res/ +* src/ => learnFromMap/src/main/java/ + +Next Steps: +----------- +You can now build the project. The Gradle project needs network +connectivity to download dependencies. + +Bugs: +----- +If for some reason your project does not build, and you determine that +it is due to a bug or limitation of the Eclipse to Gradle importer, +please file a bug at http://b.android.com with category +Component-Tools. + +(This import summary is for your information only, and can be deleted +after import once you are satisfied with the results.) diff --git a/LearnFromMap/learnFromMap/build.gradle b/LearnFromMap/learnFromMap/build.gradle new file mode 100644 index 00000000..484b4891 --- /dev/null +++ b/LearnFromMap/learnFromMap/build.gradle @@ -0,0 +1,32 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 19 + buildToolsVersion "22.0.1" + + defaultConfig { + applicationId "org.buildmlearn.learnfrommap" + minSdkVersion 9 + targetSdkVersion 19 + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' + } + } +} + +dependencies { + compile project(':volley_buildmlearn') + compile project(':holoGraphLibrary') + compile 'com.android.support:appcompat-v7:19.1.0' + compile 'com.google.android.gms:play-services:+' + compile files('libs/simmetrics_jar_v1_6_2_d07_02_07.jar') + compile files('libs/sqliteassethelper-2.0.1.jar') +} diff --git a/LearnFromMap/learnFromMap/learnFromMap.iml b/LearnFromMap/learnFromMap/learnFromMap.iml new file mode 100644 index 00000000..2e2cb17c --- /dev/null +++ b/LearnFromMap/learnFromMap/learnFromMap.iml @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/libs/simmetrics_jar_v1_6_2_d07_02_07.jar b/LearnFromMap/learnFromMap/libs/simmetrics_jar_v1_6_2_d07_02_07.jar new file mode 100644 index 00000000..17bf7118 Binary files /dev/null and b/LearnFromMap/learnFromMap/libs/simmetrics_jar_v1_6_2_d07_02_07.jar differ diff --git a/LearnFromMap/learnFromMap/libs/sqliteassethelper-2.0.1.jar b/LearnFromMap/learnFromMap/libs/sqliteassethelper-2.0.1.jar new file mode 100644 index 00000000..ee649de8 Binary files /dev/null and b/LearnFromMap/learnFromMap/libs/sqliteassethelper-2.0.1.jar differ diff --git a/LearnFromMap/learnFromMap/lint.xml b/LearnFromMap/learnFromMap/lint.xml new file mode 100644 index 00000000..8423c0ef --- /dev/null +++ b/LearnFromMap/learnFromMap/lint.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/AndroidManifest.xml b/LearnFromMap/learnFromMap/src/main/AndroidManifest.xml new file mode 100644 index 00000000..985761b1 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/AndroidManifest.xml @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/assets/Roboto_Black.ttf b/LearnFromMap/learnFromMap/src/main/assets/Roboto_Black.ttf new file mode 100644 index 00000000..9002aab5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/Roboto_Black.ttf differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/Roboto_Bold.ttf b/LearnFromMap/learnFromMap/src/main/assets/Roboto_Bold.ttf new file mode 100644 index 00000000..072b8429 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/Roboto_Bold.ttf differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/Roboto_Light.ttf b/LearnFromMap/learnFromMap/src/main/assets/Roboto_Light.ttf new file mode 100644 index 00000000..13bf13af Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/Roboto_Light.ttf differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/Roboto_Medium.ttf b/LearnFromMap/learnFromMap/src/main/assets/Roboto_Medium.ttf new file mode 100644 index 00000000..d0f6e2b6 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/Roboto_Medium.ttf differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/Roboto_Regular.ttf b/LearnFromMap/learnFromMap/src/main/assets/Roboto_Regular.ttf new file mode 100644 index 00000000..0ba95c98 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/Roboto_Regular.ttf differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/Roboto_Thin.ttf b/LearnFromMap/learnFromMap/src/main/assets/Roboto_Thin.ttf new file mode 100644 index 00000000..309c22d3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/Roboto_Thin.ttf differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/Roboto_ThinItalic.ttf b/LearnFromMap/learnFromMap/src/main/assets/Roboto_ThinItalic.ttf new file mode 100644 index 00000000..0b53ba4d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/Roboto_ThinItalic.ttf differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/databases/data_test12.db b/LearnFromMap/learnFromMap/src/main/assets/databases/data_test12.db new file mode 100644 index 00000000..ff26b8ba Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/databases/data_test12.db differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/2/0/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/2/0/0.jpg new file mode 100644 index 00000000..2d2aec27 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/2/0/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/2/0/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/2/0/1.jpg new file mode 100644 index 00000000..3689a9a3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/2/0/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/2/0/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/2/0/2.jpg new file mode 100644 index 00000000..53e03fc5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/2/0/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/2/0/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/2/0/3.jpg new file mode 100644 index 00000000..7269fd30 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/2/0/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/2/1/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/2/1/0.jpg new file mode 100644 index 00000000..ba9c7513 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/2/1/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/2/1/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/2/1/1.jpg new file mode 100644 index 00000000..fb24691c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/2/1/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/2/1/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/2/1/2.jpg new file mode 100644 index 00000000..3e8f1ccf Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/2/1/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/2/1/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/2/1/3.jpg new file mode 100644 index 00000000..fe769f8b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/2/1/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/2/2/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/2/2/0.jpg new file mode 100644 index 00000000..79788768 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/2/2/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/2/2/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/2/2/1.jpg new file mode 100644 index 00000000..72f2dcb3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/2/2/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/2/2/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/2/2/2.jpg new file mode 100644 index 00000000..a66a2a24 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/2/2/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/2/2/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/2/2/3.jpg new file mode 100644 index 00000000..f7f41202 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/2/2/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/2/3/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/2/3/0.jpg new file mode 100644 index 00000000..350a9ddb Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/2/3/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/2/3/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/2/3/1.jpg new file mode 100644 index 00000000..969254bb Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/2/3/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/2/3/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/2/3/2.jpg new file mode 100644 index 00000000..c14c3afa Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/2/3/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/2/3/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/2/3/3.jpg new file mode 100644 index 00000000..18149147 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/2/3/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/0/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/0/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/0/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/0/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/0/1.jpg new file mode 100644 index 00000000..74746247 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/0/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/0/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/0/2.jpg new file mode 100644 index 00000000..01f5fc7a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/0/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/0/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/0/3.jpg new file mode 100644 index 00000000..1ab44b94 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/0/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/0/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/0/4.jpg new file mode 100644 index 00000000..0c4d8bc3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/0/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/0/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/0/5.jpg new file mode 100644 index 00000000..2600113c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/0/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/0/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/0/6.jpg new file mode 100644 index 00000000..fbd71122 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/0/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/0/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/0/7.jpg new file mode 100644 index 00000000..3f4dd6a8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/0/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/1/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/1/0.jpg new file mode 100644 index 00000000..2b7bac40 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/1/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/1/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/1/1.jpg new file mode 100644 index 00000000..598499bd Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/1/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/1/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/1/2.jpg new file mode 100644 index 00000000..25dc5047 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/1/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/1/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/1/3.jpg new file mode 100644 index 00000000..54397498 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/1/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/1/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/1/4.jpg new file mode 100644 index 00000000..ff2a1407 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/1/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/1/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/1/5.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/1/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/1/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/1/6.jpg new file mode 100644 index 00000000..2d5f2596 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/1/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/1/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/1/7.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/1/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/2/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/2/0.jpg new file mode 100644 index 00000000..6e151245 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/2/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/2/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/2/1.jpg new file mode 100644 index 00000000..7f57ecc1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/2/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/2/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/2/2.jpg new file mode 100644 index 00000000..849a40b6 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/2/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/2/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/2/3.jpg new file mode 100644 index 00000000..8b7a564e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/2/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/2/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/2/4.jpg new file mode 100644 index 00000000..31e1f11a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/2/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/2/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/2/5.jpg new file mode 100644 index 00000000..2dcadbfe Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/2/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/2/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/2/6.jpg new file mode 100644 index 00000000..b169b135 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/2/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/2/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/2/7.jpg new file mode 100644 index 00000000..132c9d40 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/2/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/3/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/3/0.jpg new file mode 100644 index 00000000..2514997f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/3/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/3/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/3/1.jpg new file mode 100644 index 00000000..c9344cf5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/3/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/3/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/3/2.jpg new file mode 100644 index 00000000..6299fa80 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/3/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/3/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/3/3.jpg new file mode 100644 index 00000000..30770788 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/3/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/3/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/3/4.jpg new file mode 100644 index 00000000..cb7e825a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/3/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/3/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/3/5.jpg new file mode 100644 index 00000000..e0a59307 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/3/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/3/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/3/6.jpg new file mode 100644 index 00000000..282f9fa0 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/3/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/3/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/3/7.jpg new file mode 100644 index 00000000..f183384b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/3/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/4/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/4/0.jpg new file mode 100644 index 00000000..2f9d105b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/4/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/4/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/4/1.jpg new file mode 100644 index 00000000..9fe1c1c5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/4/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/4/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/4/2.jpg new file mode 100644 index 00000000..3ec06929 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/4/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/4/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/4/3.jpg new file mode 100644 index 00000000..1ec28755 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/4/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/4/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/4/4.jpg new file mode 100644 index 00000000..abc721cd Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/4/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/4/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/4/5.jpg new file mode 100644 index 00000000..af8717c8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/4/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/4/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/4/6.jpg new file mode 100644 index 00000000..a16f7dab Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/4/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/4/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/4/7.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/4/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/5/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/5/0.jpg new file mode 100644 index 00000000..d1ad8541 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/5/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/5/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/5/1.jpg new file mode 100644 index 00000000..4aafe391 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/5/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/5/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/5/2.jpg new file mode 100644 index 00000000..6b733604 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/5/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/5/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/5/3.jpg new file mode 100644 index 00000000..ac38f064 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/5/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/5/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/5/4.jpg new file mode 100644 index 00000000..0e1c39aa Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/5/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/5/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/5/5.jpg new file mode 100644 index 00000000..e2ccdec8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/5/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/5/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/5/6.jpg new file mode 100644 index 00000000..1299593c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/5/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/5/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/5/7.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/5/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/6/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/6/0.jpg new file mode 100644 index 00000000..bd3aa2a4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/6/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/6/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/6/1.jpg new file mode 100644 index 00000000..9d491cc9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/6/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/6/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/6/2.jpg new file mode 100644 index 00000000..9d9688f7 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/6/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/6/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/6/3.jpg new file mode 100644 index 00000000..9301b01d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/6/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/6/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/6/4.jpg new file mode 100644 index 00000000..23182cdf Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/6/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/6/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/6/5.jpg new file mode 100644 index 00000000..138e99aa Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/6/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/6/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/6/6.jpg new file mode 100644 index 00000000..fa72b223 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/6/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/6/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/6/7.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/6/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/7/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/7/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/7/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/7/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/7/1.jpg new file mode 100644 index 00000000..5f57d0d3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/7/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/7/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/7/2.jpg new file mode 100644 index 00000000..dcc45ffe Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/7/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/7/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/7/3.jpg new file mode 100644 index 00000000..62caf9f0 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/7/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/7/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/7/4.jpg new file mode 100644 index 00000000..e3f5d89c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/7/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/7/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/7/5.jpg new file mode 100644 index 00000000..6633deb5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/7/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/7/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/7/6.jpg new file mode 100644 index 00000000..14dbdd9e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/7/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/3/7/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/3/7/7.jpg new file mode 100644 index 00000000..f3cba15b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/3/7/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/0/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/0/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/0/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/10.jpg new file mode 100644 index 00000000..2f91d24a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/0/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/11.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/0/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/12.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/0/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/13.jpg new file mode 100644 index 00000000..3c0ea66a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/0/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/14.jpg new file mode 100644 index 00000000..8fec21e9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/0/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/15.jpg new file mode 100644 index 00000000..56eb6a88 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/0/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/0/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/3.jpg new file mode 100644 index 00000000..ae7f84ba Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/0/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/4.jpg new file mode 100644 index 00000000..4d68c37e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/0/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/5.jpg new file mode 100644 index 00000000..19cb9825 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/0/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/6.jpg new file mode 100644 index 00000000..fa922f96 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/0/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/7.jpg new file mode 100644 index 00000000..cd2d7a29 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/0/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/8.jpg new file mode 100644 index 00000000..9d4bbf66 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/0/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/9.jpg new file mode 100644 index 00000000..d1ec8325 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/0/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/1/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/1/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/1/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/10.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/1/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/11.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/1/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/12.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/1/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/13.jpg new file mode 100644 index 00000000..f5a2a51d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/1/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/14.jpg new file mode 100644 index 00000000..768377a6 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/1/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/15.jpg new file mode 100644 index 00000000..6e00dd1a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/1/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/1/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/3.jpg new file mode 100644 index 00000000..95ca7c56 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/1/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/4.jpg new file mode 100644 index 00000000..1a4fe6d1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/1/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/5.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/1/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/6.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/1/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/7.jpg new file mode 100644 index 00000000..2eaa8bb3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/1/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/8.jpg new file mode 100644 index 00000000..19f3e17c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/1/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/9.jpg new file mode 100644 index 00000000..6ab377e7 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/1/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/10/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/10/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/1.jpg new file mode 100644 index 00000000..1ce23b72 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/10/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/10.jpg new file mode 100644 index 00000000..0e8a2d3e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/10/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/11.jpg new file mode 100644 index 00000000..65c626cb Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/10/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/12.jpg new file mode 100644 index 00000000..88d87fd5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/10/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/13.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/10/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/14.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/10/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/15.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/10/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/2.jpg new file mode 100644 index 00000000..b0351d1a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/10/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/3.jpg new file mode 100644 index 00000000..f41006d5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/10/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/4.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/10/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/5.jpg new file mode 100644 index 00000000..209eb4d8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/10/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/6.jpg new file mode 100644 index 00000000..e214a900 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/10/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/7.jpg new file mode 100644 index 00000000..9a8f49c1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/10/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/8.jpg new file mode 100644 index 00000000..2c9094ee Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/10/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/9.jpg new file mode 100644 index 00000000..a1e304ba Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/10/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/11/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/11/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/1.jpg new file mode 100644 index 00000000..031f8a2d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/11/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/10.jpg new file mode 100644 index 00000000..97a0e23e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/11/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/11.jpg new file mode 100644 index 00000000..cff31585 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/11/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/12.jpg new file mode 100644 index 00000000..ea28f26d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/11/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/13.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/11/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/14.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/11/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/15.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/11/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/2.jpg new file mode 100644 index 00000000..7fa94996 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/11/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/3.jpg new file mode 100644 index 00000000..ab782dc2 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/11/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/4.jpg new file mode 100644 index 00000000..f7a5d283 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/11/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/5.jpg new file mode 100644 index 00000000..9e53be23 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/11/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/6.jpg new file mode 100644 index 00000000..abbaed99 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/11/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/7.jpg new file mode 100644 index 00000000..adea7879 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/11/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/8.jpg new file mode 100644 index 00000000..65830a51 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/11/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/9.jpg new file mode 100644 index 00000000..b69808e8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/11/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/12/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/12/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/1.jpg new file mode 100644 index 00000000..33930228 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/12/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/10.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/12/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/11.jpg new file mode 100644 index 00000000..6c81c282 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/12/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/12.jpg new file mode 100644 index 00000000..245b526e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/12/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/13.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/12/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/14.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/12/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/15.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/12/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/2.jpg new file mode 100644 index 00000000..51deee76 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/12/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/3.jpg new file mode 100644 index 00000000..e8799d6c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/12/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/4.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/12/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/5.jpg new file mode 100644 index 00000000..fb7a9767 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/12/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/6.jpg new file mode 100644 index 00000000..de21329c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/12/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/7.jpg new file mode 100644 index 00000000..2927e7db Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/12/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/8.jpg new file mode 100644 index 00000000..c6b5eee4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/12/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/9.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/12/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/13/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/13/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/13/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/10.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/13/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/11.jpg new file mode 100644 index 00000000..1f7ae302 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/13/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/12.jpg new file mode 100644 index 00000000..80030d46 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/13/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/13.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/13/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/14.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/13/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/15.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/13/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/2.jpg new file mode 100644 index 00000000..d9140af5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/13/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/3.jpg new file mode 100644 index 00000000..da49605b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/13/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/4.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/13/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/5.jpg new file mode 100644 index 00000000..c143b7e7 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/13/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/6.jpg new file mode 100644 index 00000000..841f0ea6 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/13/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/7.jpg new file mode 100644 index 00000000..8c96fc6d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/13/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/8.jpg new file mode 100644 index 00000000..61429562 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/13/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/9.jpg new file mode 100644 index 00000000..e71a4cda Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/13/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/14/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/14/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/14/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/10.jpg new file mode 100644 index 00000000..b8a257c5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/14/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/11.jpg new file mode 100644 index 00000000..4a2aa8e8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/14/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/12.jpg new file mode 100644 index 00000000..eed6cdc4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/14/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/13.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/14/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/14.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/14/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/15.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/14/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/2.jpg new file mode 100644 index 00000000..66358b6c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/14/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/3.jpg new file mode 100644 index 00000000..24309473 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/14/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/4.jpg new file mode 100644 index 00000000..b23d5d81 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/14/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/5.jpg new file mode 100644 index 00000000..a7116efe Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/14/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/6.jpg new file mode 100644 index 00000000..3a0359be Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/14/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/7.jpg new file mode 100644 index 00000000..ef2f84fa Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/14/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/8.jpg new file mode 100644 index 00000000..e0b32185 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/14/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/9.jpg new file mode 100644 index 00000000..7c1d47df Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/14/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/15/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/15/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/15/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/10.jpg new file mode 100644 index 00000000..901e0f8a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/15/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/11.jpg new file mode 100644 index 00000000..1320151e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/15/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/12.jpg new file mode 100644 index 00000000..7d8a34b0 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/15/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/13.jpg new file mode 100644 index 00000000..19e2159d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/15/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/14.jpg new file mode 100644 index 00000000..f976de7d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/15/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/15.jpg new file mode 100644 index 00000000..f8de169f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/15/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/15/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/3.jpg new file mode 100644 index 00000000..ce398fc9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/15/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/4.jpg new file mode 100644 index 00000000..5562bbc9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/15/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/5.jpg new file mode 100644 index 00000000..0325b4c8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/15/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/6.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/15/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/7.jpg new file mode 100644 index 00000000..fc6684cb Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/15/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/8.jpg new file mode 100644 index 00000000..5b30a7f7 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/15/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/9.jpg new file mode 100644 index 00000000..e949cdc0 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/15/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/2/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/2/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/2/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/10.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/2/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/11.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/2/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/12.jpg new file mode 100644 index 00000000..ac272f55 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/2/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/13.jpg new file mode 100644 index 00000000..666bc41e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/2/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/14.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/2/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/15.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/2/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/2.jpg new file mode 100644 index 00000000..d4f73d60 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/2/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/3.jpg new file mode 100644 index 00000000..d15d0f60 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/2/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/4.jpg new file mode 100644 index 00000000..ed711d49 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/2/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/5.jpg new file mode 100644 index 00000000..664b8684 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/2/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/6.jpg new file mode 100644 index 00000000..f707d774 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/2/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/7.jpg new file mode 100644 index 00000000..7324f2ba Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/2/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/8.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/2/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/9.jpg new file mode 100644 index 00000000..3c83553c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/2/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/3/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/3/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/1.jpg new file mode 100644 index 00000000..d6e96ae1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/3/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/10.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/3/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/11.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/3/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/12.jpg new file mode 100644 index 00000000..c84fe322 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/3/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/13.jpg new file mode 100644 index 00000000..cdb3365e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/3/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/14.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/3/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/15.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/3/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/2.jpg new file mode 100644 index 00000000..ad0484bd Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/3/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/3.jpg new file mode 100644 index 00000000..9d97135f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/3/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/4.jpg new file mode 100644 index 00000000..11498796 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/3/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/5.jpg new file mode 100644 index 00000000..d3ee256f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/3/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/6.jpg new file mode 100644 index 00000000..f5861d6c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/3/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/7.jpg new file mode 100644 index 00000000..1a0f9c04 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/3/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/8.jpg new file mode 100644 index 00000000..871c32fb Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/3/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/9.jpg new file mode 100644 index 00000000..f35b10e8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/3/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/4/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/0.jpg new file mode 100644 index 00000000..c95f1f91 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/4/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/1.jpg new file mode 100644 index 00000000..120c1c40 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/4/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/10.jpg new file mode 100644 index 00000000..763ade88 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/4/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/11.jpg new file mode 100644 index 00000000..0948ceba Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/4/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/12.jpg new file mode 100644 index 00000000..723a979b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/4/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/13.jpg new file mode 100644 index 00000000..2679f944 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/4/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/14.jpg new file mode 100644 index 00000000..d4ebfb6f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/4/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/15.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/4/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/2.jpg new file mode 100644 index 00000000..7eec04de Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/4/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/3.jpg new file mode 100644 index 00000000..3ff62b72 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/4/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/4.jpg new file mode 100644 index 00000000..fd085302 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/4/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/5.jpg new file mode 100644 index 00000000..2034252c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/4/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/6.jpg new file mode 100644 index 00000000..72184f51 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/4/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/7.jpg new file mode 100644 index 00000000..4db99027 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/4/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/8.jpg new file mode 100644 index 00000000..9974e643 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/4/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/9.jpg new file mode 100644 index 00000000..de7c76de Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/4/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/5/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/0.jpg new file mode 100644 index 00000000..ae2120a1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/5/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/1.jpg new file mode 100644 index 00000000..7628a77a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/5/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/10.jpg new file mode 100644 index 00000000..e8331f1f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/5/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/11.jpg new file mode 100644 index 00000000..f0017d7b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/5/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/12.jpg new file mode 100644 index 00000000..d8d4f3ac Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/5/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/13.jpg new file mode 100644 index 00000000..4af893f8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/5/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/14.jpg new file mode 100644 index 00000000..2c6d1319 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/5/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/15.jpg new file mode 100644 index 00000000..047457d6 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/5/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/2.jpg new file mode 100644 index 00000000..95762bea Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/5/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/3.jpg new file mode 100644 index 00000000..1dc346bd Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/5/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/4.jpg new file mode 100644 index 00000000..5c87bae4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/5/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/5.jpg new file mode 100644 index 00000000..fca150bf Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/5/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/6.jpg new file mode 100644 index 00000000..57357cd6 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/5/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/7.jpg new file mode 100644 index 00000000..539c9d61 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/5/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/8.jpg new file mode 100644 index 00000000..c0413136 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/5/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/9.jpg new file mode 100644 index 00000000..86cd69de Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/5/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/6/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/0.jpg new file mode 100644 index 00000000..853fc520 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/6/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/1.jpg new file mode 100644 index 00000000..9034dfba Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/6/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/10.jpg new file mode 100644 index 00000000..74c9cb6b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/6/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/11.jpg new file mode 100644 index 00000000..0a26aeac Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/6/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/12.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/6/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/13.jpg new file mode 100644 index 00000000..aa5089d7 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/6/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/14.jpg new file mode 100644 index 00000000..7e61480c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/6/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/15.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/6/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/2.jpg new file mode 100644 index 00000000..368f1f9e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/6/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/3.jpg new file mode 100644 index 00000000..f0efd83a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/6/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/4.jpg new file mode 100644 index 00000000..463dcceb Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/6/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/5.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/6/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/6.jpg new file mode 100644 index 00000000..3da91b23 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/6/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/7.jpg new file mode 100644 index 00000000..63636108 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/6/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/8.jpg new file mode 100644 index 00000000..f5e0aaee Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/6/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/9.jpg new file mode 100644 index 00000000..5d79e251 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/6/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/7/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/0.jpg new file mode 100644 index 00000000..f67ad117 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/7/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/1.jpg new file mode 100644 index 00000000..4933fbf5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/7/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/10.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/7/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/11.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/7/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/12.jpg new file mode 100644 index 00000000..379001b8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/7/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/13.jpg new file mode 100644 index 00000000..e639ad5e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/7/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/14.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/7/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/15.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/7/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/2.jpg new file mode 100644 index 00000000..9c838fa6 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/7/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/3.jpg new file mode 100644 index 00000000..51dad46e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/7/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/4.jpg new file mode 100644 index 00000000..10195192 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/7/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/5.jpg new file mode 100644 index 00000000..27175973 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/7/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/6.jpg new file mode 100644 index 00000000..18e03a4e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/7/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/7.jpg new file mode 100644 index 00000000..8a1e8402 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/7/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/8.jpg new file mode 100644 index 00000000..01e3a10e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/7/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/9.jpg new file mode 100644 index 00000000..6c0f4f4f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/7/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/8/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/8/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/1.jpg new file mode 100644 index 00000000..fd3dce0f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/8/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/10.jpg new file mode 100644 index 00000000..38ae7436 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/8/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/11.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/8/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/12.jpg new file mode 100644 index 00000000..93070160 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/8/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/13.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/8/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/14.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/8/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/15.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/8/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/2.jpg new file mode 100644 index 00000000..d68f8b1c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/8/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/3.jpg new file mode 100644 index 00000000..c5b956fa Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/8/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/4.jpg new file mode 100644 index 00000000..0552236d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/8/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/5.jpg new file mode 100644 index 00000000..afd73cfb Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/8/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/6.jpg new file mode 100644 index 00000000..dc1204e3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/8/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/7.jpg new file mode 100644 index 00000000..4957c5e7 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/8/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/8.jpg new file mode 100644 index 00000000..90a3308d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/8/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/9.jpg new file mode 100644 index 00000000..323e4857 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/8/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/9/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/9/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/1.jpg new file mode 100644 index 00000000..d67bc2fd Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/9/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/10.jpg new file mode 100644 index 00000000..f2923c4e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/9/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/11.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/9/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/12.jpg new file mode 100644 index 00000000..144a222e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/9/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/13.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/9/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/14.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/9/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/15.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/9/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/2.jpg new file mode 100644 index 00000000..01fbe7db Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/9/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/3.jpg new file mode 100644 index 00000000..16d655fc Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/9/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/4.jpg new file mode 100644 index 00000000..5cad968e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/9/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/5.jpg new file mode 100644 index 00000000..7b14bd33 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/9/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/6.jpg new file mode 100644 index 00000000..148336cd Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/9/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/7.jpg new file mode 100644 index 00000000..4036e31b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/9/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/8.jpg new file mode 100644 index 00000000..d5acdb64 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/4/9/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/9.jpg new file mode 100644 index 00000000..ee8f17d4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/4/9/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/10.jpg new file mode 100644 index 00000000..872ecd88 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/11.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/12.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/13.jpg new file mode 100644 index 00000000..d1acc4a7 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/14.jpg new file mode 100644 index 00000000..84967fb2 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/15.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/16.jpg new file mode 100644 index 00000000..5f7b8bce Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/17.jpg new file mode 100644 index 00000000..510425dd Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/18.jpg new file mode 100644 index 00000000..2ae5fb86 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/19.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/20.jpg new file mode 100644 index 00000000..89f88b13 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/24.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/25.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/26.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/27.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/28.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/29.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/3.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/30.jpg new file mode 100644 index 00000000..0f869a77 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/31.jpg new file mode 100644 index 00000000..aec68dc5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/4.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/5.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/6.jpg new file mode 100644 index 00000000..c033430a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/7.jpg new file mode 100644 index 00000000..2fd4e26a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/8.jpg new file mode 100644 index 00000000..84309796 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/0/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/9.jpg new file mode 100644 index 00000000..18889636 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/0/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/10.jpg new file mode 100644 index 00000000..5104fcdb Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/11.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/12.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/13.jpg new file mode 100644 index 00000000..f8306c8e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/14.jpg new file mode 100644 index 00000000..c07d7ad9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/15.jpg new file mode 100644 index 00000000..f153fd5d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/16.jpg new file mode 100644 index 00000000..3fbf9cf3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/17.jpg new file mode 100644 index 00000000..083c6b82 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/18.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/19.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/24.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/25.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/26.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/27.jpg new file mode 100644 index 00000000..44704abd Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/28.jpg new file mode 100644 index 00000000..fb0d4b62 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/29.jpg new file mode 100644 index 00000000..aca21bff Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/3.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/30.jpg new file mode 100644 index 00000000..f6422383 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/31.jpg new file mode 100644 index 00000000..9222355f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/4.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/5.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/6.jpg new file mode 100644 index 00000000..37678777 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/7.jpg new file mode 100644 index 00000000..888a7b69 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/8.jpg new file mode 100644 index 00000000..ddac4a63 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/1/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/9.jpg new file mode 100644 index 00000000..a1824702 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/1/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/1.jpg new file mode 100644 index 00000000..ebca6a68 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/10.jpg new file mode 100644 index 00000000..c429dd47 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/11.jpg new file mode 100644 index 00000000..6339dde1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/12.jpg new file mode 100644 index 00000000..802451c7 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/13.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/14.jpg new file mode 100644 index 00000000..0c979327 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/15.jpg new file mode 100644 index 00000000..6f5c423d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/16.jpg new file mode 100644 index 00000000..8251624b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/17.jpg new file mode 100644 index 00000000..04f32d8f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/18.jpg new file mode 100644 index 00000000..d2225f5d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/19.jpg new file mode 100644 index 00000000..f710140f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/2.jpg new file mode 100644 index 00000000..b441d6e4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/20.jpg new file mode 100644 index 00000000..92b32050 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/21.jpg new file mode 100644 index 00000000..3bb24230 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/23.jpg new file mode 100644 index 00000000..f6ba5506 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/24.jpg new file mode 100644 index 00000000..3823e65d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/25.jpg new file mode 100644 index 00000000..e47621df Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/26.jpg new file mode 100644 index 00000000..b69f8ca7 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/27.jpg new file mode 100644 index 00000000..31ba3d51 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/28.jpg new file mode 100644 index 00000000..aa3d8c8a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/29.jpg new file mode 100644 index 00000000..f885b51b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/3.jpg new file mode 100644 index 00000000..3ab0eb9a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/30.jpg new file mode 100644 index 00000000..42ab87ee Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/4.jpg new file mode 100644 index 00000000..37e7e6b2 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/5.jpg new file mode 100644 index 00000000..a64a756e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/6.jpg new file mode 100644 index 00000000..7dbcf4ee Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/7.jpg new file mode 100644 index 00000000..77c881f0 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/8.jpg new file mode 100644 index 00000000..7c4e559c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/10/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/9.jpg new file mode 100644 index 00000000..64b38335 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/10/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/1.jpg new file mode 100644 index 00000000..9e8ae26b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/10.jpg new file mode 100644 index 00000000..9796129b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/11.jpg new file mode 100644 index 00000000..ee9c745a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/12.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/13.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/14.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/15.jpg new file mode 100644 index 00000000..517ffb27 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/16.jpg new file mode 100644 index 00000000..7c0ae08b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/17.jpg new file mode 100644 index 00000000..81303eac Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/18.jpg new file mode 100644 index 00000000..89bd3d5e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/19.jpg new file mode 100644 index 00000000..7caf47e8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/2.jpg new file mode 100644 index 00000000..b238f42c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/22.jpg new file mode 100644 index 00000000..0a4cf4e6 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/23.jpg new file mode 100644 index 00000000..a48aeee3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/24.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/25.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/26.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/27.jpg new file mode 100644 index 00000000..c47769de Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/28.jpg new file mode 100644 index 00000000..39338bd9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/29.jpg new file mode 100644 index 00000000..c6ba6773 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/3.jpg new file mode 100644 index 00000000..eea709ec Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/4.jpg new file mode 100644 index 00000000..eea709ec Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/5.jpg new file mode 100644 index 00000000..714597c8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/6.jpg new file mode 100644 index 00000000..f76eb656 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/7.jpg new file mode 100644 index 00000000..e8f65bf3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/8.jpg new file mode 100644 index 00000000..b4fe27ca Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/11/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/9.jpg new file mode 100644 index 00000000..459f5f9b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/11/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/1.jpg new file mode 100644 index 00000000..e3966ba4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/10.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/11.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/12.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/13.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/14.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/15.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/16.jpg new file mode 100644 index 00000000..386ccee2 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/17.jpg new file mode 100644 index 00000000..7e89ebb2 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/18.jpg new file mode 100644 index 00000000..f95ecd2b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/19.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/2.jpg new file mode 100644 index 00000000..6c587f3b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/21.jpg new file mode 100644 index 00000000..714f2d87 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/22.jpg new file mode 100644 index 00000000..dea458c9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/24.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/25.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/26.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/27.jpg new file mode 100644 index 00000000..9effe548 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/28.jpg new file mode 100644 index 00000000..d2c58255 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/29.jpg new file mode 100644 index 00000000..f422cba3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/3.jpg new file mode 100644 index 00000000..eea709ec Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/4.jpg new file mode 100644 index 00000000..eea709ec Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/5.jpg new file mode 100644 index 00000000..eea709ec Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/6.jpg new file mode 100644 index 00000000..eea709ec Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/7.jpg new file mode 100644 index 00000000..fa4f3d8d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/8.jpg new file mode 100644 index 00000000..db36ec17 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/12/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/9.jpg new file mode 100644 index 00000000..6015a132 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/12/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/1.jpg new file mode 100644 index 00000000..99fc770c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/10.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/11.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/12.jpg new file mode 100644 index 00000000..c7a717a7 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/13.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/14.jpg new file mode 100644 index 00000000..1376e629 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/15.jpg new file mode 100644 index 00000000..4cc7606d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/16.jpg new file mode 100644 index 00000000..efd33222 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/17.jpg new file mode 100644 index 00000000..0f904d25 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/18.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/19.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/2.jpg new file mode 100644 index 00000000..c2df10dd Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/22.jpg new file mode 100644 index 00000000..a18c886e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/24.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/25.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/26.jpg new file mode 100644 index 00000000..fa513fa2 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/27.jpg new file mode 100644 index 00000000..78d1a790 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/28.jpg new file mode 100644 index 00000000..64fddb87 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/3.jpg new file mode 100644 index 00000000..582f98ac Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/4.jpg new file mode 100644 index 00000000..b153c9c5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/5.jpg new file mode 100644 index 00000000..b70b9f14 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/6.jpg new file mode 100644 index 00000000..0a247f87 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/7.jpg new file mode 100644 index 00000000..50805905 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/8.jpg new file mode 100644 index 00000000..d1e92f95 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/13/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/9.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/13/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/1.jpg new file mode 100644 index 00000000..46bb8356 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/10.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/11.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/12.jpg new file mode 100644 index 00000000..e15e4d4d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/13.jpg new file mode 100644 index 00000000..9fcbf5e2 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/14.jpg new file mode 100644 index 00000000..ed700abe Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/15.jpg new file mode 100644 index 00000000..eb30e0ba Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/16.jpg new file mode 100644 index 00000000..736c99d5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/17.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/18.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/19.jpg new file mode 100644 index 00000000..2fa171ab Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/2.jpg new file mode 100644 index 00000000..72d02b87 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/24.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/25.jpg new file mode 100644 index 00000000..474bacf4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/26.jpg new file mode 100644 index 00000000..b9d13995 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/3.jpg new file mode 100644 index 00000000..8c64a009 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/4.jpg new file mode 100644 index 00000000..77a51669 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/5.jpg new file mode 100644 index 00000000..37b3cb55 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/6.jpg new file mode 100644 index 00000000..79e0c282 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/7.jpg new file mode 100644 index 00000000..3780badf Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/8.jpg new file mode 100644 index 00000000..62f4e26a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/14/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/9.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/14/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/10.jpg new file mode 100644 index 00000000..a973f3d0 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/11.jpg new file mode 100644 index 00000000..c9c1fc28 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/12.jpg new file mode 100644 index 00000000..80cbefa2 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/13.jpg new file mode 100644 index 00000000..bec71a21 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/14.jpg new file mode 100644 index 00000000..67c5b9cd Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/15.jpg new file mode 100644 index 00000000..ec4fbac2 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/16.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/17.jpg new file mode 100644 index 00000000..9fea5b1d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/18.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/19.jpg new file mode 100644 index 00000000..eb8eb967 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/24.jpg new file mode 100644 index 00000000..dbaba331 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/25.jpg new file mode 100644 index 00000000..b9770b6b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/26.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/3.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/4.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/5.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/6.jpg new file mode 100644 index 00000000..5b40feee Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/7.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/8.jpg new file mode 100644 index 00000000..69244fe3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/15/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/9.jpg new file mode 100644 index 00000000..9c053a0d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/15/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/10.jpg new file mode 100644 index 00000000..8d6b600c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/11.jpg new file mode 100644 index 00000000..1934745b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/12.jpg new file mode 100644 index 00000000..9fd9478b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/13.jpg new file mode 100644 index 00000000..0e97bdd3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/14.jpg new file mode 100644 index 00000000..c79adbb5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/15.jpg new file mode 100644 index 00000000..3607b7a3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/16.jpg new file mode 100644 index 00000000..9ac6a6a7 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/17.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/18.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/19.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/21.jpg new file mode 100644 index 00000000..466eee30 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/24.jpg new file mode 100644 index 00000000..16528298 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/25.jpg new file mode 100644 index 00000000..badd4e81 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/26.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/3.jpg new file mode 100644 index 00000000..6745328c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/4.jpg new file mode 100644 index 00000000..518feed4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/5.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/6.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/7.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/8.jpg new file mode 100644 index 00000000..2346d8f0 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/16/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/9.jpg new file mode 100644 index 00000000..b526bd43 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/16/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/10.jpg new file mode 100644 index 00000000..da777f6d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/11.jpg new file mode 100644 index 00000000..0324ae54 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/12.jpg new file mode 100644 index 00000000..78d496bc Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/13.jpg new file mode 100644 index 00000000..c3394603 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/14.jpg new file mode 100644 index 00000000..bfbe9849 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/15.jpg new file mode 100644 index 00000000..c49c52dd Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/16.jpg new file mode 100644 index 00000000..b4f4f8e1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/17.jpg new file mode 100644 index 00000000..b98b0ac2 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/18.jpg new file mode 100644 index 00000000..18e57422 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/19.jpg new file mode 100644 index 00000000..1c70c08a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/24.jpg new file mode 100644 index 00000000..61f62ab9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/25.jpg new file mode 100644 index 00000000..a5bade1d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/26.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/3.jpg new file mode 100644 index 00000000..4551c5c6 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/4.jpg new file mode 100644 index 00000000..a2092e84 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/5.jpg new file mode 100644 index 00000000..3151d853 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/6.jpg new file mode 100644 index 00000000..7ade021a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/7.jpg new file mode 100644 index 00000000..aa8462f1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/8.jpg new file mode 100644 index 00000000..dc5e32d2 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/17/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/9.jpg new file mode 100644 index 00000000..56ce4b5f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/17/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/10.jpg new file mode 100644 index 00000000..b75803ec Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/11.jpg new file mode 100644 index 00000000..559eb2ec Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/12.jpg new file mode 100644 index 00000000..9f7bb6a4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/13.jpg new file mode 100644 index 00000000..4419d2ee Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/14.jpg new file mode 100644 index 00000000..c88b8ccb Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/15.jpg new file mode 100644 index 00000000..ea507386 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/16.jpg new file mode 100644 index 00000000..31808c9c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/17.jpg new file mode 100644 index 00000000..587353b2 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/18.jpg new file mode 100644 index 00000000..011aa1d0 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/19.jpg new file mode 100644 index 00000000..d08c8c6c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/24.jpg new file mode 100644 index 00000000..62013fe1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/25.jpg new file mode 100644 index 00000000..ad330c09 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/26.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/3.jpg new file mode 100644 index 00000000..76473369 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/4.jpg new file mode 100644 index 00000000..7afddd29 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/5.jpg new file mode 100644 index 00000000..f2a4b637 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/6.jpg new file mode 100644 index 00000000..fc6e76e4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/7.jpg new file mode 100644 index 00000000..7ab3a65b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/8.jpg new file mode 100644 index 00000000..c9a946db Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/18/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/9.jpg new file mode 100644 index 00000000..8f4bc327 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/18/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/10.jpg new file mode 100644 index 00000000..4976956b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/11.jpg new file mode 100644 index 00000000..de13af49 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/12.jpg new file mode 100644 index 00000000..de4114f7 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/13.jpg new file mode 100644 index 00000000..fc3f9464 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/14.jpg new file mode 100644 index 00000000..3a355c6c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/15.jpg new file mode 100644 index 00000000..78b1a1a8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/16.jpg new file mode 100644 index 00000000..7eedc1cd Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/17.jpg new file mode 100644 index 00000000..b06c9ceb Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/18.jpg new file mode 100644 index 00000000..cf450af5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/19.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/20.jpg new file mode 100644 index 00000000..1e903ce4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/24.jpg new file mode 100644 index 00000000..b887cb2f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/25.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/26.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/3.jpg new file mode 100644 index 00000000..4464c4c2 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/4.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/5.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/6.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/7.jpg new file mode 100644 index 00000000..282e0c95 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/8.jpg new file mode 100644 index 00000000..ac282001 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/19/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/9.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/19/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/10.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/11.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/12.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/13.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/14.jpg new file mode 100644 index 00000000..046fd0f9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/15.jpg new file mode 100644 index 00000000..af1a6f58 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/16.jpg new file mode 100644 index 00000000..52c7762e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/17.jpg new file mode 100644 index 00000000..6c3fde94 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/18.jpg new file mode 100644 index 00000000..7c4a8ee0 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/19.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/24.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/25.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/26.jpg new file mode 100644 index 00000000..4a971ae3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/27.jpg new file mode 100644 index 00000000..ed72cd03 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/28.jpg new file mode 100644 index 00000000..2e9675b2 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/29.jpg new file mode 100644 index 00000000..f8a60d20 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/3.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/30.jpg new file mode 100644 index 00000000..95a3bd87 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/31.jpg new file mode 100644 index 00000000..f6beaf78 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/4.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/5.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/6.jpg new file mode 100644 index 00000000..3caa419f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/7.jpg new file mode 100644 index 00000000..abbabdff Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/8.jpg new file mode 100644 index 00000000..190fdd41 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/2/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/9.jpg new file mode 100644 index 00000000..4694c7fc Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/2/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/10.jpg new file mode 100644 index 00000000..414e4707 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/11.jpg new file mode 100644 index 00000000..0ecf0bd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/12.jpg new file mode 100644 index 00000000..f0c89948 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/13.jpg new file mode 100644 index 00000000..c4019da1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/14.jpg new file mode 100644 index 00000000..c8ff099b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/15.jpg new file mode 100644 index 00000000..b7f29507 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/16.jpg new file mode 100644 index 00000000..041a28c4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/17.jpg new file mode 100644 index 00000000..5f00f51f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/18.jpg new file mode 100644 index 00000000..3e8d1149 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/19.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/2.jpg new file mode 100644 index 00000000..f23f6c44 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/20.jpg new file mode 100644 index 00000000..fe51bcbf Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/23.jpg new file mode 100644 index 00000000..a92f8424 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/24.jpg new file mode 100644 index 00000000..a00d44a1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/25.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/26.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/3.jpg new file mode 100644 index 00000000..dd1244a4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/4.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/5.jpg new file mode 100644 index 00000000..e1dc38ea Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/6.jpg new file mode 100644 index 00000000..9eff743d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/7.jpg new file mode 100644 index 00000000..b7199a88 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/8.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/20/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/9.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/20/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/10.jpg new file mode 100644 index 00000000..c7668b6b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/11.jpg new file mode 100644 index 00000000..9495f3ce Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/12.jpg new file mode 100644 index 00000000..5abb6752 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/13.jpg new file mode 100644 index 00000000..7a77bb39 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/14.jpg new file mode 100644 index 00000000..091fadc5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/15.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/16.jpg new file mode 100644 index 00000000..7051be37 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/17.jpg new file mode 100644 index 00000000..3f5de1bf Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/18.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/19.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/2.jpg new file mode 100644 index 00000000..321f388d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/23.jpg new file mode 100644 index 00000000..9ecc93e1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/24.jpg new file mode 100644 index 00000000..24b40df5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/25.jpg new file mode 100644 index 00000000..7dad9175 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/26.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/3.jpg new file mode 100644 index 00000000..aa515b30 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/4.jpg new file mode 100644 index 00000000..071f1f9a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/5.jpg new file mode 100644 index 00000000..77b6c367 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/6.jpg new file mode 100644 index 00000000..60d4cc79 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/7.jpg new file mode 100644 index 00000000..f0ab8342 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/8.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/21/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/9.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/21/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/10.jpg new file mode 100644 index 00000000..1a6f5ebf Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/11.jpg new file mode 100644 index 00000000..93a840e4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/12.jpg new file mode 100644 index 00000000..2c61d386 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/13.jpg new file mode 100644 index 00000000..0d56ea37 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/14.jpg new file mode 100644 index 00000000..1a8530f8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/15.jpg new file mode 100644 index 00000000..a6872ee5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/16.jpg new file mode 100644 index 00000000..3813cd69 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/17.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/18.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/19.jpg new file mode 100644 index 00000000..8c41b662 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/20.jpg new file mode 100644 index 00000000..041a50a8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/21.jpg new file mode 100644 index 00000000..36fe798d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/24.jpg new file mode 100644 index 00000000..e48816f3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/25.jpg new file mode 100644 index 00000000..82a80e00 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/26.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/3.jpg new file mode 100644 index 00000000..1d297b5f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/4.jpg new file mode 100644 index 00000000..61191a51 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/5.jpg new file mode 100644 index 00000000..119e6083 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/6.jpg new file mode 100644 index 00000000..5de353e3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/7.jpg new file mode 100644 index 00000000..c9751d46 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/8.jpg new file mode 100644 index 00000000..c7ec303b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/22/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/9.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/22/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/10.jpg new file mode 100644 index 00000000..3ce83066 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/11.jpg new file mode 100644 index 00000000..6e13982f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/12.jpg new file mode 100644 index 00000000..69f70268 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/13.jpg new file mode 100644 index 00000000..f8d39bb7 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/14.jpg new file mode 100644 index 00000000..111d5b75 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/15.jpg new file mode 100644 index 00000000..eb07ccbe Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/16.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/17.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/18.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/19.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/2.jpg new file mode 100644 index 00000000..1e5e1d46 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/23.jpg new file mode 100644 index 00000000..8904384b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/24.jpg new file mode 100644 index 00000000..2036ffb7 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/25.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/26.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/3.jpg new file mode 100644 index 00000000..75a9e11c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/4.jpg new file mode 100644 index 00000000..c5a29923 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/5.jpg new file mode 100644 index 00000000..e014106c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/6.jpg new file mode 100644 index 00000000..16d8be0a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/7.jpg new file mode 100644 index 00000000..547c20bd Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/8.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/23/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/9.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/23/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/10.jpg new file mode 100644 index 00000000..6a09f2e5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/11.jpg new file mode 100644 index 00000000..6103655d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/12.jpg new file mode 100644 index 00000000..eea709ec Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/13.jpg new file mode 100644 index 00000000..94a31da0 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/14.jpg new file mode 100644 index 00000000..786cf28e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/15.jpg new file mode 100644 index 00000000..4f6d1ee3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/16.jpg new file mode 100644 index 00000000..31851653 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/17.jpg new file mode 100644 index 00000000..22a1de09 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/18.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/19.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/2.jpg new file mode 100644 index 00000000..cf113e4f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/23.jpg new file mode 100644 index 00000000..9a37b19b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/24.jpg new file mode 100644 index 00000000..8b10d744 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/25.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/26.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/3.jpg new file mode 100644 index 00000000..6b150fcb Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/4.jpg new file mode 100644 index 00000000..8d51559b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/5.jpg new file mode 100644 index 00000000..2a1fb180 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/6.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/7.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/8.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/24/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/9.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/24/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/10.jpg new file mode 100644 index 00000000..bf51118b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/11.jpg new file mode 100644 index 00000000..55089b82 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/12.jpg new file mode 100644 index 00000000..eea709ec Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/13.jpg new file mode 100644 index 00000000..ea399dd5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/14.jpg new file mode 100644 index 00000000..7308cca4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/15.jpg new file mode 100644 index 00000000..df277a6d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/16.jpg new file mode 100644 index 00000000..a860fe78 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/17.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/18.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/19.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/23.jpg new file mode 100644 index 00000000..a234594d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/24.jpg new file mode 100644 index 00000000..1bb240b8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/25.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/26.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/3.jpg new file mode 100644 index 00000000..59075fe3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/4.jpg new file mode 100644 index 00000000..c819b2f5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/5.jpg new file mode 100644 index 00000000..4c4c3eac Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/6.jpg new file mode 100644 index 00000000..4a7a0591 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/7.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/8.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/25/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/9.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/25/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/10.jpg new file mode 100644 index 00000000..3c49c50f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/11.jpg new file mode 100644 index 00000000..d85d498c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/12.jpg new file mode 100644 index 00000000..0c0fae06 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/13.jpg new file mode 100644 index 00000000..ada190bd Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/14.jpg new file mode 100644 index 00000000..5d546d10 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/15.jpg new file mode 100644 index 00000000..89e5dd16 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/16.jpg new file mode 100644 index 00000000..e45103d1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/17.jpg new file mode 100644 index 00000000..39d6d3f6 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/18.jpg new file mode 100644 index 00000000..e6174068 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/19.jpg new file mode 100644 index 00000000..6dd25fc9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/23.jpg new file mode 100644 index 00000000..16f81b52 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/24.jpg new file mode 100644 index 00000000..6327543f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/25.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/26.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/3.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/4.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/5.jpg new file mode 100644 index 00000000..b3a7e071 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/6.jpg new file mode 100644 index 00000000..6ae29b30 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/7.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/8.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/26/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/9.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/26/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/10.jpg new file mode 100644 index 00000000..b831b32d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/11.jpg new file mode 100644 index 00000000..db544fc1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/12.jpg new file mode 100644 index 00000000..fe6c9550 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/13.jpg new file mode 100644 index 00000000..890c183d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/14.jpg new file mode 100644 index 00000000..acb583ca Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/15.jpg new file mode 100644 index 00000000..e7a3b9ef Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/16.jpg new file mode 100644 index 00000000..618ec546 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/17.jpg new file mode 100644 index 00000000..5b56e7e3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/18.jpg new file mode 100644 index 00000000..26159377 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/19.jpg new file mode 100644 index 00000000..3bcc8420 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/23.jpg new file mode 100644 index 00000000..b3b02916 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/24.jpg new file mode 100644 index 00000000..97aff660 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/25.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/26.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/3.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/4.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/5.jpg new file mode 100644 index 00000000..2a0a0fc8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/6.jpg new file mode 100644 index 00000000..2659d894 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/7.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/8.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/27/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/9.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/27/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/10.jpg new file mode 100644 index 00000000..3347ef27 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/11.jpg new file mode 100644 index 00000000..59e2b920 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/12.jpg new file mode 100644 index 00000000..4b3feed9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/13.jpg new file mode 100644 index 00000000..b7615f18 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/14.jpg new file mode 100644 index 00000000..89ea2d05 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/15.jpg new file mode 100644 index 00000000..9c05d9fd Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/16.jpg new file mode 100644 index 00000000..a75262b6 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/17.jpg new file mode 100644 index 00000000..ee6eacf8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/18.jpg new file mode 100644 index 00000000..9e69d262 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/19.jpg new file mode 100644 index 00000000..27832126 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/20.jpg new file mode 100644 index 00000000..8ff86725 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/23.jpg new file mode 100644 index 00000000..0753cf63 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/24.jpg new file mode 100644 index 00000000..607b797c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/25.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/26.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/3.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/4.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/5.jpg new file mode 100644 index 00000000..713f1795 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/6.jpg new file mode 100644 index 00000000..659cf0d9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/7.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/8.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/28/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/9.jpg new file mode 100644 index 00000000..85e96a2a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/28/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/10.jpg new file mode 100644 index 00000000..4b2fa3a4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/11.jpg new file mode 100644 index 00000000..939021f2 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/12.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/13.jpg new file mode 100644 index 00000000..d8d5ab7c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/14.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/15.jpg new file mode 100644 index 00000000..6d9778c3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/16.jpg new file mode 100644 index 00000000..bf7eb3f1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/17.jpg new file mode 100644 index 00000000..07523844 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/18.jpg new file mode 100644 index 00000000..244e1dc9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/19.jpg new file mode 100644 index 00000000..750a9112 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/20.jpg new file mode 100644 index 00000000..5d4f8ca6 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/24.jpg new file mode 100644 index 00000000..e72132b4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/25.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/26.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/3.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/4.jpg new file mode 100644 index 00000000..051c3782 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/5.jpg new file mode 100644 index 00000000..55983e07 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/6.jpg new file mode 100644 index 00000000..ac98da2a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/7.jpg new file mode 100644 index 00000000..e9f2cd71 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/8.jpg new file mode 100644 index 00000000..88dfb848 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/29/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/9.jpg new file mode 100644 index 00000000..0e3e4c8e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/29/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/10.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/11.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/12.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/13.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/14.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/15.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/16.jpg new file mode 100644 index 00000000..100a5609 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/17.jpg new file mode 100644 index 00000000..67ebd765 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/18.jpg new file mode 100644 index 00000000..a7a92a61 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/19.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/24.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/25.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/26.jpg new file mode 100644 index 00000000..b9e2432e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/27.jpg new file mode 100644 index 00000000..e9eab10a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/3.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/4.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/5.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/6.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/7.jpg new file mode 100644 index 00000000..15d5b0a9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/8.jpg new file mode 100644 index 00000000..88333227 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/3/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/9.jpg new file mode 100644 index 00000000..e6fb4841 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/3/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/10.jpg new file mode 100644 index 00000000..e94e439c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/11.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/12.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/13.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/14.jpg new file mode 100644 index 00000000..b3ec80cf Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/15.jpg new file mode 100644 index 00000000..0b74a5d0 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/16.jpg new file mode 100644 index 00000000..0abd79da Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/17.jpg new file mode 100644 index 00000000..2ef8aa06 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/18.jpg new file mode 100644 index 00000000..34bf5c7d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/19.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/20.jpg new file mode 100644 index 00000000..60341d05 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/21.jpg new file mode 100644 index 00000000..73ed697d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/23.jpg new file mode 100644 index 00000000..bdf2a899 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/24.jpg new file mode 100644 index 00000000..1448feb1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/25.jpg new file mode 100644 index 00000000..5cbb8134 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/26.jpg new file mode 100644 index 00000000..69198706 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/27.jpg new file mode 100644 index 00000000..6c562350 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/28.jpg new file mode 100644 index 00000000..539a04af Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/29.jpg new file mode 100644 index 00000000..bc1e7a05 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/3.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/30.jpg new file mode 100644 index 00000000..6925c24f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/4.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/5.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/6.jpg new file mode 100644 index 00000000..fa8fab37 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/7.jpg new file mode 100644 index 00000000..902edf4e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/8.jpg new file mode 100644 index 00000000..12a6a45b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/30/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/9.jpg new file mode 100644 index 00000000..6bd3780d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/30/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/10.jpg new file mode 100644 index 00000000..27868926 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/11.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/12.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/13.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/14.jpg new file mode 100644 index 00000000..0c9a05e2 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/15.jpg new file mode 100644 index 00000000..04fac565 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/16.jpg new file mode 100644 index 00000000..63f003b0 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/17.jpg new file mode 100644 index 00000000..631ce98b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/18.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/19.jpg new file mode 100644 index 00000000..c30136ee Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/20.jpg new file mode 100644 index 00000000..a2663f23 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/21.jpg new file mode 100644 index 00000000..56f97c64 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/24.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/25.jpg new file mode 100644 index 00000000..5eaf4174 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/26.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/27.jpg new file mode 100644 index 00000000..77eb272d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/28.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/29.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/3.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/30.jpg new file mode 100644 index 00000000..b8ffdb3c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/31.jpg new file mode 100644 index 00000000..46bdfc48 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/4.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/5.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/6.jpg new file mode 100644 index 00000000..a1ea0f92 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/7.jpg new file mode 100644 index 00000000..fd414254 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/8.jpg new file mode 100644 index 00000000..7f281e5e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/31/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/9.jpg new file mode 100644 index 00000000..b63fd59f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/31/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/10.jpg new file mode 100644 index 00000000..7fda4f8e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/11.jpg new file mode 100644 index 00000000..09600b74 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/12.jpg new file mode 100644 index 00000000..d7724dfc Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/13.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/14.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/15.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/16.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/17.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/18.jpg new file mode 100644 index 00000000..a48899f1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/19.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/24.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/25.jpg new file mode 100644 index 00000000..66b96395 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/26.jpg new file mode 100644 index 00000000..877c7ed0 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/3.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/4.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/5.jpg new file mode 100644 index 00000000..44c3f68d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/6.jpg new file mode 100644 index 00000000..49219571 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/7.jpg new file mode 100644 index 00000000..bd693ad5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/8.jpg new file mode 100644 index 00000000..d19f0427 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/4/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/9.jpg new file mode 100644 index 00000000..14db4498 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/4/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/10.jpg new file mode 100644 index 00000000..01021891 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/11.jpg new file mode 100644 index 00000000..74326c29 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/12.jpg new file mode 100644 index 00000000..e36c6c5f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/13.jpg new file mode 100644 index 00000000..804aa30f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/14.jpg new file mode 100644 index 00000000..acc62ff4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/15.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/16.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/17.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/18.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/19.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/24.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/25.jpg new file mode 100644 index 00000000..dce1f309 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/26.jpg new file mode 100644 index 00000000..1a4962c0 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/3.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/4.jpg new file mode 100644 index 00000000..1b3876cd Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/5.jpg new file mode 100644 index 00000000..83ec4f92 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/6.jpg new file mode 100644 index 00000000..5532e469 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/7.jpg new file mode 100644 index 00000000..2c048fc1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/8.jpg new file mode 100644 index 00000000..d19f0427 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/5/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/9.jpg new file mode 100644 index 00000000..d19f0427 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/5/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/10.jpg new file mode 100644 index 00000000..80b0a64a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/11.jpg new file mode 100644 index 00000000..eea709ec Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/12.jpg new file mode 100644 index 00000000..aa6a10e8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/13.jpg new file mode 100644 index 00000000..368337f8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/14.jpg new file mode 100644 index 00000000..71fb6c58 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/15.jpg new file mode 100644 index 00000000..d9205fdf Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/16.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/17.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/18.jpg new file mode 100644 index 00000000..96c63fc4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/19.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/2.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/24.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/25.jpg new file mode 100644 index 00000000..1aa228d8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/26.jpg new file mode 100644 index 00000000..7c847619 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/3.jpg new file mode 100644 index 00000000..9a9b78d5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/4.jpg new file mode 100644 index 00000000..4873ea43 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/5.jpg new file mode 100644 index 00000000..0a283100 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/6.jpg new file mode 100644 index 00000000..cd7cadb1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/7.jpg new file mode 100644 index 00000000..f1b1773e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/8.jpg new file mode 100644 index 00000000..d19f0427 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/6/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/9.jpg new file mode 100644 index 00000000..d19f0427 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/6/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/1.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/10.jpg new file mode 100644 index 00000000..6075bb86 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/11.jpg new file mode 100644 index 00000000..19d926ff Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/12.jpg new file mode 100644 index 00000000..eea709ec Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/13.jpg new file mode 100644 index 00000000..06950c44 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/14.jpg new file mode 100644 index 00000000..70756c5f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/15.jpg new file mode 100644 index 00000000..170cddad Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/16.jpg new file mode 100644 index 00000000..94761db9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/17.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/18.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/19.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/2.jpg new file mode 100644 index 00000000..a1b34f3c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/24.jpg new file mode 100644 index 00000000..9ffc0627 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/25.jpg new file mode 100644 index 00000000..5f0b5ec1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/26.jpg new file mode 100644 index 00000000..33ef199f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/27.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/28.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/3.jpg new file mode 100644 index 00000000..1f84c69b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/4.jpg new file mode 100644 index 00000000..f0084d8c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/5.jpg new file mode 100644 index 00000000..7a5f918a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/6.jpg new file mode 100644 index 00000000..ef8eafec Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/7.jpg new file mode 100644 index 00000000..9e3fac26 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/8.jpg new file mode 100644 index 00000000..1203f0d9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/7/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/9.jpg new file mode 100644 index 00000000..dd273924 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/7/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/1.jpg new file mode 100644 index 00000000..44abfaea Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/10.jpg new file mode 100644 index 00000000..19abc9a0 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/11.jpg new file mode 100644 index 00000000..53747689 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/12.jpg new file mode 100644 index 00000000..af9d238c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/13.jpg new file mode 100644 index 00000000..0f6b1705 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/14.jpg new file mode 100644 index 00000000..8b13073b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/15.jpg new file mode 100644 index 00000000..f32a5c5e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/16.jpg new file mode 100644 index 00000000..1fb130c4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/17.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/18.jpg new file mode 100644 index 00000000..32564e30 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/19.jpg new file mode 100644 index 00000000..c6a1ee41 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/2.jpg new file mode 100644 index 00000000..d9903561 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/20.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/21.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/23.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/24.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/25.jpg new file mode 100644 index 00000000..236a6b46 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/26.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/27.jpg new file mode 100644 index 00000000..d3da859d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/28.jpg new file mode 100644 index 00000000..3574135d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/29.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/3.jpg new file mode 100644 index 00000000..993f41b5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/4.jpg new file mode 100644 index 00000000..d0203a36 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/5.jpg new file mode 100644 index 00000000..de6664e4 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/6.jpg new file mode 100644 index 00000000..1e836dff Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/7.jpg new file mode 100644 index 00000000..69a60f05 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/8.jpg new file mode 100644 index 00000000..1b514e95 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/8/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/9.jpg new file mode 100644 index 00000000..3e082512 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/8/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/0.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/0.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/0.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/1.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/1.jpg new file mode 100644 index 00000000..0851708a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/10.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/10.jpg new file mode 100644 index 00000000..4abc4229 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/10.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/11.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/11.jpg new file mode 100644 index 00000000..9ea113e1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/11.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/12.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/12.jpg new file mode 100644 index 00000000..18b82de2 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/12.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/13.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/13.jpg new file mode 100644 index 00000000..223c7de3 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/13.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/14.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/14.jpg new file mode 100644 index 00000000..daaf85cc Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/14.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/15.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/15.jpg new file mode 100644 index 00000000..0bc35aab Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/15.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/16.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/16.jpg new file mode 100644 index 00000000..64fb8a0b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/16.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/17.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/17.jpg new file mode 100644 index 00000000..ca0ca8a9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/17.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/18.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/18.jpg new file mode 100644 index 00000000..acb15e29 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/18.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/19.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/19.jpg new file mode 100644 index 00000000..e5a4ea10 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/19.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/2.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/2.jpg new file mode 100644 index 00000000..40925f20 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/20.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/20.jpg new file mode 100644 index 00000000..8780c67f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/20.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/21.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/21.jpg new file mode 100644 index 00000000..a9f5953c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/21.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/22.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/22.jpg new file mode 100644 index 00000000..d83a8cd8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/22.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/23.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/23.jpg new file mode 100644 index 00000000..e9626065 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/23.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/24.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/24.jpg new file mode 100644 index 00000000..71bc9178 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/24.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/25.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/25.jpg new file mode 100644 index 00000000..79ae00bb Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/25.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/26.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/26.jpg new file mode 100644 index 00000000..2dbb0af8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/26.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/27.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/27.jpg new file mode 100644 index 00000000..b27c33f9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/27.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/28.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/28.jpg new file mode 100644 index 00000000..d3a35297 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/28.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/29.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/29.jpg new file mode 100644 index 00000000..ece1fd02 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/29.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/3.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/3.jpg new file mode 100644 index 00000000..6d238f5b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/30.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/30.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/30.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/31.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/31.jpg new file mode 100644 index 00000000..4646c082 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/31.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/4.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/4.jpg new file mode 100644 index 00000000..5fd6da2a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/5.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/5.jpg new file mode 100644 index 00000000..4b5b080d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/6.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/6.jpg new file mode 100644 index 00000000..cd5c3e94 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/7.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/7.jpg new file mode 100644 index 00000000..91d98132 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/7.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/8.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/8.jpg new file mode 100644 index 00000000..bd4a36c0 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/8.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/map/5/9/9.jpg b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/9.jpg new file mode 100644 index 00000000..1f5f281f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/assets/map/5/9/9.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/assets/test.xml b/LearnFromMap/learnFromMap/src/main/assets/test.xml new file mode 100644 index 00000000..214ba1ac --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/assets/test.xml @@ -0,0 +1,212 @@ + + + + PPLC + FILL + Capital + + country + true + Capital of :X: is _________ + unique + name + + + PPLC + PIN + Capital + capital + country + true + Pin the capital of :X: + unique + location + + + PCLI + MCQ + Country + + country + true + What is the capital of :X: + unique + capital + + + PPLC + MCQ + Capital + + name + true + :X: is the capital of which country? + normal + country + + + MTS + MCQ + Mountain + + name + true + Mountain :X: is located in ______________ country. + normal + country + + + VLC + MCQ + Volcano + + name + true + Volcano :X: is located in ______________ country. + normal + country + + + PLN + FILL + Plains + + name + true + :X: (plains) is located in ______________ country. + normal + country + + + PEN + FILL + + Peninsula + name + true + :X: (peninsula) is located in ______________ country. + normal + country + + + ADM1 + PIN + States + state + state + true + Pin the :X: (state) + normal + state + + + VLC + PIN + Volcano + country + name + true + Pin the country in which :X: (volcano) is located + normal + country + + + ADM1 + PIN + States + country + name + true + Pin the country in which :X: (state) is located + normal + country + + + VLC + PIN + Volcano + name + name + true + Pin the volcano: :X: + normal + location + + + DSRT + PIN + Desert + country + name + true + Pin the country in which :X: (desert) is located + normal + country + + + FLLS + PIN + Waterfall + country + name + true + Pin the country in which :X: (waterfall) is located + normal + country + + + FLLS + PIN + Waterfall + name + name + true + Pin the location of :X: (waterfall) + normal + location + + + GLCR + PIN + Glacier + name + name + true + Pin the location of :X: (glacier) + normal + location + + + GLCR + PIN + Glacier + country + name + true + Pin the country in which :X: (glacier) is located + normal + country + + + MTS + PIN + Mountain + name + name + true + Pin the location of :X: (mountain range) + normal + location + + + MTS + PIN + Mountain + country + name + true + Pin the country in which :X: (mountain range) is located + normal + country + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/AppTutorial.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/AppTutorial.java new file mode 100644 index 00000000..bfa6e193 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/AppTutorial.java @@ -0,0 +1,146 @@ +package org.buildmlearn.learnfrommap; + +import android.support.v7.app.ActionBarActivity; +import android.support.v4.view.PagerAdapter; +import android.support.v4.view.ViewPager; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Parcelable; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; + +/** + * Activity used for displaying the App tutorial + * + * This activity uses a ViewPager to display static views defined the res/layout folder. + * + * @author Abhishek + * + */ +public class AppTutorial extends ActionBarActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_app_tutorial); + CustomPagerAdapter adapter = new CustomPagerAdapter(); + ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager); + myPager.setAdapter(adapter); + myPager.setCurrentItem(0); + } + + /* (non-Javadoc) + * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu) + */ + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.app_tutorial, menu); + return true; + } + + /* (non-Javadoc) + * @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem) + */ + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + if (id == R.id.action_settings) { + return true; + } + return super.onOptionsItemSelected(item); + } + + /** + * Custom Page Adapter used by View Pager + * + * @author Abhishek + */ + class CustomPagerAdapter extends PagerAdapter { + + /* (non-Javadoc) + * @see android.support.v4.view.PagerAdapter#instantiateItem(android.view.View, int) + */ + public Object instantiateItem(View collection, int position) { + getApplicationContext(); + //layout = inflater.inflate(R.layout.layout_evaluation, null); + LayoutInflater inflater = (LayoutInflater) collection.getContext() + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + int resId = 0; + switch (position) { + case 0: + resId = R.layout.swipe1; + break; + case 1: + resId = R.layout.swipe2; + break; + case 2: + resId = R.layout.swipe3; + break; + case 3: + resId = R.layout.swipe4; + break; + case 4: + resId = R.layout.swipe5; + break; + case 5: + resId = R.layout.swipe6; + break; + case 6: + resId = R.layout.swipe6; + Intent intent = new Intent(getApplicationContext(), MainActivity.class); + startActivity(intent); + finish(); + break; + } + View view = inflater.inflate(resId, null); + + ((ViewPager) collection).addView(view, 0); + return view; + } + + /* (non-Javadoc) + * @see android.support.v4.view.PagerAdapter#destroyItem(android.view.View, int, java.lang.Object) + */ + @Override + public void destroyItem(View arg0, int arg1, Object arg2) { + ((ViewPager) arg0).removeView((View) arg2); + + } + + + /* (non-Javadoc) + * @see android.support.v4.view.PagerAdapter#isViewFromObject(android.view.View, java.lang.Object) + */ + @Override + public boolean isViewFromObject(View arg0, Object arg1) { + return arg0 == ((View) arg1); + + } + + /* (non-Javadoc) + * @see android.support.v4.view.PagerAdapter#saveState() + */ + @Override + public Parcelable saveState() { + return null; + } + + /* (non-Javadoc) + * @see android.support.v4.view.PagerAdapter#getCount() + */ + @Override + public int getCount() { + return 7; + } + + } + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/AsyncTaskFragment.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/AsyncTaskFragment.java new file mode 100644 index 00000000..d7303576 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/AsyncTaskFragment.java @@ -0,0 +1,361 @@ +package org.buildmlearn.learnfrommap; + +import java.util.ArrayList; +import java.util.Date; +import java.util.Random; + +import org.buildmlearn.learnfrommap.databasehelper.Database; +import org.buildmlearn.learnfrommap.parser.XmlParser; +import org.buildmlearn.learnfrommap.questionmodule.DbRow; +import org.buildmlearn.learnfrommap.questionmodule.GeneratedQuestion; +import org.buildmlearn.learnfrommap.questionmodule.QuestionModuleException; +import org.buildmlearn.learnfrommap.questionmodule.XmlQuestion; +import org.buildmlearn.learnfrommap.questionmodule.GeneratedQuestion.Type; + +import android.app.Activity; +import android.content.Context; +import android.os.AsyncTask; +import android.os.Bundle; +import android.support.v4.app.Fragment; + +/** + * This class extends the Fragment class and is used to generate questions in a separate fragment. + * The main aim of generating questions in a different fragment is retain the state + * + * @author Abhishek + * + */ +public class AsyncTaskFragment extends Fragment { + + public static long lastSeed; + + private Context mContext; + + static interface TaskCallbacks { + void onPreExecute(); + void onProgressUpdate(int percent); + void onCancelled(); + void onPostExecute(Object questions); + } + + private TaskCallbacks mCallbacks; + private GenerateQuestions genQuesAsync; + private boolean mRunning; + private String mSelection; + private String mValue; + public int mQuestionCount; + private String mMode; + + /* (non-Javadoc) + * @see android.support.v4.app.Fragment#onAttach(android.app.Activity) + */ + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + mCallbacks = (TaskCallbacks) activity; + mContext = getActivity().getApplicationContext(); + } + + /* (non-Javadoc) + * @see android.support.v4.app.Fragment#onCreate(android.os.Bundle) + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + //mContext = getActivity().getApplicationContext(); + // Retain this fragment across configuration changes. + lastSeed = 0; + setRetainInstance(true); + Bundle bundle = getArguments(); + mSelection = bundle.getString("SELECTION"); + mValue = bundle.getString("VALUE"); + mQuestionCount = bundle.getInt("QUESTION_COUNT"); + mMode = bundle.getString("MODE"); + + // Create and execute the background task. + genQuesAsync = new GenerateQuestions(); + genQuesAsync.execute(); + mRunning = true; + + } + + /** + * Set the callback to null so we don't accidentally leak the + * Activity instance. + */ + // @Override + // public void onDetach() { + // super.onDetach(); + // mCallbacks = null; + // } + + + @Override + public void onDestroy() + { +// Log.i(TAG, "onDestroy()"); + super.onDestroy(); + cancel(); + } + + public void start() { + if (!mRunning) + { + genQuesAsync = new GenerateQuestions(); + genQuesAsync.execute(); + mRunning = true; + } + } + + /** + * Cancel the background task. + */ + public void cancel() { + if (mRunning) + { + genQuesAsync.cancel(false); + genQuesAsync = null; + mRunning = false; + } + } + + /** + * Returns the current state of the background task. + */ + public boolean isRunning() { + return mRunning; + } + + /** + * Following Async Task contains the question generation module + * + * + * + * @author Abhishek + * + */ + public class GenerateQuestions extends AsyncTask + { + private ArrayList questionList; + + @Override + protected ArrayList doInBackground(Void... params) { + int globalCount = 0; + + questionList = new ArrayList(); + Database db = new Database(mContext, 1, mContext.getFilesDir().getPath()); + XmlParser xmlParser = new XmlParser(mContext); + ArrayList questionRules = xmlParser.fetchQuestions(); + lastSeed += new Date().getTime(); + Random random = new Random(lastSeed); + ArrayList blackListRules = new ArrayList(); + ArrayList dbRows = new ArrayList(); + + //Where condition selection + //Explore Mode + String where = null; + if(mSelection.equals("CONTINENT")) + { + where = "continent = " + mValue; + } + else if(mSelection.equals("COUNTRY")) + { + try { + where = "country = " + db.getId("SELECT * FROM country WHERE name='" + mValue + "'"); + } catch (QuestionModuleException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + else + { + where = "1=1"; + } + + // + //Main logic starts here// + // + for(int i = 1; i<= mQuestionCount; i++) + { + int randomNo = random.nextInt(questionRules.size()); +// Log.d("Random", randomNo + ""); + XmlQuestion questionRule = questionRules.get(randomNo); + if(!blackListRules.contains(randomNo)) + { + if(mMode.equals("CLASSIC_MODE")) + { + if(questionRule.getAnswer().equals("country")) + { + blackListRules.add(randomNo); + i--; + continue; + } + if(questionRule.getCount().equals("unique")) + { + blackListRules.add(randomNo); + } + } + else if(mMode.equals("CATEGORY_MODE")) + { + if(!questionRule.getAlias().equals(mValue)) + { + blackListRules.add(randomNo); + i--; + continue; + } + } + questionRule.printRule(); +// Log.e("COUNT", i+ ""); + + + String tableName = questionRule.getCode(); + String query = "SELECT * FROM " + tableName + " WHERE "+ where +" LIMIT "; + String countQuery = "SELECT COUNT(*) FROM " + tableName + " WHERE " + where; + try { + DbRow row = null; + // + boolean loop = true; + boolean removeLoop = false; + int counter = 0; + while(loop) + { + boolean isPresent = false; + row = db.rawSelect(query, countQuery); + KeyHolder temp = new KeyHolder(questionRule.getCode(), row.getDataByColumnName(questionRule.getRelation()), row.getDataByColumnName(questionRule.getAnswer())); + for(KeyHolder holder : dbRows) + { + if(holder.equals(temp)) + { + isPresent = true; + break; + } + } + if(isPresent) + { + counter++; +// Log.d("DUPLICATE", "Duplicate"); + } + else + { +// Log.d("RESET GLOBAL COUNT", "0"); + globalCount = 0; + dbRows.add(temp); + loop = false; + } + if(counter == 10) + { + loop = false; + removeLoop = true; + } + + } + if(removeLoop) + { + blackListRules.add(randomNo); +// Log.d("REMOVED", "removed"); + i--; + continue; + } + + + // + String question = questionRule.getFormat().replace(":X:", row.getDataByColumnName(questionRule.getRelation())); + String answer = row.getDataByColumnName(questionRule.getAnswer()); + GeneratedQuestion genQues; + if(questionRule.getType() == XmlQuestion.Type.MultipleChoiceQuestion) + { + String[] options = db.createOptions(questionRule.getAnswer(), answer, questionRule.getCode()); + genQues = new GeneratedQuestion(row, questionRule, question, answer, options); + } + else if(questionRule.getType() == XmlQuestion.Type.FillBlanks) + { + genQues = new GeneratedQuestion(row, questionRule, question, answer, Type.Fill); + } + else + { + genQues = new GeneratedQuestion(row, questionRule, question, answer, Type.Pin); + } + questionList.add(genQues); + publishProgress(i); + } catch (QuestionModuleException e) { + blackListRules.add(randomNo); + i--; + e.printStackTrace(); + } + } + else + { + i--; + globalCount++; +// Log.d("GLOBAL COUNT", globalCount + ""); + if(globalCount == 200) + { + return null; + } + } + } + return questionList; + } + + @Override + protected void onPostExecute(Object result) { + super.onPostExecute(result); + if (mCallbacks != null) + { + mCallbacks.onPostExecute(result); + mRunning = false; + } + + } + + @Override + protected void onProgressUpdate(final Integer... values) { + super.onProgressUpdate(values); + if (mCallbacks != null) + { + mCallbacks.onProgressUpdate(values[0]); + } + } + + } + +} + +/** + * Key Holder is used as a holder class for code, relation and answer. The main purpose of this holder class is + * to find and delete duplicates in generated question. + * + * @author Abhishek + * + */ +class KeyHolder +{ + public String code; + public String relation; + public String answer; + + public KeyHolder(String code, String relation, String answer) { + super(); + this.code = code; + this.relation = relation; + this.answer = answer; + } + + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object o) { + KeyHolder x = (KeyHolder)o; + if(!this.answer.equals(x.answer)) + return false; +// if(!this.code.equals(x.code)) +// return false; + if(!this.relation.equals(x.relation)) + return false; + return true; + } + +} \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/CategoryActivity.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/CategoryActivity.java new file mode 100644 index 00000000..8db4f718 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/CategoryActivity.java @@ -0,0 +1,96 @@ +package org.buildmlearn.learnfrommap; + +import java.util.ArrayList; +import java.util.Collections; + +import org.buildmlearn.learnfrommap.adapter.CategoryAdapter; +import org.buildmlearn.learnfrommap.databasehelper.DatabaseHelper; +import org.buildmlearn.learnfrommap.helper.CustomDialog; +import org.buildmlearn.learnfrommap.helper.TextViewPlus; +import org.buildmlearn.learnfrommap.parser.XmlParser; +import org.buildmlearn.learnfrommap.questionmodule.XmlQuestion; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ListView; + +/** + * + * This activity shows the categories. + * + * @author Abhishek + * + */ +public class CategoryActivity extends DatabaseHelper { + + ListView mCategoryList; + ArrayList mCList; + CategoryAdapter mAdapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_category); + getSupportActionBar().setHomeButtonEnabled(true); + mCategoryList = (ListView)findViewById(R.id.listView_category); + mCList = new ArrayList(); + XmlParser parser = new XmlParser(getApplicationContext()); + ArrayList xmlList = parser.fetchQuestions(); + for(XmlQuestion temp: xmlList) + { + if(!mCList.contains(temp.getAlias())) + { + mCList.add(temp.getAlias()); + } + } + Collections.sort(mCList); + mAdapter = new CategoryAdapter(this, R.layout.listview_row_category_mode, mCList); + mCategoryList.setAdapter(mAdapter); + mCategoryList.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, + long arg3) { + + TextViewPlus categoryName = (TextViewPlus)arg1.findViewById(R.id.category); + //Toast.makeText(getApplicationContext(), categoryName.getText(), 1000).show(); + Intent intent = new Intent(getBaseContext(), GameActivity.class); + intent.putExtra("MODE", "CATEGORY_MODE"); + intent.putExtra("SELECTION", "CATEGORY"); + intent.putExtra("VALUE", categoryName.getText()); + intent.putExtra("LOCATION", "0,0"); + intent.putExtra("DISPLAY", "Category: " + categoryName.getText()); + startActivity(intent); + } + }); + + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.category, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + if (id == R.id.action_settings) { + CustomDialog.AboutDialog(CategoryActivity.this); + return true; + } + return super.onOptionsItemSelected(item); + } + + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/ClassicModeActivity.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/ClassicModeActivity.java new file mode 100644 index 00000000..4f8a1ec9 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/ClassicModeActivity.java @@ -0,0 +1,332 @@ +package org.buildmlearn.learnfrommap; + +import java.util.ArrayList; +import java.util.Collections; + +import org.buildmlearn.learnfrommap.databasehelper.Database; +import org.buildmlearn.learnfrommap.helper.CustomDialog; +import org.buildmlearn.learnfrommap.helper.TextViewPlus; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.Request.Method; +import com.android.volley.toolbox.StringRequest; +import com.android.volley.toolbox.Volley; + +import android.support.v7.app.ActionBarActivity; +import android.app.Dialog; +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.ColorDrawable; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; +import android.os.AsyncTask; +import android.os.Bundle; +import android.provider.Settings; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.Window; +import android.widget.ArrayAdapter; +import android.widget.RelativeLayout; +import android.widget.Spinner; +import android.widget.Toast; + +/** + * This activity shows the screen for classic mode + * + * @author Abhishek + * + */ +public class ClassicModeActivity extends ActionBarActivity { + + private LocationManager locationManager; + private LocationListener locationListener; + private Location location; + private Intent intent; + private Spinner spinner; + private RelativeLayout mLoading; + private RelativeLayout mMain; + private ArrayAdapter adapter; + private Dialog dialog; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getSupportActionBar().setHomeButtonEnabled(true); + setContentView(R.layout.activity_classic_mode); + spinner = (Spinner) findViewById(R.id.classic_spinner1); + mMain = (RelativeLayout)findViewById(R.id.classic_main); + mLoading = (RelativeLayout)findViewById(R.id.classic_load); + + intent = new Intent(getBaseContext(), GameActivity.class); + intent.putExtra("MODE", "CLASSIC_MODE"); + intent.putExtra("SELECTION", "COUNTRY"); + + locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); + location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); + + // Define a listener that responds to location updates + locationListener = new LocationListener() { + @Override + public void onLocationChanged(Location location) { + + getCountry(location.getLatitude(), location.getLongitude()); + } + + public void onStatusChanged(String provider, int status, Bundle extras) { + } + + public void onProviderEnabled(String provider) { + } + + public void onProviderDisabled(String provider) { + mLoading.setVisibility(View.GONE); + mMain.setVisibility(View.VISIBLE); + } + }; + new GetCountryList().execute(); + + } + + + + @Override + protected void onResume() { + super.onResume(); + mLoading.setVisibility(View.GONE); + mMain.setVisibility(View.VISIBLE); + } + + + /** + * Starts a new intent for the selected country from the drop down list. + * + * @param v + */ + public void customCountry(View v) + { + String country = spinner.getSelectedItem().toString(); + Database db = new Database(getApplicationContext()); + String locat = db.getCountryCoordinates(country); + + db.close(); + if(locat.equals("")) + { + Toast.makeText(getApplicationContext(), "Sorry, no questions in database for " + country, Toast.LENGTH_LONG).show(); + return; + } + intent.putExtra("VALUE", country); + intent.putExtra("DISPLAY", "Country: " + country); + intent.putExtra("LOCATION", locat); + startActivity(intent); + + } + + /** + * Shows a progress bar and tries to get user current location or displays a dialog box if location is disabled + * + * @param v + */ + public void loadLocation(View v) + { + // Register the listener with the Location Manager to receive location updates + if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) + { + mLoading.setVisibility(View.VISIBLE); + mMain.setVisibility(View.GONE); + if(location != null) + { + getCountry(location.getLatitude(), location.getLongitude()); + } + else + { + + try + { + locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, locationListener); + locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); + locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); + } + catch(IllegalArgumentException e) + { + Toast.makeText(getApplicationContext(), "There was some error fetching your location\nError: " + e.getMessage(), Toast.LENGTH_LONG).show(); + mLoading.setVisibility(View.GONE); + mMain.setVisibility(View.VISIBLE); + e.printStackTrace(); + } + + } + } + else + { + showConfirmDialog(); + } + + } + + /** + * + * Get country name from Geo coordinates + * + * @param lat + * @param lng + * + * + */ + private void getCountry(double lat, double lng) { + String googleurl = "https://maps.google.com/maps/api/geocode/json?key=AIzaSyACYVxd_d-49UnhqibCI6F9f7b5Gw1qTSc&"; +// Log.v("HTTP" , "Latitude is: " + lat + "Longitude is:" + lng); + StringBuilder sbuilder = new StringBuilder(); + sbuilder.append(googleurl); + + sbuilder.append("latlng=" + lat + "," + lng); + sbuilder.append("&sensor=true"); + String url = sbuilder.toString(); +// Log.v("URL", url); + StringRequest myReq = new StringRequest(Method.GET, + url, + new Response.Listener() { + @Override + public void onResponse(String response) { +// Log.d("VOLLEY", response); + try { + JSONObject main = new JSONObject(response); + JSONArray array = main.getJSONArray("results"); + JSONObject obj = array.getJSONObject(0); + array = obj.getJSONArray("address_components"); + for(int i=0; i + { + ArrayList countryList; + @Override + protected Void doInBackground(Void... arg0) { + Database db = new Database(getApplicationContext()); + countryList = db.countryList(); + Collections.sort(countryList); + db.close(); + return null; + } + + @Override + protected void onPostExecute(Void result) { + super.onPostExecute(result); + adapter = new ArrayAdapter(getApplicationContext(), R.layout.spinner_text_view, countryList); + // Specify the layout to use when the list of choices appears + adapter.setDropDownViewResource(R.layout.spinner_text_view_dropdown); + // Apply the adapter to the spinner + spinner.setAdapter(adapter); + } + + + + } + + + /** + * Shows a dialog box asking to enable location service from the settings + */ + protected void showConfirmDialog() { + dialog = new Dialog(ClassicModeActivity.this); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + dialog.setContentView(R.layout.dialog_location); + dialog.show(); + TextViewPlus yes = (TextViewPlus)dialog.findViewById(R.id.confirm_yes); + yes.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + dialog.dismiss(); + Intent myIntent = new Intent( Settings.ACTION_LOCATION_SOURCE_SETTINGS ); + startActivity(myIntent); + } + }); + TextViewPlus no = (TextViewPlus)dialog.findViewById(R.id.confirm_no); + no.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + } + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/ExploreMode.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/ExploreMode.java new file mode 100644 index 00000000..274a8e5c --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/ExploreMode.java @@ -0,0 +1,238 @@ +package org.buildmlearn.learnfrommap; + +import android.support.v7.app.ActionBarActivity; +import android.app.Dialog; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.Matrix; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.view.GestureDetector; +import android.view.Menu; +import android.view.MenuItem; +import android.view.MotionEvent; +import android.view.View; +import android.view.Window; +import android.view.View.OnTouchListener; +import android.widget.ImageView; +import android.widget.Toast; + + +/** + * This activity is shown for the explore mode. + * + * @author Abhishek + * + */ +public class ExploreMode extends ActionBarActivity { + + + private ImageView worldMap; + private Boolean isClicked = false; + private GestureDetector gestureDetector; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getSupportActionBar().setHomeButtonEnabled(true); + setContentView(R.layout.activity_explore_mode); + worldMap = (ImageView)findViewById(R.id.explore_world_map); + gestureDetector = new GestureDetector(this, new GestureListener(worldMap)); + worldMap.setOnTouchListener(worldMapTouchListener); + Toast.makeText(getApplicationContext(), "You may move the map sideways", Toast.LENGTH_SHORT).show(); + + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + super.onResume(); + isClicked = false; + } + + OnTouchListener worldMapTouchListener = new OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + + return gestureDetector.onTouchEvent(event); + } + }; + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.explore_mode, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + if (id == R.id.action_settings) { + showCustomDialog(); + return true; + } + return super.onOptionsItemSelected(item); + } + + /** + * Shows about dialog box + */ + protected void showCustomDialog() { + final Dialog dialog = new Dialog(ExploreMode.this); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + dialog.setContentView(R.layout.about_dialog); + dialog.show(); + } + + /** + * This class listens to various gestures performed on the world image, to select continents. + * + * @author Abhishek + * + */ + public class GestureListener extends + GestureDetector.SimpleOnGestureListener { + + private View v; + /** + * @param v + */ + public GestureListener(View v) + { + this.v = v; + + } + + /* (non-Javadoc) + * @see android.view.GestureDetector.SimpleOnGestureListener#onDown(android.view.MotionEvent) + */ + @Override + public boolean onDown(MotionEvent event) { + return true; + } + + /* (non-Javadoc) + * @see android.view.GestureDetector.SimpleOnGestureListener#onFling(android.view.MotionEvent, android.view.MotionEvent, float, float) + */ + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, + float velocityY) { + return true; + } + + /* (non-Javadoc) + * @see android.view.GestureDetector.SimpleOnGestureListener#onScroll(android.view.MotionEvent, android.view.MotionEvent, float, float) + */ + @Override + public boolean onScroll(MotionEvent e1, MotionEvent e2, + float distanceX, float distanceY) { + return true; + } + + /* (non-Javadoc) + * @see android.view.GestureDetector.SimpleOnGestureListener#onDoubleTap(android.view.MotionEvent) + */ + @Override + public boolean onDoubleTap(MotionEvent event) { + + float eventX = event.getX(); + float eventY = event.getY(); + float[] eventXY = new float[] {eventX, eventY}; + + Matrix invertMatrix = new Matrix(); + ((ImageView)v).getImageMatrix().invert(invertMatrix); + + invertMatrix.mapPoints(eventXY); + int x = Integer.valueOf((int)eventXY[0]); + int y = Integer.valueOf((int)eventXY[1]); + Drawable imgDrawable = ((ImageView)v).getDrawable(); + Bitmap bitmap = ((BitmapDrawable)imgDrawable).getBitmap(); + if(x < 0){ + x = 0; + }else if(x > bitmap.getWidth()-1){ + x = bitmap.getWidth()-1; + } + + if(y < 0){ + y = 0; + }else if(y > bitmap.getHeight()-1){ + y = bitmap.getHeight()-1; + } + + int touchedRGB = bitmap.getPixel(x, y); + String color = Integer.toHexString(touchedRGB); + String continent = ""; + String s = ""; + String loc = "0,0"; + if(color.equals("ffeeeeee")) + { + continent = "2"; + s = "Asia"; + loc = "46.2,86.6"; + } + else if(color.equals("ff333333")) + { + continent = "4"; + s = "North America"; + loc = "48.1667,-100.1667"; + } + else if(color.equals("ff999999")) + { + continent = "6"; + s = "South America"; + loc = "-13,-59.40"; + } + else if(color.equals("ff777777")) + { + continent = "1"; + s = "Africa"; + loc = "7.1881,21.0936"; + } + else if(color.equals("ffaaaaaa")) + { + continent = "3"; + s = "Europe"; + loc = "71.1333,27.7000"; + } + else if(color.equals("ffffffff")) + { + continent = "7"; + s = "Antarctica"; + loc = "-90,-0"; + } + else if(color.equals("ff555555")) + { + continent = "5"; + s = "Oceania"; + loc = "-30,140"; + } + if(continent.length() > 0 && !isClicked) + { + isClicked = true; + worldMap.setClickable(false); + Intent intent = new Intent(getApplicationContext(), GameActivity.class); + intent.putExtra("DISPLAY", "Continent: " + s); + intent.putExtra("MODE", "EXPLORE_MODE"); + intent.putExtra("SELECTION", "CONTINENT"); + intent.putExtra("LOCATION", loc); + intent.putExtra("VALUE", continent); + startActivity(intent); + return true; + + } + + return true; + + } + } + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/GameActivity.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/GameActivity.java new file mode 100644 index 00000000..098320b5 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/GameActivity.java @@ -0,0 +1,885 @@ +package org.buildmlearn.learnfrommap; + +import java.util.ArrayList; +import java.util.List; + +import org.buildmlearn.learnfrommap.helper.CustomDialog; +import org.buildmlearn.learnfrommap.helper.HelperFunctions; +import org.buildmlearn.learnfrommap.helper.ReverseGeoCodeJson; +import org.buildmlearn.learnfrommap.helper.TextViewPlus; +import org.buildmlearn.learnfrommap.helper.TinyDB; +import org.buildmlearn.learnfrommap.questionmodule.GeneratedQuestion; +import org.buildmlearn.learnfrommap.questionmodule.GeneratedQuestion.Type; +import org.buildmlearn.learnfrommap.questionmodule.QuestionModuleException; +import org.buildmlearn.learnfrommap.questionmodule.UserAnsweredData; + +import android.annotation.SuppressLint; +import android.app.Dialog; +import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.CountDownTimer; +import android.os.Handler; +import android.os.Parcelable; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.Window; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.Toast; + +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.Request.Method; +import com.android.volley.toolbox.StringRequest; +import com.android.volley.toolbox.Volley; +import com.google.android.gms.maps.CameraUpdate; +import com.google.android.gms.maps.CameraUpdateFactory; +import com.google.android.gms.maps.SupportMapFragment; +import com.google.android.gms.maps.model.BitmapDescriptorFactory; +import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.Marker; +import com.google.android.gms.maps.model.MarkerOptions; + +/** + * This activity is the backbone of the app and performs the question generation operation. + * + * @author Abhishek + * + */ +public class GameActivity extends Helper implements AsyncTaskFragment.TaskCallbacks { + + private static final String TAG_TASK_FRAGMENT = "task_fragment"; + public static final int QUESTION_COUNT = 10; + + private String mode; + private String mSelection; + private String mValue; + private ProgressBar mProgressBar; + private TextViewPlus mLoadingText; + private TextViewPlus mTimer; + private TextViewPlus mOption1; + private TextViewPlus mOption2; + private TextViewPlus mOption3; + private TextViewPlus mOption4; + private CountDownTimer mCountTimer; + private TextViewPlus mDisplayQuestion; + private int mSdk; + private int mSelectedOption; + private ArrayList mAnsweredList; + private RelativeLayout mMain; + private View mView; + private List mQuestion; + private int mQuestionCounter; + private GeneratedQuestion genQuestion; + private String[] options; + private boolean mIsAnswered; + private boolean mIsCorrect; + private String mDisplatMsg; + protected long timeLeft; + private Dialog dialog; + private LatLng mMapLocation; + private Marker userMarker; + private AsyncTaskFragment mTaskFragment; + private MediaPlayer mpCorrect; + private MediaPlayer mpWrong; + private TinyDB pref; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getSupportActionBar().setHomeButtonEnabled(true); + mSdk = android.os.Build.VERSION.SDK_INT; + mAnsweredList = new ArrayList(); + setContentView(R.layout.activity_game); + mQuestion = new ArrayList(); + mQuestionCounter = 0; + Intent intent = getIntent(); + mode = intent.getStringExtra("MODE"); + String mapLocation = intent.getStringExtra("LOCATION"); + mMapLocation = HelperFunctions.locationFromString(mapLocation); + mDisplatMsg = intent.getStringExtra("DISPLAY"); + mSelection = intent.getStringExtra("SELECTION"); + mValue = intent.getStringExtra("VALUE"); + mpCorrect = MediaPlayer.create(this, R.raw.correct_answer); + mpWrong = MediaPlayer.create(this, R.raw.wrong_answer); + pref = new TinyDB(getApplicationContext()); + + if(!pref.getBoolean("SOUND")) + { + mpCorrect.setVolume(0, 0); + mpWrong.setVolume(0, 0); + } + + + FragmentManager fm = getSupportFragmentManager(); + mTaskFragment = (AsyncTaskFragment) fm.findFragmentByTag(TAG_TASK_FRAGMENT); + + // If the Fragment is non-null, then it is currently being + // retained across a configuration change. + if (mTaskFragment == null) + { + mTaskFragment = new AsyncTaskFragment(); + Bundle bundle = new Bundle(); + bundle.putString("SELECTION", mSelection); + bundle.putString("VALUE", mValue); + bundle.putString("MODE", mode); + bundle.putInt("QUESTION_COUNT", QUESTION_COUNT); + fm.beginTransaction().add(mTaskFragment, TAG_TASK_FRAGMENT).commit(); + mTaskFragment.setArguments(bundle); + //mTaskFragment.start(); + } + mLoadingText = (TextViewPlus)findViewById(R.id.sett_tutorial); + mProgressBar = (ProgressBar)findViewById(R.id.game_progressbar); + mProgressBar.setMax(QUESTION_COUNT); + mProgressBar.setProgress(0); + if(mode.equals("EXPLORE_MODE")) + { + setTitle("Explore Mode"); + } + else if(mode.equals("CLASSIC_MODE")) + { + setTitle("Classic Mode"); + } + else if(mode.equals("CATEGORY_MODE")) + { + setTitle("Category Mode"); + } + mMain = (RelativeLayout)findViewById(R.id.main_layout); + mView = getLayoutInflater().inflate(R.layout.layout_play_game, mMain,false); + } + + /** + * Called when user clicks the start challenge button + * + * @param v + */ + public void startGame(View v) + { + loadQuestion(); + + } + + /** + * Called to load the next question + * + * @param v + */ + @SuppressLint("NewApi") + public void nextQuestion(View v) + { + final TextViewPlus button = (TextViewPlus)findViewById(R.id.next_btn); + if(button.getText().toString().equals("Submit")) + { + Boolean isCorrect = false; + mCountTimer.cancel(); + mCountTimer = null; + mTimer.setText(""); + if(genQuestion.getType() == Type.Mcq) + { + String answer = genQuestion.getAnswer(); + TextViewPlus[] options = {mOption1, mOption2, mOption3, mOption4}; + if(!mIsAnswered) + { + mTimer.setText("Correct answer is " + answer); + isCorrect = null; + HelperFunctions.updateStats(getApplicationContext(), false, genQuestion.getDbRow().getCountry()); + } + for(int i=0; i<4; i++) + { + + options[i].setClickable(false); + if(mIsAnswered && mSelectedOption == i) + { + if(options[i].getText().toString().equals(answer)) + { + mpCorrect.start(); + mTimer.setText("That's the correct answer!"); + isCorrect = true; + HelperFunctions.updateStats(getApplicationContext(), true, genQuestion.getDbRow().getCountry()); + } + else + { + HelperFunctions.updateStats(getApplicationContext(), false, genQuestion.getDbRow().getCountry()); + mTimer.setText("Sorry, wrong answer!"); + mpWrong.start(); + if(mSdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { + options[i].setBackgroundDrawable(getResources().getDrawable(R.drawable.wrong_answer)); + + } else { + options[i].setBackground(getResources().getDrawable(R.drawable.wrong_answer)); + } + } + } + + if(options[i].getText().toString().equals(answer)) + { + if(mSdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { + options[i].setBackgroundDrawable(getResources().getDrawable(R.drawable.right_answer)); + + } else { + options[i].setBackground(getResources().getDrawable(R.drawable.right_answer)); + } + } + } + + } + else if(genQuestion.getType() == Type.Fill) + { + EditText fillAnswer = (EditText)findViewById(R.id.fill_answer); + String userAnswer = fillAnswer.getText().toString(); + if(UserAnsweredData.CompareStrings(userAnswer, genQuestion.getAnswer()) > 0.95) + { + mpCorrect.start(); + mTimer.setText("That's the correct answer!"); + isCorrect = true; + } + else + { + mpWrong.start(); + mTimer.setText("Sorry, wrong answer!"); + } + if(userAnswer.length() == 0) + { + isCorrect = null; + } + fillAnswer.setVisibility(View.GONE); + TextViewPlus correctAnswer = (TextViewPlus)findViewById(R.id.fill_correct_answer); + correctAnswer.setText("Answer: " + genQuestion.getAnswer()); + LinearLayout layout = (LinearLayout) findViewById(R.id.answer_status); + if(isCorrect != null && isCorrect) + { + new Color(); + layout.setBackgroundColor(Color.argb(128, 102, 153, 00)); + HelperFunctions.updateStats(getApplicationContext(), true, genQuestion.getDbRow().getCountry()); + } + else if(isCorrect != null && !isCorrect) + { + layout.setBackgroundColor(Color.argb(128, 204, 00, 00)); + HelperFunctions.updateStats(getApplicationContext(), false, genQuestion.getDbRow().getCountry()); + } + + + + } + else if(genQuestion.getType() == Type.Pin) + { + mIsCorrect = false; + mTimer.setText("Please wait"); + button.setVisibility(View.INVISIBLE); + final ProgressBar progress = (ProgressBar)findViewById(R.id.map_progress1); + mapView.setOnMapClickListener(null); + marker.setDraggable(false); + progress.setVisibility(View.VISIBLE); + String url = HelperFunctions.geoCoderUrlBuilder(getPosition().latitude, getPosition().longitude); +// Log.v("URL", url); + StringRequest myReq = new StringRequest(Method.GET, url, new Response.Listener() + { + @Override + public void onResponse(String response) { +// Log.d("RESPONSE", response); + button.setVisibility(View.VISIBLE); + progress.setVisibility(View.INVISIBLE); + ReverseGeoCodeJson reGeoData = new ReverseGeoCodeJson(response); + String markerTitle = ""; + double userLat = marker.getPosition().latitude; + double userLng = marker.getPosition().longitude; + double ansLat = genQuestion.getDbRow().getLat(); + double andLng = genQuestion.getDbRow().getLng(); + double distance = HelperFunctions.distance(userLat, userLng, ansLat, andLng, 'K'); +// Log.e("Distance", "Distance between: " + distance); + if(!reGeoData.isHasError()) + { + + String answerColumn = genQuestion.getXml().getAnswer(); + try { + markerTitle = genQuestion.getDbRow().getDataByColumnName(genQuestion.getXml().getMarker()); + } catch (QuestionModuleException e) { + Toast.makeText(getApplicationContext(), "Invalid entry in \"marker\" in Xml", Toast.LENGTH_SHORT).show(); + e.printStackTrace(); + } + LatLng ansPosition = new LatLng(ansLat, andLng); + MarkerOptions markerOption; + try { + markerOption = new MarkerOptions().draggable(false).position(ansPosition).flat(true).title(genQuestion.getDbRow().getDataByColumnName(genQuestion.getXml().getMarker())).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); + } catch (QuestionModuleException e) { + markerOption = new MarkerOptions().draggable(false).position(ansPosition).flat(true).title(genQuestion.getDbRow().getName()).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); + e.printStackTrace(); + } + + if(answerColumn.equals("location")) + { + if(distance < 600) + { + mpCorrect.start(); + mIsCorrect = true; + marker.setPosition(new LatLng(ansLat, andLng)); + marker.setTitle(markerTitle); + marker.showInfoWindow(); + mTimer.setText("Your answer is correct but more accurate answer is shown below"); + marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); + } + else + { + mpWrong.start(); + mTimer.setText("Wrong answer!\nCorrect answer is shown below"); + mapView.addMarker(markerOption).showInfoWindow();; + } + CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(ansLat, andLng), 3); + getMaps().animateCamera(cameraUpdate); + } + else if(answerColumn.equals("state")) + { + if(reGeoData.getState().equals(genQuestion.getDbRow().getState())) + { + mpCorrect.start(); + mIsCorrect = true; + marker.setTitle(markerTitle); + marker.showInfoWindow(); + mTimer.setText("That's the correct answer!"); + marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); + } + else if(distance < 600) + { + mpCorrect.start(); + mIsCorrect = true; + marker.setPosition(new LatLng(ansLat, andLng)); + marker.setTitle(markerTitle); + marker.showInfoWindow(); + marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); + mTimer.setText("Your answer is correct but more accurate answer is shown below"); + CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(ansLat, andLng), 3); + getMaps().animateCamera(cameraUpdate); + } + else + { + mpWrong.start(); + mTimer.setText("Wrong answer!\nCorrect answer is shown below"); + mapView.addMarker(markerOption).showInfoWindow();; + marker.setTitle(reGeoData.getState()); + CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(ansLat, andLng), 3); + getMaps().animateCamera(cameraUpdate); + } + } + else if(answerColumn.equals("country")) + { + if(reGeoData.getCountry().equals(genQuestion.getDbRow().getCountry())) + { + mpCorrect.start(); + mIsCorrect = true; + marker.setTitle(markerTitle); + marker.showInfoWindow(); + mTimer.setText("That's the correct answer!"); + marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); + } + else if(distance < 600) + { + mpCorrect.start(); + mIsCorrect = true; + marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); + marker.setPosition(new LatLng(ansLat, andLng)); + marker.setTitle(markerTitle); + marker.showInfoWindow(); + mTimer.setText("Your answer is correct but more accurate answer is shown below"); + CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(ansLat, andLng), 3); + getMaps().animateCamera(cameraUpdate); + } + else + { + mpWrong.start(); + mTimer.setText("Wrong answer!\nCorrect answer is shown below"); + marker.setTitle(reGeoData.getCountry()); + mapView.addMarker(markerOption).showInfoWindow();; + CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(ansLat, andLng), 3); + getMaps().animateCamera(cameraUpdate); + } + } + else + { + Toast.makeText(getApplicationContext(), "Invalid entry in \"answer\" in Xml: " + genQuestion.getAnswer(), Toast.LENGTH_SHORT).show(); + } + } + else + { + LatLng ansPosition = new LatLng(ansLat, andLng); + MarkerOptions markerOption = new MarkerOptions().draggable(false).position(ansPosition).flat(true).title(genQuestion.getDbRow().getName()).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); + if(distance < 600) + { + mpCorrect.start(); + mIsCorrect = true; + marker.setPosition(new LatLng(ansLat, andLng)); + marker.setTitle(markerTitle); + marker.showInfoWindow(); + mTimer.setText("Your answer is correct but more accurate answer is shown below"); + marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); + } + else + { + mpWrong.start(); + mTimer.setText("Wrong answer!\nCorrect answer is shown below"); + mapView.addMarker(markerOption).showInfoWindow();; + } + CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(ansLat, andLng), 3); + getMaps().animateCamera(cameraUpdate); + } + + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + button.setVisibility(View.VISIBLE); + progress.setVisibility(View.INVISIBLE); +// Log.d("VOLLEY ERROR", error.getMessage() + ""); + double ansLat = genQuestion.getDbRow().getLat(); + double andLng = genQuestion.getDbRow().getLng(); + LatLng ansPosition = new LatLng(ansLat, andLng); + String markerTitle = ""; + try { + markerTitle = genQuestion.getDbRow().getDataByColumnName(genQuestion.getXml().getMarker()); + } catch (QuestionModuleException e) { + Toast.makeText(getApplicationContext(), "Invalid entry in \"marker\" in Xml", Toast.LENGTH_SHORT).show(); + e.printStackTrace(); + } + double userLat = marker.getPosition().latitude; + double userLng = marker.getPosition().longitude; + double distance = HelperFunctions.distance(userLat, userLng, ansLat, andLng, 'K'); +// Log.e("Distance", "Distance between: " + distance); + MarkerOptions markerOption = new MarkerOptions().draggable(false).position(ansPosition).flat(true).title(genQuestion.getDbRow().getName()).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); + if(distance < 600) + { + mpCorrect.start(); + mIsCorrect = true; + marker.setPosition(new LatLng(ansLat, andLng)); + marker.setTitle(markerTitle); + marker.showInfoWindow(); + mTimer.setText("Your answer is correct but more accurate answer is shown below"); + marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); + } + else + { + mpWrong.start(); + mTimer.setText("Wrong answer!\nCorrect answer is shown below"); + mapView.addMarker(markerOption).showInfoWindow(); + } + CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(ansLat, andLng), 3); + getMaps().animateCamera(cameraUpdate); + Toast.makeText(getApplicationContext(), "Network Error", Toast.LENGTH_SHORT).show(); +// Log.e("Volley Error", "Error :" + error.getMessage()); + } + }); + RequestQueue mQueue = Volley.newRequestQueue(this); + mQueue.add(myReq); + + } + button.setText("Next"); + } + else + { + loadNextQuestion(); + } + } + + /** + * Loads the next question + */ + public void loadNextQuestion() + { + + if(mQuestion.get(mQuestionCounter-1).getType() == Type.Pin) + { + android.support.v4.app.Fragment fragment = (getSupportFragmentManager().findFragmentById(R.id.mapFragment)); + if(fragment != null) + { + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.remove(getSupportFragmentManager().findFragmentById(R.id.mapFragment)).commit(); + getSupportFragmentManager().popBackStackImmediate(); + mMain.removeAllViews(); + } + } + loadQuestion(); + } + + /** + * Handles the UI changes whenever any option is clicked in MCQ type questions. + * + * @param v + */ + @SuppressLint("NewApi") + public void onOptionClick(View v) + { + switch (v.getId()) { + case R.id.mcq_option1: + if(mSdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { + mOption1.setBackgroundDrawable(getResources().getDrawable(R.drawable.button_click)); + mOption2.setBackgroundDrawable(getResources().getDrawable(R.drawable.border_white)); + mOption4.setBackgroundDrawable(getResources().getDrawable(R.drawable.border_white)); + mOption3.setBackgroundDrawable(getResources().getDrawable(R.drawable.border_white)); + + } else { + mOption1.setBackground(getResources().getDrawable(R.drawable.button_click)); + mOption2.setBackground(getResources().getDrawable(R.drawable.border_white)); + mOption3.setBackground(getResources().getDrawable(R.drawable.border_white)); + mOption4.setBackground(getResources().getDrawable(R.drawable.border_white)); + } + mSelectedOption = 0; + break; + case R.id.mcq_option2: + if(mSdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { + mOption2.setBackgroundDrawable(getResources().getDrawable(R.drawable.button_click)); + mOption1.setBackgroundDrawable(getResources().getDrawable(R.drawable.border_white)); + mOption3.setBackgroundDrawable(getResources().getDrawable(R.drawable.border_white)); + mOption4.setBackgroundDrawable(getResources().getDrawable(R.drawable.border_white)); + } else { + mOption2.setBackground(getResources().getDrawable(R.drawable.button_click)); + mOption1.setBackground(getResources().getDrawable(R.drawable.border_white)); + mOption3.setBackground(getResources().getDrawable(R.drawable.border_white)); + mOption4.setBackground(getResources().getDrawable(R.drawable.border_white)); + } + mSelectedOption = 1; + break; + case R.id.mcq_option3: + if(mSdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { + mOption3.setBackgroundDrawable(getResources().getDrawable(R.drawable.button_click)); + mOption2.setBackgroundDrawable(getResources().getDrawable(R.drawable.border_white)); + mOption1.setBackgroundDrawable(getResources().getDrawable(R.drawable.border_white)); + mOption4.setBackgroundDrawable(getResources().getDrawable(R.drawable.border_white)); + } else { + mOption3.setBackground(getResources().getDrawable(R.drawable.button_click)); + mOption2.setBackground(getResources().getDrawable(R.drawable.border_white)); + mOption1.setBackground(getResources().getDrawable(R.drawable.border_white)); + mOption4.setBackground(getResources().getDrawable(R.drawable.border_white)); + } + mSelectedOption = 2; + break; + case R.id.mcq_option4: + if(mSdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { + mOption4.setBackgroundDrawable(getResources().getDrawable(R.drawable.button_click)); + mOption2.setBackgroundDrawable(getResources().getDrawable(R.drawable.border_white)); + mOption3.setBackgroundDrawable(getResources().getDrawable(R.drawable.border_white)); + mOption1.setBackgroundDrawable(getResources().getDrawable(R.drawable.border_white)); + } else { + mOption4.setBackground(getResources().getDrawable(R.drawable.button_click)); + mOption2.setBackground(getResources().getDrawable(R.drawable.border_white)); + mOption3.setBackground(getResources().getDrawable(R.drawable.border_white)); + mOption1.setBackground(getResources().getDrawable(R.drawable.border_white)); + } + mSelectedOption = 3; + break; + default: + break; + } + mIsAnswered = true; + + } + + @SuppressWarnings("unchecked") + public void loadQuestion() + { + if(mQuestionCounter > 0) + { + String question = genQuestion.getQuestion(); + String answer = genQuestion.getAnswer(); + UserAnsweredData userAnswerData; + if(genQuestion.getType() == Type.Fill) + { + EditText fillAnswer = (EditText)findViewById(R.id.fill_answer); + String userAnswer = fillAnswer.getText().toString(); + userAnswerData = new UserAnsweredData(getApplicationContext(), question, answer, userAnswer, genQuestion.getType(), genQuestion.getXml().getAnswer()); + + } + else if(genQuestion.getType() == Type.Mcq) + { + String userAnswer; + if(mIsAnswered) + { + userAnswer = options[mSelectedOption]; + } + else + { + userAnswer = ""; + } + userAnswerData = new UserAnsweredData(question, answer, userAnswer, genQuestion.getType(), genQuestion.getXml().getAnswer(), options, mIsAnswered); + + } + else + { + LatLng postion = getPosition(); + String userAnswer; + if(postion != null) + { + userAnswer = postion.latitude + "," + postion.longitude; + } + else + { + userAnswer = ""; + } + userAnswerData = new UserAnsweredData(getApplicationContext(), question, answer, userAnswer, genQuestion.getType(), genQuestion.getXml().getAnswer()); + userAnswerData.evaluatePin(mIsCorrect); + HelperFunctions.updateStats(getApplicationContext(), mIsCorrect, genQuestion.getDbRow().getCountry()); + } + mAnsweredList.add(userAnswerData); + + } + if(mQuestionCounter == QUESTION_COUNT) + { + Intent intent = new Intent(getApplicationContext(), ScoreActivity.class); + intent.putParcelableArrayListExtra("SCORE_DATA", (ArrayList) mAnsweredList); + startActivity(intent); + finish(); + return; + } + genQuestion = mQuestion.get(mQuestionCounter++); + if(genQuestion.getType() == Type.Fill) + { + mView = getLayoutInflater().inflate(R.layout.layout_fill, mMain,false); + mMain.removeAllViews(); + mMain.addView(mView); + mDisplayQuestion = (TextViewPlus)findViewById(R.id.sett_tutorial); + mDisplayQuestion.setText(genQuestion.getQuestion()); + startTimer(60000); + + } + else if(genQuestion.getType() == Type.Mcq) + { + mIsAnswered = false; + mView = getLayoutInflater().inflate(R.layout.activity_mcq, mMain,false); + mMain.removeAllViews(); + mMain.addView(mView); + mDisplayQuestion = (TextViewPlus)findViewById(R.id.sett_tutorial); + mDisplayQuestion.setText(genQuestion.getQuestion()); + mOption1 = (TextViewPlus)findViewById(R.id.mcq_option1); + mOption2 = (TextViewPlus)findViewById(R.id.mcq_option2); + mOption3 = (TextViewPlus)findViewById(R.id.mcq_option3); + mOption4 = (TextViewPlus)findViewById(R.id.mcq_option4); + String[] temp = genQuestion.getOption(); + String[] _options = {temp[0], temp[1], temp[2], genQuestion.getAnswer()}; + options = _options; + HelperFunctions.ShuffleArray(options); + mOption1.setText(options[0]); + mOption2.setText(options[1]); + mOption3.setText(options[2]); + mOption4.setText(options[3]); + startTimer(60000); + } + else + { + mView = getLayoutInflater().inflate(R.layout.activity_map, mMain,false); + mMain.removeAllViews(); + mMain.addView(mView); + mDisplayQuestion = (TextViewPlus)findViewById(R.id.sett_tutorial); + mDisplayQuestion.setText(genQuestion.getQuestion()); + new Handler().post(new Runnable() { + + @Override + public void run() { + getMapView((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapFragment), mMapLocation); + + } + }); + } + + getSupportActionBar().setTitle("Question " + mQuestionCounter + " of " + QUESTION_COUNT); + + } + + @Override + protected void onPause() { + if(mCountTimer != null) + { + mCountTimer.cancel(); + } + super.onPause(); + + } + + @Override + protected void onResume() { + if(mCountTimer != null) + { + startTimer((int)timeLeft); + } + super.onResume(); + } + + @Override + protected void onSaveInstanceState(Bundle savedInstanceState) { + super.onSaveInstanceState(savedInstanceState); + savedInstanceState.putLong("TIME", timeLeft); + if(mCountTimer != null) + { + mCountTimer.cancel(); + } + } + + @Override + protected void onRestoreInstanceState(Bundle savedInstanceState) { + super.onRestoreInstanceState(savedInstanceState); + timeLeft = savedInstanceState.getLong("TIME"); + } + + /** + * Starts a new timer for every question. + * + * @param timer + */ + private void startTimer(int timer) + { + mTimer = (TextViewPlus)findViewById(R.id.timer); + mCountTimer = new CountDownTimer(timer, 1000) { + @Override + public void onTick(long millisUntilFinished) { + mTimer.setText("Time remaining: " + millisUntilFinished / 1000); + timeLeft = millisUntilFinished; + } + @Override + public void onFinish() { + nextQuestion(null); + } + }.start(); + } + + /* (non-Javadoc) + * @see org.buildmlearn.learnfrommap.Helper#onMapReady() + */ + @Override + public void onMapReady() { + super.onMapReady(); + ProgressBar loading = (ProgressBar)findViewById(R.id.map_progress); + loading.setVisibility(View.GONE); + startTimer(90000); + userMarker = marker; + userMarker.setDraggable(false); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.game, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + if (id == R.id.action_settings) { + CustomDialog.AboutDialog(GameActivity.this); + return true; + } + else if(id == android.R.id.home) + { + showConfirmDialog(); + return true; + + } + return super.onOptionsItemSelected(item); + } + + /** + * Called on back button pressed + */ + public void customBackPressed() + { + super.onBackPressed(); + } + + /** + * Shows a confirmation dialog box whenever the user tries to leave the current challenge. + */ + protected void showConfirmDialog() { + dialog = new Dialog(GameActivity.this); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + dialog.setContentView(R.layout.dialog_confirm); + dialog.show(); + TextViewPlus yes = (TextViewPlus)dialog.findViewById(R.id.confirm_yes); + yes.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + dialog.dismiss(); + customBackPressed(); + } + }); + TextViewPlus no = (TextViewPlus)dialog.findViewById(R.id.confirm_no); + no.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + } + + public void Confirm(View v) + { + if(v.getId() == R.id.confirm_yes) + { + super.onBackPressed(); + } + else + { + dialog.dismiss(); + } + } + + @Override + public void onBackPressed() { + showConfirmDialog(); + } + + @Override + public void onPreExecute() { + // TODO Auto-generated method stub + + } + + @Override + public void onProgressUpdate(final int percent) { + mProgressBar.setProgress(percent); + + runOnUiThread(new Runnable() { + public void run() { + mLoadingText.setText("Loading question " + percent + " of " + QUESTION_COUNT); + } + }); + } + + @Override + public void onCancelled() { + // TODO Auto-generated method stub + + } + + @SuppressWarnings("unchecked") + @Override + public void onPostExecute(Object question) { + if(question == null) + { + Toast.makeText(getApplicationContext(), "Currently " + mValue + " is not supported", Toast.LENGTH_LONG).show(); + finish(); + } + mQuestion = (ArrayList)question; + mMain.removeAllViews(); + mMain.addView(mView); + TextViewPlus selection = (TextViewPlus)findViewById(R.id.play_selection); + selection.setText(mDisplatMsg); + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.remove(getSupportFragmentManager().findFragmentByTag(TAG_TASK_FRAGMENT)).commit(); + getSupportFragmentManager().popBackStackImmediate(); + + } + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/Helper.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/Helper.java new file mode 100644 index 00000000..926f983e --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/Helper.java @@ -0,0 +1,327 @@ +package org.buildmlearn.learnfrommap; + +import org.buildmlearn.learnfrommap.databasehelper.Database; +import org.buildmlearn.learnfrommap.maphelper.CustomTileProvider; + +import com.google.android.gms.common.ConnectionResult; +import com.google.android.gms.common.GooglePlayServicesUtil; +import com.google.android.gms.maps.CameraUpdate; +import com.google.android.gms.maps.CameraUpdateFactory; +import com.google.android.gms.maps.GoogleMap; +import com.google.android.gms.maps.SupportMapFragment; +import com.google.android.gms.maps.GoogleMap.OnCameraChangeListener; +import com.google.android.gms.maps.model.CameraPosition; +import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.Marker; +import com.google.android.gms.maps.model.MarkerOptions; +import com.google.android.gms.maps.model.TileOverlayOptions; + +import android.content.Context; +import android.content.pm.FeatureInfo; +import android.content.pm.PackageManager; +import android.database.sqlite.SQLiteDatabase; +import android.location.Location; +import android.os.Handler; +import android.support.v7.app.ActionBarActivity; +import android.widget.Toast; + +public class Helper extends ActionBarActivity { + + public GoogleMap mapView; + public Location myLocation; + private SupportMapFragment mapFragment; + private Handler handler; + private MarkerOptions markerOptions; + public Marker marker; + + + + /** + * Called whenever the maps are successfully loaded + */ + public void onMapReady() { + mapView.setOnCameraChangeListener(new OnCameraChangeListener() { + @Override + public void onCameraChange(CameraPosition cameraPosition) { + if (cameraPosition.zoom > (float) 5.0) { + mapView.animateCamera(CameraUpdateFactory + .zoomTo((float) 5.99)); + } + + } + }); + mapView.setOnMapClickListener(new GoogleMap.OnMapClickListener() { + + + + @Override + public void onMapClick(LatLng arg0) { + if(marker != null) + { + marker.remove(); + } + markerOptions = new MarkerOptions().draggable(true).position(arg0).flat(true).title("Your Answer"); + marker = mapView.addMarker(markerOptions); + } + }); + + } + + /** + * @return GoogleMap + */ + public GoogleMap getMaps() + { + return mapView; + + } + + /** + * @return Marker position + */ + public LatLng getPosition() + { + if(marker != null) + { + return marker.getPosition(); + } + return null; + + } + + /** + * Check if the map is ready + * + * @return true if map is ready + * + */ + public boolean isMapReady() { + return mapView != null; + } + + /** + * Error message if map is not successfully loaded + * + * @param msg + */ + public void showErrorMessage(String msg) { + + } + + /** + * Called when database is successfully opened + * + * @param msg + */ + public void onDatabaseLoad(String msg) { + + } + + /** + * Called if there is any database error + * + * @param msg + */ + public void onDatabaseLoadError(String msg) { + + } + + // ////////////////Public Function ////////////////// + + public void getMapView(SupportMapFragment mapFragment, LatLng loc) { + this.handler = new Handler(); + this.mapFragment = mapFragment; + CheckMap(loc); + } + + public void queryDatabase(String where, String[] whereArgs, String orderBy, + String limit) { + class QueryDatabase implements Runnable { + public QueryDatabase(String where, String[] whereArgs, + String orderBy, String limit) { + super(); + } + + @Override + public void run() { + Database main_db = new Database(getApplicationContext()); + main_db.getReadableDatabase(); + if (getApplicationContext() != null) { + runOnUiThread(new Runnable() { + @Override + public void run() { + Toast.makeText(getApplicationContext(), + "Successfull", Toast.LENGTH_LONG).show(); + } + }); + } + + } + + } + + Thread t = new Thread(new QueryDatabase(where, whereArgs, orderBy, + limit)); + t.start(); + } + + public void loadDatabase() { + new Thread(new Runnable() { + + String msg; + + @Override + public void run() { + try { + Database main_db = new Database(getApplicationContext()); + SQLiteDatabase db = main_db.getReadableDatabase(); + db.close(); + main_db.close(); + msg = "Successfull"; + Thread.sleep(500); + if (getApplicationContext() != null) { + runOnUiThread(new Runnable() { + @Override + public void run() { + onDatabaseLoad(msg); + } + }); + } + } catch (Exception e) { + msg = "Error loading database\nError: " + e.getMessage(); + if (getApplicationContext() != null) { + runOnUiThread(new Runnable() { + @Override + public void run() { + onDatabaseLoadError(msg); + } + }); + } + + } + + } + }).start(); + + } + + // ////////////////Private Function ////////////////// + + private void setUpMap(final LatLng loc) { + handler.post(new Runnable() { + + + @Override + public void run() { + mapView = mapFragment.getMap(); + if (mapView == null) { + handler.postDelayed(this, 1000); + } else { + mapView.setMyLocationEnabled(false); + mapView.setMapType(GoogleMap.MAP_TYPE_NONE); + mapView.addTileOverlay(new TileOverlayOptions() + .tileProvider(new CustomTileProvider(getResources() + .getAssets(), mapView))); + markerOptions = new MarkerOptions().draggable(true).position(loc).flat(true).title("Your Answer"); + marker = mapView.addMarker(markerOptions); + CameraUpdate yourLocation = CameraUpdateFactory.newLatLngZoom(loc, 2); + mapView.animateCamera(yourLocation); + //marker = null; + if (getApplicationContext() != null) { + runOnUiThread(new Runnable() { + + @Override + public void run() { + onMapReady(); + + } + }); + } + } + + } + }); + + } + + private void CheckMap(final LatLng loc) { + + new Thread(new Runnable() { + + @Override + public void run() { + int playServiceStatus = GooglePlayServicesUtil + .isGooglePlayServicesAvailable(getApplication()); + + if (playServiceStatus == ConnectionResult.SUCCESS) { + if (getVersionFromPackageManager(getApplicationContext()) >= 2) { + setUpMap(loc); + if (getApplicationContext() != null) { + runOnUiThread(new Runnable() { + @Override + public void run() { + showErrorMessage("Google Maps present"); + } + }); + } + } else { + // OpenGL version is not supported + if (getApplicationContext() != null) { + runOnUiThread(new Runnable() { + @Override + public void run() { + showErrorMessage("Maps cannot be loaded: OpenGL version is less than 2"); + } + }); + } + } + } else if (GooglePlayServicesUtil + .isUserRecoverableError(playServiceStatus)) { + runOnUiThread(new Runnable() { + @Override + public void run() { + showErrorMessage("Google Play services not present"); + } + }); + } else { + if (getApplicationContext() != null) { + runOnUiThread(new Runnable() { + @Override + public void run() { + showErrorMessage("Unknown Error"); + } + }); + } + } + + } + + }).start(); + + } + + private int getVersionFromPackageManager(Context context) { + PackageManager packageManager = context.getPackageManager(); + FeatureInfo[] featureInfos = packageManager + .getSystemAvailableFeatures(); + if (featureInfos != null && featureInfos.length > 0) { + for (FeatureInfo featureInfo : featureInfos) { + // Null feature name means this feature is the open + // GLes version feature. + if (featureInfo.name == null) { + if (featureInfo.reqGlEsVersion != FeatureInfo.GL_ES_VERSION_UNDEFINED) { + return getMajorVersion(featureInfo.reqGlEsVersion); + } else { + return 1; + } + } + } + } + return 1; + } + + private int getMajorVersion(int glEsVersion) { + return ((glEsVersion & 0xffff0000) >> 16); + } + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/MainActivity.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/MainActivity.java new file mode 100644 index 00000000..7df6d617 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/MainActivity.java @@ -0,0 +1,146 @@ +package org.buildmlearn.learnfrommap; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; + +import org.buildmlearn.learnfrommap.helper.CustomDialog; +import org.buildmlearn.learnfrommap.helper.HelperFunctions; +import org.buildmlearn.learnfrommap.helper.StatHolder; +import org.buildmlearn.learnfrommap.helper.TextViewPlus; + +import android.support.v7.app.ActionBarActivity; +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.LinearLayout; + +/** + * This activity is the home screen consisting of all the modes and options + * + * @author Abhishek + * + */ +public class MainActivity extends ActionBarActivity { + + private TextViewPlus c1; + private TextViewPlus p1; + private TextViewPlus c2; + private TextViewPlus p2; + private TextViewPlus c3; + private TextViewPlus p3; + private ArrayList data; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + getSupportActionBar().setHomeButtonEnabled(true); + + } + + @Override + protected void onResume() { + super.onResume(); +// Log.e("Called", "OnResume"); + data = HelperFunctions.bindStat(getApplicationContext()); + + Collections.sort(data, new Comparator(){ + + @Override + public int compare(StatHolder a, StatHolder b) { + return a.getAnswered() < b.getAnswered() ? 1 : -1; + } + }); + + c1 = (TextViewPlus)findViewById(R.id.c1); + c2 = (TextViewPlus)findViewById(R.id.c2); + c3 = (TextViewPlus)findViewById(R.id.c3); + p1 = (TextViewPlus)findViewById(R.id.p1); + p2 = (TextViewPlus)findViewById(R.id.p2); + p3 = (TextViewPlus)findViewById(R.id.p3); + c1.setText(data.get(0).getCountry()); + c2.setText(data.get(1).getCountry()); + c3.setText(data.get(2).getCountry()); + p1.setText(data.get(0).getAnswered() + "/" + data.get(0).getTotal()); + p2.setText(data.get(1).getAnswered() + "/" + data.get(1).getTotal()); + p3.setText(data.get(2).getAnswered() + "/" + data.get(2).getTotal()); + if(data.get(0).getAnswered() == 0) + { + LinearLayout statsLl = (LinearLayout)findViewById(R.id.main_top_countries); + statsLl.setVisibility(View.GONE); + TextViewPlus noStatMsg = (TextViewPlus)findViewById(R.id.main_no_country_msg); + noStatMsg.setVisibility(View.VISIBLE); + } + } + + /** + * Called whenever any button is clicked + * + * @param v + */ + public void loadMode(View v) + { + int id = v.getId(); + Intent intent; + switch (id) { + case R.id.expore_mode: + intent = new Intent(getApplicationContext(), ExploreMode.class); + startActivity(intent); + break; + case R.id.classic_mode: + intent = new Intent(getApplicationContext(), ClassicModeActivity.class); + startActivity(intent); + break; + case R.id.category_mode: + intent = new Intent(getApplicationContext(), CategoryActivity.class); + startActivity(intent); + break; + case R.id.settings: + intent = new Intent(getApplicationContext(), SettingsActivity.class); + startActivity(intent); + break; + + default: + break; + } + } + + /** + * Called whenever user clicks "more info" and starts the stat activity. + * + * @param v + */ + public void loadStats(View v) + { + Intent intent = new Intent(getApplicationContext(), StatisticsActivity.class); + startActivity(intent); + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + if (id == R.id.action_settings) { + CustomDialog.AboutDialog(MainActivity.this); + return true; + } + return super.onOptionsItemSelected(item); + } + + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/NotificationService.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/NotificationService.java new file mode 100644 index 00000000..7b3390ca --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/NotificationService.java @@ -0,0 +1,18 @@ +package org.buildmlearn.learnfrommap; + +import org.buildmlearn.learnfrommap.service.AlarmService; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class NotificationService extends BroadcastReceiver { + + public void onReceive(Context context, Intent arg1) { +// Log.d("Autostart", "BOOT_COMPLETED broadcast received. Executing starter service."); +// Toast.makeText(context, "Learn From Map", Toast.LENGTH_SHORT).show(); + Intent intent = new Intent(context, AlarmService.class); + context.startService(intent); + } + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/ScoreActivity.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/ScoreActivity.java new file mode 100644 index 00000000..c7be371e --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/ScoreActivity.java @@ -0,0 +1,72 @@ +package org.buildmlearn.learnfrommap; + +import java.util.ArrayList; + +import org.buildmlearn.learnfrommap.adapter.ScoreAdapter; +import org.buildmlearn.learnfrommap.helper.CustomDialog; +import org.buildmlearn.learnfrommap.helper.TextViewPlus; +import org.buildmlearn.learnfrommap.questionmodule.UserAnsweredData; + +import android.support.v7.app.ActionBarActivity; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.widget.ListView; + +public class ScoreActivity extends ActionBarActivity { + + private ScoreAdapter mAdapter; + private ListView mQuestionList; + private ArrayList mAnsweredList; + private TextViewPlus mPoints; + private TextViewPlus mCount; + + @SuppressWarnings("unchecked") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_score); + getSupportActionBar().setHomeButtonEnabled(true); + mQuestionList = (ListView)findViewById(R.id.score_question_list); + mAnsweredList = (ArrayList) getIntent().getSerializableExtra("SCORE_DATA"); + mPoints = (TextViewPlus)findViewById(R.id.score_points); + mCount = (TextViewPlus)findViewById(R.id.score_count); + int count = 0; + int points = 0; + for (UserAnsweredData userAnswer : mAnsweredList) { + if(userAnswer.isAnswerCorrect()) + { + count++; + points += userAnswer.getmPoints(); + } + } + + mPoints.setText(String.valueOf(points)); + mCount.setText(count + "/" + GameActivity.QUESTION_COUNT); + mAdapter = new ScoreAdapter(this, R.layout.listview_row_mcq, mAnsweredList); + mQuestionList.setAdapter(mAdapter); + + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.score, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + if (id == R.id.action_settings) { + CustomDialog.AboutDialog(ScoreActivity.this); + return true; + } + return super.onOptionsItemSelected(item); + } + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/SettingsActivity.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/SettingsActivity.java new file mode 100644 index 00000000..9777161a --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/SettingsActivity.java @@ -0,0 +1,106 @@ +package org.buildmlearn.learnfrommap; + +import org.buildmlearn.learnfrommap.helper.TinyDB; + +import android.support.v7.app.ActionBarActivity; +import android.content.ActivityNotFoundException; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.CheckBox; +import android.widget.Toast; + +/** + * This activty shows the settings of the screen + * + * @author Abhishek + * + */ +public class SettingsActivity extends ActionBarActivity { + + private CheckBox notification; + private CheckBox sound; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_settings); + notification = (CheckBox)findViewById(R.id.sett_noti); + sound= (CheckBox)findViewById(R.id.sett_sound); + final TinyDB pref = new TinyDB(getApplicationContext()); + boolean sound_pref = pref.getBoolean("SOUND"); + boolean noti_pref = pref.getBoolean("NOTI"); + notification.setChecked(noti_pref); + sound.setChecked(sound_pref); + + notification.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View arg0) { + pref.putBoolean("NOTI", notification.isChecked()); + } + }); + + sound.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View arg0) { + pref.putBoolean("SOUND", sound.isChecked()); + } + }); + + } + + public void settingsClick(View v) + { + int id = v.getId(); + switch (id) { + case R.id.sett_tutorial: + Intent intent = new Intent(getApplicationContext(), AppTutorial.class); + startActivity(intent); + finish(); + break; + case R.id.sett_rate: + Uri uri = Uri.parse("market://details?id=" + getPackageName()); + Intent myAppLinkToMarket = new Intent(Intent.ACTION_VIEW, uri); + try { + startActivity(myAppLinkToMarket); + } catch (ActivityNotFoundException e) { + Toast.makeText(this, " unable to find market app", Toast.LENGTH_LONG).show(); + } + break; + + default: + break; + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.settings, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + if (id == R.id.action_settings) { + return true; + } + return super.onOptionsItemSelected(item); + } + + + + + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/SplashActivity.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/SplashActivity.java new file mode 100644 index 00000000..003c1df1 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/SplashActivity.java @@ -0,0 +1,164 @@ +package org.buildmlearn.learnfrommap; + +import java.util.ArrayList; +import java.util.Collections; + +import org.buildmlearn.learnfrommap.databasehelper.Database; +import org.buildmlearn.learnfrommap.databasehelper.DatabaseHelper; +import org.buildmlearn.learnfrommap.helper.TinyDB; + +import android.content.Context; +import android.content.Intent; +import android.graphics.BitmapFactory; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.os.AsyncTask; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.ProgressBar; +import android.widget.TextView; + +/** + * Starting activity of the app. Handles database loading and internet check + * + * @author Abhishek + * + */ +public class SplashActivity extends DatabaseHelper { + + private int mData; + private TinyDB pref; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_splash); + loadDatabase(); + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + BitmapFactory.decodeResource(getResources(), R.id.explore_world_map, options); + pref = new TinyDB(getApplicationContext()); + ArrayList list1 = pref.getList("NAME"); +// Log.e("SIZE", list1.size() + ""); + mData = pref.getInt("TUTORIAL"); +// Log.e("CHECK", "Data: " + pref.getInt("TUTORIAL")); + + + } + + /* (non-Javadoc) + * @see org.buildmlearn.learnfrommap.databasehelper.DatabaseHelper#onDatabaseLoad(java.lang.String) + */ + @Override + public void onDatabaseLoad(String msg) { + super.onDatabaseLoad(msg); + ProgressBar pb = (ProgressBar)findViewById(R.id.splash_loading); + pb.setVisibility(View.GONE); + ConnectivityManager cm = + (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); + + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); + boolean isConnected = activeNetwork != null && + activeNetwork.isConnectedOrConnecting(); + if (!isConnected) + { + TextView tvMsg = (TextView)findViewById(R.id.splash_msg); + tvMsg.setText("Error: Your device is not connected to internet"); + tvMsg.setVisibility(View.VISIBLE); + pb.setVisibility(View.GONE); + } + else + { + new GetCountryList().execute(); + } + } + + /* (non-Javadoc) + * @see org.buildmlearn.learnfrommap.databasehelper.DatabaseHelper#onDatabaseLoadError(java.lang.String) + */ + @Override + public void onDatabaseLoadError(String msg) { + super.onDatabaseLoadError(msg); + TextView tvMsg = (TextView)findViewById(R.id.splash_msg); + ProgressBar pb = (ProgressBar)findViewById(R.id.splash_loading); + tvMsg.setText(msg); + tvMsg.setVisibility(View.VISIBLE); + pb.setVisibility(View.GONE); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.splash, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + if (id == R.id.action_settings) { + return true; + } + return super.onOptionsItemSelected(item); + } + + /** + * @author Abhishek + * + */ + public class GetCountryList extends AsyncTask + { + ArrayList countryList; + @Override + protected Void doInBackground(Void... arg0) { + Database db = new Database(getApplicationContext()); + countryList = db.countryList(); + Collections.sort(countryList); + TinyDB pref = new TinyDB(getApplicationContext()); + ArrayList temp = pref.getList("COUNTRY"); + if(temp.size() == 0) + { +// Log.e("SHARED PRED", "Init"); + pref.putList("COUNTRY", countryList); + ArrayList tempScore = new ArrayList(); + for(int i=0; i mData; + private ListView mStatList; + private StatsAdapter mAdapter; + public static final String[] colors = {"#CCFF8800", "#CC9933CC", "#CCCC0000", "#CC669900", "#CC0099CC"}; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_statistics); + getSupportActionBar().setHomeButtonEnabled(true); + mData = HelperFunctions.bindStat(getApplicationContext()); + Collections.sort(mData); + int total = 0; + for(int i=0; i3) + { + temp.setColor(colors[4]); + total += temp.getTotal(); + } + else + { + temp.setColor(colors[i]); + } + mData.set(i, temp); + + } + + mStatList = (ListView)findViewById(R.id.listView_stats); + mAdapter = new StatsAdapter(this, R.layout.listview_row_stat, mData); + mStatList.setAdapter(mAdapter); + + PieGraph pg = (PieGraph)findViewById(R.id.graph); + PieSlice slice = new PieSlice(); + slice.setColor(Color.parseColor(colors[0])); + pg.addSlice(slice); + slice = new PieSlice(); + slice.setColor(Color.parseColor(colors[1])); + pg.addSlice(slice); + slice = new PieSlice(); + slice.setColor(Color.parseColor(colors[2])); + pg.addSlice(slice); + slice = new PieSlice(); + slice.setColor(Color.parseColor(colors[3])); + pg.addSlice(slice); + slice = new PieSlice(); + slice.setColor(Color.parseColor(colors[4])); + pg.addSlice(slice); + pg.setInnerCircleRatio(200); + pg.setPadding(2); + int count = 0; + for (PieSlice s : pg.getSlices()) + { + s.setValue((float) Math.random() * 10); + if(count < 4) + + s.setGoalValue(mData.get(count).getTotal()); + else + s.setGoalValue(total); + count++; + } + pg.setDuration(1000);//default if unspecified is 300 ms + pg.setInterpolator(new AccelerateDecelerateInterpolator());//default if unspecified is linear; constant speed + //pg.setAnimationListener(getAnimationListener());//optional + pg.animateToGoalValues(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.statistics, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + if (id == R.id.action_settings) { + return true; + } + return super.onOptionsItemSelected(item); + } + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/Test.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/Test.java new file mode 100644 index 00000000..d0987e5f --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/Test.java @@ -0,0 +1,62 @@ +package org.buildmlearn.learnfrommap; + +import android.support.v7.app.ActionBarActivity; +import android.support.v4.app.Fragment; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; + +public class Test extends ActionBarActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_test); + + if (savedInstanceState == null) { + getSupportFragmentManager().beginTransaction() + .add(R.id.container, new PlaceholderFragment()).commit(); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.test, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + if (id == R.id.action_settings) { + return true; + } + return super.onOptionsItemSelected(item); + } + + /** + * A placeholder fragment containing a simple view. + */ + public static class PlaceholderFragment extends Fragment { + + public PlaceholderFragment() { + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_test, container, + false); + return rootView; + } + } + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/adapter/CategoryAdapter.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/adapter/CategoryAdapter.java new file mode 100644 index 00000000..5f9a1df8 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/adapter/CategoryAdapter.java @@ -0,0 +1,45 @@ +package org.buildmlearn.learnfrommap.adapter; + +import java.util.ArrayList; + +import org.buildmlearn.learnfrommap.R; +import org.buildmlearn.learnfrommap.helper.TextViewPlus; + +import android.app.Activity; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; + +/** + * Adapter for the category list view + * + * @author Abhishek + * + */ +public class CategoryAdapter extends ArrayAdapter { + + private Context mContext; + private int mLayoutResource; + private ArrayList mData; + + public CategoryAdapter(Context context, int resource, ArrayList data) { + super(context, resource, data); + this.mContext = context; + this.mData = data; + this.mLayoutResource = resource; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View row = convertView; + TextViewPlus categoryName; + LayoutInflater inflator = ((Activity) mContext).getLayoutInflater(); + row = inflator.inflate(mLayoutResource, parent, false); + categoryName = (TextViewPlus)row.findViewById(R.id.category); + categoryName.setText(mData.get(position)); + return row; + } + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/adapter/ScoreAdapter.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/adapter/ScoreAdapter.java new file mode 100644 index 00000000..22ff37f6 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/adapter/ScoreAdapter.java @@ -0,0 +1,271 @@ +package org.buildmlearn.learnfrommap.adapter; + +import java.util.ArrayList; + +import org.buildmlearn.learnfrommap.R; +import org.buildmlearn.learnfrommap.helper.TextViewPlus; +import org.buildmlearn.learnfrommap.questionmodule.GeneratedQuestion.Type; +import org.buildmlearn.learnfrommap.questionmodule.UserAnsweredData; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; + +/** + * Adapter for the question displayed in a listview in score activity + * + * @author Abhishek + * + */ +public class ScoreAdapter extends ArrayAdapter { + + + private static final int MCQ = 0; + private static final int FILL = 1; + private static final int PIN = 2; + private Context mContext; + private ArrayList mData; + private int mListResourceId; + + public ScoreAdapter(Context context, int listResourceId, + ArrayList data) { + super(context, listResourceId, data); + this.mListResourceId = listResourceId; + this.mContext = context; + this.mData = data; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if(getItemViewType(position) == MCQ) + { + View row = convertView; + UserAnsweredData userAnswer = mData.get(position); + AnswerHolderMcq holder = null; + if(row == null) + { + holder = new AnswerHolderMcq(); + LayoutInflater inflator = ((Activity)mContext).getLayoutInflater(); + row = inflator.inflate(mListResourceId, parent, false); + holder.question = (TextViewPlus)row.findViewById(R.id.list_question); + holder.option1 = (TextViewPlus)row.findViewById(R.id.option1); + holder.option2 = (TextViewPlus)row.findViewById(R.id.option2); + holder.option3 = (TextViewPlus)row.findViewById(R.id.option3); + holder.option4 = (TextViewPlus)row.findViewById(R.id.option4); + holder.isCorrect = (ImageView)row.findViewById(R.id.answer_status); + row.setTag(holder); + } + else + { + holder = (AnswerHolderMcq)row.getTag(); + } + holder.data = userAnswer; + holder.question.setText("Ques" + (position + 1) + ": " + holder.data.getmQuestion()); + + holder.option1.setText(holder.data.getmOptions()[0]); + holder.option2.setText(holder.data.getmOptions()[1]); + holder.option3.setText(holder.data.getmOptions()[2]); + holder.option4.setText(holder.data.getmOptions()[3]); + holder.option1.setBackgroundColor(Color.TRANSPARENT); + holder.option2.setBackgroundColor(Color.TRANSPARENT); + holder.option3.setBackgroundColor(Color.TRANSPARENT); + holder.option4.setBackgroundColor(Color.TRANSPARENT); + + + if(userAnswer.isAnswered()) + { + if(holder.data.getmUserAnswer().equals(holder.data.getmAnswer())) + { + if(holder.data.getmUserAnswer().equals(holder.data.getmOptions()[0])) + { + holder.option1.setBackgroundResource(R.drawable.right_answer); + } + else if(holder.data.getmUserAnswer().equals(holder.data.getmOptions()[1])) + { + holder.option2.setBackgroundResource(R.drawable.right_answer); + } + else if(holder.data.getmUserAnswer().equals(holder.data.getmOptions()[2])) + { + holder.option3.setBackgroundResource(R.drawable.right_answer); + } + else + { + holder.option4.setBackgroundResource(R.drawable.right_answer); + } + } + else + { + if(!holder.data.getmUserAnswer().equals(holder.data.getmAnswer())) + { + if(holder.data.getmUserAnswer().equals(holder.data.getmOptions()[0])) + { + holder.option1.setBackgroundResource(R.drawable.wrong_answer); + } + else if(holder.data.getmUserAnswer().equals(holder.data.getmOptions()[1])) + { + holder.option2.setBackgroundResource(R.drawable.wrong_answer); + } + else if(holder.data.getmUserAnswer().equals(holder.data.getmOptions()[2])) + { + holder.option3.setBackgroundResource(R.drawable.wrong_answer); + } + else + { + holder.option4.setBackgroundResource(R.drawable.wrong_answer); + } + } + } + } + if(holder.data.getmAnswer().equals(holder.data.getmOptions()[0])) + { + holder.option1.setBackgroundResource(R.drawable.right_answer); + } + else if(holder.data.getmAnswer().equals(holder.data.getmOptions()[1])) + { + holder.option2.setBackgroundResource(R.drawable.right_answer); + } + else if(holder.data.getmAnswer().equals(holder.data.getmOptions()[2])) + { + holder.option3.setBackgroundResource(R.drawable.right_answer); + } + else + { + holder.option4.setBackgroundResource(R.drawable.right_answer); + } + if(holder.data.isAnswerCorrect()) + { + holder.isCorrect.setImageResource(R.drawable.ic_action_accept); + } + else + { + holder.isCorrect.setImageResource(R.drawable.ic_action_cancel); + } + + return row; + + } + else if(getItemViewType(position) == FILL) + { + + View row = convertView; + UserAnsweredData userAnswer = mData.get(position); + AnswerHolderFill holder = null; + if(row == null) + { + holder = new AnswerHolderFill(); + LayoutInflater inflator = ((Activity)mContext).getLayoutInflater(); + row = inflator.inflate(R.layout.listview_row_fill, parent, false); + holder.question = (TextViewPlus)row.findViewById(R.id.list_question); + holder.answer = (TextViewPlus)row.findViewById(R.id.answer); + holder.isCorrect = (ImageView)row.findViewById(R.id.answer_status); + row.setTag(holder); + } + else + { + holder = (AnswerHolderFill)row.getTag(); + } + holder.data = userAnswer; + holder.question.setText("Ques" + (position + 1) + ": " + holder.data.getmQuestion()); + holder.answer.setText("Answer: " + holder.data.getmAnswer()); + if(holder.data.isAnswerCorrect()) + { + holder.isCorrect.setImageResource(R.drawable.ic_action_accept); + } + else + { + holder.isCorrect.setImageResource(R.drawable.ic_action_cancel); + } + return row; + } + else + { + View row = convertView; + UserAnsweredData userAnswer = mData.get(position); + AnswerHolderPin holder = null; + if(row == null) + { + holder = new AnswerHolderPin(); + LayoutInflater inflator = ((Activity)mContext).getLayoutInflater(); + row = inflator.inflate(R.layout.listview_row_map, parent, false); + holder.question = (TextViewPlus)row.findViewById(R.id.list_question); + holder.isCorrect = (ImageView)row.findViewById(R.id.answer_status); + row.setTag(holder); + } + else + { + holder = (AnswerHolderPin)row.getTag(); + } + holder.data = userAnswer; + holder.question.setText("Ques" + (position + 1) + ": " + holder.data.getmQuestion()); + if(holder.data.isAnswerCorrect()) + { + holder.isCorrect.setImageResource(R.drawable.ic_action_accept); + } + else + { + holder.isCorrect.setImageResource(R.drawable.ic_action_cancel); + } + return row; + } + } + + @Override + public int getViewTypeCount() { + return 3; + } + + @Override + public int getItemViewType(int position) { + UserAnsweredData userData = mData.get(position); + if(userData.getmQuestionType() == Type.Fill) + { + return FILL; + } + else if(userData.getmQuestionType() == Type.Mcq) + { + return MCQ; + } + else + { + return PIN; + } + } + + static class AnswerHolderMcq + { + public TextViewPlus question; + public TextViewPlus option1; + public TextViewPlus option2; + public TextViewPlus option3; + public TextViewPlus option4; + public UserAnsweredData data; + public ImageView isCorrect; + + + } + + static class AnswerHolderFill + { + public TextViewPlus answer; + public UserAnsweredData data; + public TextViewPlus question; + public ImageView isCorrect; + + } + + static class AnswerHolderPin + { + public UserAnsweredData data; + public TextViewPlus question; + public ImageView isCorrect; + } + + + + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/adapter/StatsAdapter.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/adapter/StatsAdapter.java new file mode 100644 index 00000000..503387c4 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/adapter/StatsAdapter.java @@ -0,0 +1,74 @@ +package org.buildmlearn.learnfrommap.adapter; + +import java.util.ArrayList; + +import org.buildmlearn.learnfrommap.R; +import org.buildmlearn.learnfrommap.helper.StatHolder; +import org.buildmlearn.learnfrommap.helper.TextViewPlus; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; + +/** + * Adapter for the countries displayed in a list in statistics activity + * + * @author Abhishek + * + */ +public class StatsAdapter extends ArrayAdapter { + + private Context mContext; + private int mResource; + private ArrayList mData; + + public StatsAdapter(Context context, int resource, ArrayList data) { + super(context, resource, data); + this.mContext = context; + this.mData = data; + this.mResource = resource; + } + + + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View row = convertView; + StatHolder stat = mData.get(position); + Holder holder = null; + if(row == null) + { + holder = new Holder(); + LayoutInflater inflator = ((Activity)mContext).getLayoutInflater(); + row = inflator.inflate(mResource, parent, false); + holder.country = (TextViewPlus)row.findViewById(R.id.country_name); + holder.legend = (View)row.findViewById(R.id.legend); + holder.stats = (TextViewPlus)row.findViewById(R.id.stat_data); + row.setTag(holder); + } + else + { + holder = (Holder)row.getTag(); + } + holder.country.setText(stat.getCountry()); + holder.stats.setText(stat.getAnswered() + "/" + stat.getTotal()); + new Color(); + holder.legend.setBackgroundColor(Color.parseColor(stat.getColor())); + return row; + } + + + + static class Holder + { + TextViewPlus country; + TextViewPlus stats; + View legend; + } +} + + diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/databasehelper/Database.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/databasehelper/Database.java new file mode 100644 index 00000000..af74c33d --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/databasehelper/Database.java @@ -0,0 +1,432 @@ +package org.buildmlearn.learnfrommap.databasehelper; + +import java.util.ArrayList; +import java.util.Date; +import java.util.Random; + +import org.buildmlearn.learnfrommap.questionmodule.DbRow; +import org.buildmlearn.learnfrommap.questionmodule.QuestionModuleException; + +import com.readystatesoftware.sqliteasset.SQLiteAssetHelper; + +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; + +public class Database extends SQLiteAssetHelper { + + public static String DB_PATH; + public SQLiteDatabase database; + public Context context; + private SQLiteDatabase db; + private static final String DB_NAME = "data_test12.db"; + private static final int DATABASE_VERSION = 1; + private static long lastSeed; + + public Database(Context context) { + super(context, DB_NAME, null, DATABASE_VERSION); + } + + public Database(Context context, int i , String path) { + super(context, DB_NAME, path, null, DATABASE_VERSION); +// Log.d("Database", "Opening readable database"); + db = getReadableDatabase(); + } + + public SQLiteDatabase getDb() { + return database; + } + + public void closeReadableDatabase() + { +// Log.d("Database", "Cloasing database"); + db.close(); + } + + + + @Override + public synchronized void close() { + if (database != null) { + + database.close(); + } + super.close(); + } + + + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {} + + public String getId(String query) throws QuestionModuleException + { + return getId(query, 0); + } + + /** + * @return ArrayList containing countries + */ + public ArrayList countryList() + { + ArrayList list = new ArrayList(); + db = getReadableDatabase(); + Cursor cursor = db.rawQuery("SELECT name FROM country", null); + if(cursor.moveToFirst()) + { + do + { + list.add(cursor.getString(0)); + } + while(cursor.moveToNext()); + } + cursor.close(); + db.close(); + return list; + + } + + /** + * @param country + * @return country coordinates + */ + public String getCountryCoordinates(String country) + { + String query = "SELECT _id FROM country WHERE name='" + country + "'"; + db = getReadableDatabase(); + Cursor cursor = db.rawQuery(query, null); + String code; + if(cursor.moveToFirst()) + { + code = cursor.getString(0); +// Log.e("Country Code", code); + query = "SELECT lat, lng FROM pcli WHERE country=" + code; + Cursor cursor1 = db.rawQuery(query, null); + if(cursor1.moveToFirst()) + { + String lat = cursor1.getString(0); + String lng = cursor1.getString(1); +// Log.e("Location", lat + "," + lng); + cursor1.close(); + return lat + "," + lng; + } + else + { + cursor1.close(); + return ""; + } + + } + else + { + cursor.close(); + return ""; + } + } + + /** + * @param query + * @param columnIndex + * @return id for a country or state + * @throws QuestionModuleException + */ + public String getId(String query, int columnIndex) throws QuestionModuleException + { + Cursor cursor =db.rawQuery(query, null); + if(cursor.moveToFirst()) + { + if(cursor.getCount() == 1) + { + return cursor.getString(columnIndex); + + } + else + { + throw new QuestionModuleException("getId() :" + cursor.getCount() + " results returned for " + query); + } + } + else + { + throw new QuestionModuleException("getId(): MoveToFirst null for " + query); + } + + } + + /** + * @return String to be displayed in Notification panel + */ + public String getNotificationMsg() + { + db = getReadableDatabase(); + Cursor cursor = db.rawQuery("SELECT name, capital FROM country", null); + Random random = new Random(new Date().getTime()); + if(cursor.moveToFirst()) + { + int pos = random.nextInt(cursor.getCount()); + cursor.move(pos); + String country = cursor.getString(0); + String capital = cursor.getString(1); + cursor.close(); + db.close(); + return "Did you know that the capital of "+ country + " is "+capital+"? Play challenges to brush up your geography knowledge."; + } + else + { + cursor.close(); + db.close(); + return "Play challenges to brush up your geography knowledge."; + } + + + } + + + /** + * @param query + * @param countQuery + * @return Database row for the given query + * @throws QuestionModuleException + */ + public DbRow rawSelect(String query,String countQuery) throws QuestionModuleException + { + int randomNo = 0; + Cursor cursor = db.rawQuery(countQuery, null); + if(cursor.moveToFirst()) + { + if(cursor.getCount() == 1) + { + int c = cursor.getInt(0); + if(c == 0) + { + throw new QuestionModuleException("No of rows: 0 for " + countQuery); + } + Random random = new Random(lastSeed + new Date().getTime()); + randomNo = random.nextInt(c); + lastSeed = randomNo; + } + else + { + throw new QuestionModuleException(cursor.getCount() + " results returned for " + query); + } + } + else + { + throw new QuestionModuleException("Cursor Error: Count(*)"); + } + cursor.close(); + String x = query + randomNo + ", 1"; + //Actual query + cursor = db.rawQuery(x, null); + if(cursor.moveToFirst()) + { + if(cursor.getCount() == 1) + { + //Store it in RowDb class object + int id = cursor.getInt(0); + String name = cursor.getString(1); + float lat = cursor.getFloat(2); + float lng = cursor.getFloat(3); + int contId = cursor.getInt(4); + String continent = null; + switch (contId) { + case 1: + continent = "Africa"; + break; + case 2: + continent = "Asia"; + break; + case 3: + continent = "Europe "; + break; + case 4: + continent = "North America"; + break; + case 5: + continent = "Oceania"; + break; + case 6: + continent = "South America"; + break; + case 7: + continent = "Antarctica"; + break; + default: + continent = "-1"; + break; + } + int countryId = cursor.getInt(5); + String country; + String capital; + if(countryId != -1) + { + query = "SELECT * FROM country WHERE _id = " + countryId; + Cursor subCursor = db.rawQuery(query, null); + if(subCursor.moveToFirst()) + { + int s = subCursor.getCount(); + if(s == 1) + { + country = subCursor.getString(1); + capital = subCursor.getString(2); + subCursor.close(); + } + else + { + throw new QuestionModuleException("subCursor returned: " + s); + } + + + } + else + { + throw new QuestionModuleException("subCursor move to first error for query: " + query); + } + } + else + { + country = "-1"; + capital = "-1"; + } + int stateId = cursor.getInt(6); + String state; + if(stateId != -1) + { + query = "SELECT * FROM state WHERE _id = " + stateId; + Cursor subCursor = db.rawQuery(query, null); + if(subCursor.moveToFirst()) + { + int s = subCursor.getCount(); + if(s == 1) + { + state = subCursor.getString(1); + subCursor.close(); + } + else + { + throw new QuestionModuleException("subCursor returned: " + s); + } + + + } + else + { + throw new QuestionModuleException("subCursor move to first error for query: " + query); + } + } + else + { + state ="-1"; + } + int population = cursor.getInt(7); + int elevation = cursor.getInt(8); + DbRow row = new DbRow(id, lng, lat, name, country, capital, state, continent, population, elevation); + return row; + } + else + { + throw new QuestionModuleException(cursor.getCount() + " results returned for " + query); + } + } + else + { + //db.close(); + throw new QuestionModuleException("Cursor Error"); + } + + } + + + /** + * Creates options for the MCQ type of questions + * + * @param columnName + * @param answer + * @param table + * @return String array consisting of options + * @throws QuestionModuleException + */ + public String[] createOptions(String columnName, String answer, String table) throws QuestionModuleException + { + String tableName; + String column; + answer = answer.replaceAll("'", "''"); + if(columnName.equals("state")) + { + tableName = "state"; + column = "name"; + + } + else if(columnName.equals("country") || columnName.equals("capital")) + { + tableName = "country"; + column = "name"; + } + else + { + tableName = table; + column = columnName; + } + String countQuery = "SELECT COUNT(*) FROM " + tableName + " WHERE " + column + " != '" + answer + "'"; + int randomNo = 0; + Cursor cursor = db.rawQuery(countQuery, null); + if(cursor.moveToFirst()) + { + if(cursor.getCount() == 1) + { + int c = cursor.getInt(0); + if(c == 0) + { + throw new QuestionModuleException("No of rows: 0 for " + countQuery); + } + Random random = new Random(lastSeed + new Date().getTime()); + randomNo = random.nextInt(c); + lastSeed = randomNo; + } + else + { + throw new QuestionModuleException(cursor.getCount() + " results returned for " + countQuery); + } + } + else + { + throw new QuestionModuleException("Cursor Error: Count(*)"); + } + cursor.close(); + randomNo -= 3; + if(randomNo <= 0 ) + { + randomNo = 1; + } + String query = "SELECT " + column + " FROM " + tableName + " WHERE " + column + " != '" + answer + "' LIMIT " + randomNo + ", 3"; + cursor = db.rawQuery(query, null); + if(cursor.moveToFirst()) + { + if(cursor.getCount() == 3) + { + int i = 0; + String[] option = new String[3]; + do + { + option[i] = cursor.getString(0); + i++; + + } + while(cursor.moveToNext()); + return option; + } + else + { + throw new QuestionModuleException("Invalid row count while creating options: Count " + cursor.getCount()); + } + } + else + { + throw new QuestionModuleException("Cursor Error: MoveToFirst"); + } + + + + } + +} + diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/databasehelper/DatabaseHelper.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/databasehelper/DatabaseHelper.java new file mode 100644 index 00000000..35e00ea9 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/databasehelper/DatabaseHelper.java @@ -0,0 +1,116 @@ +package org.buildmlearn.learnfrommap.databasehelper; + +import org.buildmlearn.learnfrommap.maphelper.MapHelper; + +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.widget.Toast; + +public class DatabaseHelper extends MapHelper { + + private static final String TABLE_NAME = "main"; + + public void queryDatabase(String where, String[] whereArgs, String orderBy, String limit) + { + class QueryDatabase implements Runnable + { + String where; + String[] whereArgs; + String orderBy; + String limit; + public QueryDatabase(String where, String[] whereArgs, + String orderBy, String limit) { + super(); + this.where = where; + this.whereArgs = whereArgs; + this.orderBy = orderBy; + this.limit = limit; + } + @Override + public void run() { + Database main_db = new Database(getApplicationContext()); + SQLiteDatabase db = main_db.getReadableDatabase(); + Cursor cursor = db.query(TABLE_NAME, null, where, whereArgs, null, null, orderBy, limit); + if (getApplicationContext() != null) + { + runOnUiThread(new Runnable() + { + @Override + public void run() + { + Toast.makeText(getApplicationContext() + , "Successfull", Toast.LENGTH_LONG).show(); + } + }); + } + + } + + } + + Thread t = new Thread(new QueryDatabase(where, whereArgs, orderBy, limit)); + t.start(); + } + + public void loadDatabase() + { + new Thread(new Runnable() { + + String msg; + + @Override + public void run() { + try + { + Database main_db = new Database(getApplicationContext()); + SQLiteDatabase db = main_db.getReadableDatabase(); + db.close(); + main_db.close(); + msg = "Successfull"; + Thread.sleep(1000); + if (getApplicationContext() != null) + { + runOnUiThread(new Runnable() + { + @Override + public void run() + { + onDatabaseLoad(msg); + } + }); + } + } + catch(Exception e) + { + msg = "Error loading database\nError: " + e.getMessage(); + if (getApplicationContext() != null) + { + runOnUiThread(new Runnable() + { + @Override + public void run() + { + onDatabaseLoadError(msg); + } + }); + } + + } + + + } + }).start(); + +} + + public void onDatabaseLoad(String msg) + { + + } + + public void onDatabaseLoadError(String msg) + { + + } + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/databasehelper/ResultHolder.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/databasehelper/ResultHolder.java new file mode 100644 index 00000000..5ba21c33 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/databasehelper/ResultHolder.java @@ -0,0 +1,53 @@ +package org.buildmlearn.learnfrommap.databasehelper; + +/** + * This class holds the result, question data, answer data for every user answered question + * + * @author Abhishek + * + */ +public class ResultHolder { + + private String country; + private String category; + //public static enum Type {PinOnMap, MultipleChoiceQuestion, FillBlanks}; + private String type; + public boolean isCorrect; + + + public ResultHolder(String country, String category, String type, + boolean isCorrect) { + super(); + this.country = country; + this.category = category; + this.type = type; + this.isCorrect = isCorrect; + } + + public String getCountry() { + return country; + } + public void setCountry(String country) { + this.country = country; + } + public String getCategory() { + return category; + } + public void setCategory(String category) { + this.category = category; + } + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + public boolean isCorrect() { + return isCorrect; + } + public void setCorrect(boolean isCorrect) { + this.isCorrect = isCorrect; + } + + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/helper/CustomDialog.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/helper/CustomDialog.java new file mode 100644 index 00000000..a940ec01 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/helper/CustomDialog.java @@ -0,0 +1,32 @@ +package org.buildmlearn.learnfrommap.helper; + +import org.buildmlearn.learnfrommap.R; + +import android.app.Dialog; +import android.content.Context; +import android.graphics.drawable.ColorDrawable; +import android.view.Window; + +/** + * This class contains various custom dialogs + * + * @author Abhishek + * + */ +public class CustomDialog { + + /** + * This functions displays the about dialog box + * + * @param context + */ + public static void AboutDialog(Context context) + { + final Dialog dialog = new Dialog(context); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + dialog.setContentView(R.layout.about_dialog); + dialog.show(); + } + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/helper/HelperFunctions.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/helper/HelperFunctions.java new file mode 100644 index 00000000..737833bc --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/helper/HelperFunctions.java @@ -0,0 +1,159 @@ +package org.buildmlearn.learnfrommap.helper; + +import java.util.ArrayList; +import java.util.Random; + +import com.google.android.gms.maps.model.LatLng; + +import android.content.Context; +import android.util.Log; + +public class HelperFunctions { + + /** + * Shuffles the content of the array + * + * @param ar + */ + public static void ShuffleArray(String[] ar) + { + Random rnd = new Random(); + for (int i = ar.length - 1; i > 0; i--) + { + int index = rnd.nextInt(i + 1); + String a = ar[index]; + ar[index] = ar[i]; + ar[i] = a; + } + } + + + /** + * Calculates the distance between two geo-coordinates + * + * @param lat1 + * @param lon1 + * @param lat2 + * @param lon2 + * @param unit + * @return distance between two geo coordinates + */ + public static double distance(double lat1, double lon1, double lat2, double lon2, char unit) { + double theta = lon1 - lon2; + double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta)); + dist = Math.acos(dist); + dist = rad2deg(dist); + dist = dist * 60 * 1.1515; + if (unit == 'K') { + dist = dist * 1.609344; + } else if (unit == 'N') { + dist = dist * 0.8684; + } + return (dist); + } + + + /** + * Converts degree to radian + * + * @param deg + * @return radian + */ + private static double deg2rad(double deg) { + return (deg * Math.PI / 180.0); + } + + + /** + * Converts radian to degree + * + * @param rad + * @return degree + */ + private static double rad2deg(double rad) { + return (rad * 180 / Math.PI); + } + + /** + * + * Builds a url for google api for the given parameters + * + * @param lat + * @param lng + * @return url + */ + public static String geoCoderUrlBuilder(double lat, double lng) + { + String googleurl = "https://maps.google.com/maps/api/geocode/json?key=AIzaSyACYVxd_d-49UnhqibCI6F9f7b5Gw1qTSc&"; +// Log.v("HTTP" , "Latitude is: " + lat + "Longitude is:" + lng); + StringBuilder sbuilder = new StringBuilder(); + sbuilder.append(googleurl); + sbuilder.append("latlng=" + lat + "," + lng); + sbuilder.append("&sensor=true"); + String url = sbuilder.toString(); + return url; + } + + /** + * Updates the statistics data stored in shared preference + * + * @param context + * @param isCorrect + * @param country + */ + public static void updateStats(Context context, boolean isCorrect, String country) + { + TinyDB stat = new TinyDB(context); + ArrayList countryList = stat.getList("COUNTRY"); + int index = countryList.indexOf(country); +// Log.e("INDEX", "Index: " + index); + ArrayList total = stat.getListInt("COUNTRY_TOTAL", context); + int iTotal = total.get(index); + iTotal++; + total.set(index, iTotal); +// Log.e("TOTAL", "Total: " + iTotal); + stat.putListInt("COUNTRY_TOTAL", total, context); + if(isCorrect) + { + ArrayList ans = stat.getListInt("COUNTRY_ANS", context); + int iAns = ans.get(index); + iAns++; + ans.set(index, iAns); + stat.putListInt("COUNTRY_ANS", ans, context); + } + } + + public static ArrayList bindStat(Context context) + { + TinyDB stat = new TinyDB(context); + ArrayList data = new ArrayList(); + ArrayList countryList = stat.getList("COUNTRY"); + ArrayList total = stat.getListInt("COUNTRY_TOTAL", context); + ArrayList ans = stat.getListInt("COUNTRY_ANS", context); + for(int i=0; i < countryList.size(); i++) + { + StatHolder temp = new StatHolder(countryList.get(i), total.get(i), ans.get(i)); + data.add(temp); + } + return data; + + } + + /** + * Converts comma separated coordinates to latitude longitiude + * + * @param location + * @return latitude longitude + */ + public static LatLng locationFromString(String location) + { + //Log.e("Location", location); + String[] latlng = location.split(","); + double lat = Double.parseDouble(latlng[0]); + double lng = Double.parseDouble(latlng[1]); + LatLng loc = new LatLng(lat, lng); + return loc; + } + + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/helper/ReverseGeoCodeJson.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/helper/ReverseGeoCodeJson.java new file mode 100644 index 00000000..626155b5 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/helper/ReverseGeoCodeJson.java @@ -0,0 +1,97 @@ +package org.buildmlearn.learnfrommap.helper; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +/** + * This class reverse geo code coordinates to get country and state + * + * @author Abhishek + * + */ +public class ReverseGeoCodeJson { + + private String State; + private String Country; + private boolean HasError; + + + public ReverseGeoCodeJson(String response) { + try { + JSONObject main = new JSONObject(response); + JSONArray array = main.getJSONArray("results"); + JSONObject obj = array.getJSONObject(0); + array = obj.getJSONArray("address_components"); + for(int i=0; i{ + + private String country; + private int total; + private int answered; + private String color; + + public StatHolder(String country, int total, int answered) { + super(); + this.country = country; + this.total = total; + this.answered = answered; + } + + + + /** + * @return the country + */ + public String getCountry() { + return country; + } + + /** + * @param country the country to set + */ + public void setCountry(String country) { + this.country = country; + } + + /** + * @return the total + */ + public int getTotal() { + return total; + } + + public String getColor() { + return color; + } + + + + public void setColor(String color) { + this.color = color; + } + + + + /** + * @param total the total to set + */ + public void setTotal(int total) { + this.total = total; + } + + /** + * @return the answered + */ + public int getAnswered() { + return answered; + } + + /** + * @param answered the answered to set + */ + public void setAnswered(int answered) { + this.answered = answered; + } + + @Override + public int compareTo(StatHolder another) { + + return another.getTotal() - total; + } + + + + + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/helper/TextViewPlus.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/helper/TextViewPlus.java new file mode 100644 index 00000000..4bd521f4 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/helper/TextViewPlus.java @@ -0,0 +1,89 @@ +package org.buildmlearn.learnfrommap.helper; + +import org.buildmlearn.learnfrommap.R; +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Typeface; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.widget.TextView; + +/** + * Custom implementation of textview with fonts + * + * @author Abhishek + * + */ +public class TextViewPlus extends TextView { + + public TextViewPlus(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + setCustomFont(context, attrs); + } + + public TextViewPlus(Context context, AttributeSet attrs) { + super(context, attrs); + setCustomFont(context, attrs); + } + + public TextViewPlus(Context context) { + super(context); + } + + private void setCustomFont(Context ctx, AttributeSet attrs) { + TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.TextViewPlus); + String customFont = a.getString(R.styleable.TextViewPlus_customFont); + setCustomFont(ctx, customFont); + a.recycle(); + } + + public boolean setCustomFont(Context ctx, String asset) { + Typeface tf = null; + try { + tf = Typeface.createFromAsset(ctx.getAssets(), asset); + } catch (Exception e) { +// Log.e("TextViewPlus Error", "Could not get typeface: "+e.getMessage()); + return false; + } + + setTypeface(tf); + return true; + } + + @Override + public void setBackgroundResource(int resid) { + int pl = getPaddingLeft(); + int pt = getPaddingTop(); + int pr = getPaddingRight(); + int pb = getPaddingBottom(); + + super.setBackgroundResource(resid); + + this.setPadding(pl, pt, pr, pb); + } + + @SuppressLint("NewApi") @Override + public void setBackground(Drawable background) { + + int pl = getPaddingLeft(); + int pt = getPaddingTop(); + int pr = getPaddingRight(); + int pb = getPaddingBottom(); + super.setBackground(background); + this.setPadding(pl, pt, pr, pb); + } + + @SuppressWarnings("deprecation") + @Override + public void setBackgroundDrawable(Drawable background) { + + int pl = getPaddingLeft(); + int pt = getPaddingTop(); + int pr = getPaddingRight(); + int pb = getPaddingBottom(); + super.setBackgroundDrawable(background); + this.setPadding(pl, pt, pr, pb); + } + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/helper/TinyDB.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/helper/TinyDB.java new file mode 100644 index 00000000..dba61888 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/helper/TinyDB.java @@ -0,0 +1,327 @@ +/* + * Copyright 2014 KC Ochibili + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.buildmlearn.learnfrommap.helper; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Map; + +import android.content.Context; +import android.content.SharedPreferences; +import android.graphics.Bitmap; +import android.graphics.Bitmap.CompressFormat; +import android.graphics.BitmapFactory; +import android.os.Environment; +import android.preference.PreferenceManager; +import android.text.TextUtils; + +public class TinyDB { + Context mContext; + SharedPreferences preferences; + String DEFAULT_APP_IMAGEDATA_DIRECTORY; + File mFolder = null; + public static String lastImagePath = ""; + + public TinyDB(Context appContext) { + mContext = appContext; + preferences = PreferenceManager.getDefaultSharedPreferences(mContext); + } + + public Bitmap getImage(String path) { + Bitmap theGottenBitmap = null; + try { + theGottenBitmap = BitmapFactory.decodeFile(path); + } catch (Exception e) { + // TODO: handle exception + } + return theGottenBitmap; + } + + /** + * Returns the String path of the last image that was saved with this Object + *

+ * + */ + public String getSavedImagePath() { + return lastImagePath; + } + + /** + * Returns the String path of the last image that was saved with this + * tnydbobj + *

+ * + * @param String + * the theFolder - the folder path dir you want to save it to e.g + * "DropBox/WorkImages" + * @param String + * the theImageName - the name you want to assign to the image file e.g + * "MeAtlunch.png" + * + */ + public String putImagePNG(String theFolder, String theImageName, + Bitmap theBitmap) { + this.DEFAULT_APP_IMAGEDATA_DIRECTORY = theFolder; + String mFullPath = setupFolderPath(theImageName); + saveBitmapPNG(mFullPath, theBitmap); + lastImagePath = mFullPath; + return mFullPath; + } + + private String setupFolderPath(String imageName) { + File sdcard_path = Environment.getExternalStorageDirectory(); + mFolder = new File(sdcard_path, DEFAULT_APP_IMAGEDATA_DIRECTORY); + if (!mFolder.exists()) { + if (!mFolder.mkdirs()) { +// Log.e("While creatingsave path", +// "Default Save Path Creation Error"); +// // Toast("Default Save Path Creation Error"); + } + } + String savePath = mFolder.getPath() + '/' + imageName; + return savePath; + } + + private boolean saveBitmapPNG(String strFileName, Bitmap bitmap) { + if (strFileName == null || bitmap == null) + return false; + boolean bSuccess1 = false; + boolean bSuccess2; + boolean bSuccess3; + File saveFile = new File(strFileName); + + if (saveFile.exists()) { + if (!saveFile.delete()) + return false; + } + + try { + bSuccess1 = saveFile.createNewFile(); + } catch (IOException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + + OutputStream out = null; + try { + out = new FileOutputStream(saveFile); + bSuccess2 = bitmap.compress(CompressFormat.PNG, 100, out); + } catch (Exception e) { + e.printStackTrace(); + bSuccess2 = false; + } + try { + if (out != null) { + out.flush(); + out.close(); + bSuccess3 = true; + } else + bSuccess3 = false; + + } catch (IOException e) { + e.printStackTrace(); + bSuccess3 = false; + } finally { + if (out != null) { + try { + out.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + + return (bSuccess1 && bSuccess2 && bSuccess3); + } + + public int getInt(String key) { + return preferences.getInt(key, 0); + } + + public long getLong(String key) { + return preferences.getLong(key, 0l); + } + + public String getString(String key) { + return preferences.getString(key, ""); + } + + public double getDouble(String key) { + String number = getString(key); + try { + double value = Double.parseDouble(number); + return value; + } + catch(NumberFormatException e) + { + return 0; + } + } + + public void putInt(String key, int value) { + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt(key, value); + editor.apply(); + } + + public void putLong(String key, long value) { + SharedPreferences.Editor editor = preferences.edit(); + editor.putLong(key, value); + editor.apply(); + } + + public void putDouble(String key, double value) { + putString(key, String.valueOf(value)); + } + + public void putString(String key, String value) { + + SharedPreferences.Editor editor = preferences.edit(); + editor.putString(key, value); + editor.apply(); + } + + public void putList(String key, ArrayList marray) { + + SharedPreferences.Editor editor = preferences.edit(); + String[] mystringlist = marray.toArray(new String[marray.size()]); + // the comma like character used below is not a comma it is the SINGLE + // LOW-9 QUOTATION MARK unicode 201A and unicode 2017 they are used for + // seprating the items in the list + editor.putString(key, TextUtils.join("‚‗‚", mystringlist)); + editor.apply(); + } + + public ArrayList getList(String key) { + // the comma like character used below is not a comma it is the SINGLE + // LOW-9 QUOTATION MARK unicode 201A and unicode 2017 they are used for + // seprating the items in the list + String[] mylist = TextUtils.split(preferences.getString(key, ""), "‚‗‚"); + ArrayList gottenlist = new ArrayList( + Arrays.asList(mylist)); + return gottenlist; + } + + public void putListInt(String key, ArrayList marray, + Context context) { + SharedPreferences.Editor editor = preferences.edit(); + Integer[] mystringlist = marray.toArray(new Integer[marray.size()]); + // the comma like character used below is not a comma it is the SINGLE + // LOW-9 QUOTATION MARK unicode 201A and unicode 2017 they are used for + // seprating the items in the list + editor.putString(key, TextUtils.join("‚‗‚", mystringlist)); + editor.apply(); + } + + public ArrayList getListInt(String key, + Context context) { + // the comma like character used below is not a comma it is the SINGLE + // LOW-9 QUOTATION MARK unicode 201A and unicode 2017 they are used for + // seprating the items in the list + String[] mylist = TextUtils + .split(preferences.getString(key, ""), "‚‗‚"); + ArrayList gottenlist = new ArrayList( + Arrays.asList(mylist)); + ArrayList gottenlist2 = new ArrayList(); + for (int i = 0; i < gottenlist.size(); i++) { + gottenlist2.add(Integer.parseInt(gottenlist.get(i))); + } + + return gottenlist2; + } + + public void putListBoolean(String key, ArrayList marray){ + ArrayList origList = new ArrayList(); + for(Boolean b : marray){ + if(b==true){ + origList.add("true"); + }else{ + origList.add("false"); + } + } + putList(key, origList); + } + + public ArrayList getListBoolean(String key) { + ArrayList origList = getList(key); + ArrayList mBools = new ArrayList(); + for(String b : origList){ + if(b.equals("true")){ + mBools.add(true); + }else{ + mBools.add(false); + } + } + return mBools; + } + + public void putBoolean(String key, boolean value) { + SharedPreferences.Editor editor = preferences.edit(); + editor.putBoolean(key, value); + editor.apply(); + } + + public boolean getBoolean(String key) { + return preferences.getBoolean(key, false); + } + + public void putFloat(String key, float value) { + SharedPreferences.Editor editor = preferences.edit(); + editor.putFloat(key, value); + editor.apply(); + } + + public float getFloat(String key) { + return preferences.getFloat(key, 0f); + } + + public void remove(String key) { + SharedPreferences.Editor editor = preferences.edit(); + editor.remove(key); + editor.apply(); + } + + public Boolean deleteImage(String path){ + File tobedeletedImage = new File(path); + Boolean isDeleted = tobedeletedImage.delete(); + return isDeleted; + } + + public void clear() { + SharedPreferences.Editor editor = preferences.edit(); + editor.clear(); + editor.apply(); + } + + public Map getAll() { + return preferences.getAll(); + } + + public void registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener listener) { + preferences.registerOnSharedPreferenceChangeListener(listener); + } + + public void unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener listener) { + preferences.unregisterOnSharedPreferenceChangeListener(listener); + } + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/maphelper/CustomReverseGeocoder.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/maphelper/CustomReverseGeocoder.java new file mode 100644 index 00000000..e492c9cf --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/maphelper/CustomReverseGeocoder.java @@ -0,0 +1,84 @@ +package org.buildmlearn.learnfrommap.maphelper; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import com.android.volley.Request.Method; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.StringRequest; +import com.android.volley.toolbox.Volley; + +import android.content.Context; + +public class CustomReverseGeocoder { + + private Context mContext; + private RequestQueue mQueue; + + public CustomReverseGeocoder(Context mContext) { + super(); + this.mContext = mContext; + mQueue = Volley.newRequestQueue(this.mContext); + } + + public void getState() + { + String latitude = "38.89"; + String longitude = "-77.03"; + String googleurl = "http://maps.google.com/maps/api/geocode/json?"; +// Log.v("H`TTP" , "Latitude is: " + latitude + "Longitude is:" + longitude); + StringBuilder sbuilder = new StringBuilder(); + sbuilder.append(googleurl); + + sbuilder.append("latlng=" + latitude + "," + longitude); + sbuilder.append("&sensor=true"); + String url = sbuilder.toString(); +// Log.v("URL", url); + StringRequest myReq = new StringRequest(Method.GET, + url, + new Response.Listener() { + @Override + public void onResponse(String response) { +// Log.d("VOLLEY", response); + try { + JSONObject main = new JSONObject(response); + JSONArray array = main.getJSONArray("results"); + JSONObject obj = array.getJSONObject(0); + array = obj.getJSONArray("address_components"); + for(int i=0; i5) + { + + map.animateCamera(CameraUpdateFactory.zoomTo(4.0f)); + return null; + } + else + { + + byte[] image = readTileImage(x, y, zoom); + return image == null ? null : new Tile(TILE_WIDTH, TILE_HEIGHT, image); + } + } + + private byte[] readTileImage(int x, int y, int zoom) { + InputStream in = null; + ByteArrayOutputStream buffer = null; + + try { + in = mAssets.open(getTileFilename(x, y, zoom)); + buffer = new ByteArrayOutputStream(); + + int nRead; + byte[] data = new byte[BUFFER_SIZE]; + + while ((nRead = in.read(data, 0, BUFFER_SIZE)) != -1) { + buffer.write(data, 0, nRead); + } + buffer.flush(); + + return buffer.toByteArray(); + } catch (IOException e) { + e.printStackTrace(); + return null; + } catch (OutOfMemoryError e) { + e.printStackTrace(); + return null; + } finally { + if (in != null) try { in.close(); } catch (Exception ignored) {} + if (buffer != null) try { buffer.close(); } catch (Exception ignored) {} + } + } + + private String getTileFilename(int x, int y, int zoom) { +// if(zoom ==2) +// return "map/" + zoom + '/' + x + '/' + y + ".jpg"; + return "map/" + zoom + '/' + x + '/' + y + ".jpg"; + } +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/maphelper/MapHelper.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/maphelper/MapHelper.java new file mode 100644 index 00000000..ca986d2f --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/maphelper/MapHelper.java @@ -0,0 +1,199 @@ +package org.buildmlearn.learnfrommap.maphelper; + +import com.google.android.gms.common.ConnectionResult; +import com.google.android.gms.common.GooglePlayServicesUtil; +import com.google.android.gms.maps.CameraUpdateFactory; +import com.google.android.gms.maps.GoogleMap; +import com.google.android.gms.maps.SupportMapFragment; +import com.google.android.gms.maps.GoogleMap.OnCameraChangeListener; +import com.google.android.gms.maps.model.CameraPosition; +import com.google.android.gms.maps.model.TileOverlayOptions; + +import android.content.Context; +import android.content.pm.FeatureInfo; +import android.content.pm.PackageManager; +import android.location.Location; +import android.os.Handler; +import android.support.v7.app.ActionBarActivity; +import android.widget.Toast; + +public class MapHelper extends ActionBarActivity { + + public GoogleMap mapView; + public Location myLocation; + private SupportMapFragment mapFragment; + private Handler handler; + ////////////////// + //Override these function + + public void onMapReady() + { + mapView.setOnCameraChangeListener(new OnCameraChangeListener() { + @Override + public void onCameraChange(CameraPosition cameraPosition) { + Toast.makeText(getApplicationContext(), "Zoom: " + cameraPosition.zoom , Toast.LENGTH_SHORT).show(); + if(cameraPosition.zoom > (float)4.0) + { + mapView.animateCamera(CameraUpdateFactory.zoomTo((float) 4.0)); + } + + } + }); + + } + + public boolean isMapReady() + { + return mapView != null; + } + + public void showErrorMessage(String msg) + { + + } + + ////////////////// + + + public void getMapView(SupportMapFragment mapFragment) + { + this.handler = new Handler(); + this.mapFragment = mapFragment; + CheckMap(); + } + + private void setUpMap() + { + handler.post(new Runnable() { + + @Override + public void run() { + mapView = mapFragment.getMap(); + if(mapView == null) + { + handler.postDelayed(this, 1000); + } + else + { + mapView.setMapType(GoogleMap.MAP_TYPE_NONE); + mapView.addTileOverlay(new TileOverlayOptions().tileProvider(new CustomTileProvider(getResources().getAssets(), mapView))); + if(getApplicationContext() != null) + { + runOnUiThread(new Runnable() { + + @Override + public void run() { + onMapReady(); + + } + }); + } + } + + } + }); + + } + + + private void CheckMap() { + + new Thread(new Runnable() { + + @Override + public void run() { + int playServiceStatus = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplication()); + + if (playServiceStatus == ConnectionResult.SUCCESS) + { + if (getVersionFromPackageManager(getApplicationContext()) >= 2) + { + setUpMap(); + if (getApplicationContext() != null) + { + runOnUiThread(new Runnable() + { + @Override + public void run() + { + showErrorMessage("Google Maps present"); + } + }); + } + } + else + { + // OpenGL version is not supported + if (getApplicationContext() != null) + { + runOnUiThread(new Runnable() + { + @Override + public void run() + { + showErrorMessage("Maps cannot be loaded: OpenGL version is less than 2"); + } + }); + } + } + } + else if (GooglePlayServicesUtil.isUserRecoverableError(playServiceStatus)) + { + runOnUiThread(new Runnable() + { + @Override + public void run() + { + showErrorMessage("Google Play services not present"); + } + }); + } else + { + if (getApplicationContext() != null) + { + runOnUiThread(new Runnable() + { + @Override + public void run() + { + showErrorMessage("Unknown Error"); + } + }); + } + } + + } + + }).start(); + + } + + + private int getVersionFromPackageManager(Context context) + { + PackageManager packageManager = context.getPackageManager(); + FeatureInfo[] featureInfos = packageManager.getSystemAvailableFeatures(); + if (featureInfos != null && featureInfos.length > 0) { + for (FeatureInfo featureInfo : featureInfos) + { + // Null feature name means this feature is the open + // GLes version feature. + if (featureInfo.name == null) + { + if (featureInfo.reqGlEsVersion != FeatureInfo.GL_ES_VERSION_UNDEFINED) + { + return getMajorVersion(featureInfo.reqGlEsVersion); + } else + { + return 1; + } + } + } + } + return 1; + } + + private int getMajorVersion(int glEsVersion) { + return ((glEsVersion & 0xffff0000) >> 16); + } +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/parser/XmlParser.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/parser/XmlParser.java new file mode 100644 index 00000000..de462941 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/parser/XmlParser.java @@ -0,0 +1,73 @@ +package org.buildmlearn.learnfrommap.parser; + +import java.io.IOException; +import java.util.ArrayList; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.buildmlearn.learnfrommap.questionmodule.XmlQuestion; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +import android.content.Context; + +public class XmlParser { + private Context mContext; + + public XmlParser(Context mContext) + { + this.mContext = mContext; + } + + public ArrayList fetchQuestions() + { + String code; + String type; + String format; + String answer; + boolean location; + String relation; + String count; + String alias; + String marker; + ArrayList questions = new ArrayList(); + try { + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder; + dBuilder = dbFactory.newDocumentBuilder(); + Document doc = dBuilder.parse(mContext.getAssets().open("test.xml")); + NodeList nList = doc.getElementsByTagName("question"); + for(int i=0; i mRules; + public enum Rule {None, Classic, Category}; + private Rule mRuleType; + public static long lastSeed = 0; + + + + public QuestionRuleSelector(ArrayList rules, Rule ruleType) + { + this.mRules = rules; + this.mRuleType = ruleType; + } + + public ArrayList selectRules(int count) throws QuestionModuleException + { + ArrayList selectedQuestion = new ArrayList(); + if(mRuleType == Rule.Classic) + { + boolean captialCheck = false; + for(XmlQuestion question : mRules) + { + if(question.getAnswer().equals("country")) + { + mRules.remove(question); + } + } + if(mRules.size() > count ) + { + for(int i =0; i 1) + { + Random random = new Random(lastSeed + new java.util.Date().getTime()); + int selected = random.nextInt(capitalCount); + for(int i=0; i 0) + { + int extra = count - mRules.size(); + selectedQuestion = mRules; + for(int i =0; i 0) + { + } + else + { + this.mPoints = 0; + mIsCorrect = false; + } + } + else + { + if(mUserAnswer.length() > 0) + { + evaluateFill(); + } + else + { + this.mPoints = 0; + mIsCorrect = false; + } + } + } + + public void evaluatePin(boolean isCorrect) + { + if(isCorrect) + { + this.mPoints = 10; + mIsCorrect = true; + } + else + { + this.mPoints = 0; + mIsCorrect = false; + } + + } + + + + public UserAnsweredData(String mQuestion, String mAnswer, + String mUserAnswer, Type mQuestionType, String mAnswerType, + String[] mOptions, boolean isAnswered) { + super(); + this.mQuestion = mQuestion; + this.mAnswer = mAnswer; + this.mUserAnswer = mUserAnswer; + this.mQuestionType = mQuestionType; + this.mAnswerType = mAnswerType; + this.mOptions = mOptions; + this.mIsAnswered = isAnswered; + if(this.mIsAnswered) + { + if(this.mAnswer.equals(this.mUserAnswer)) + { + this.mPoints = 10; + this.mIsCorrect = true; + } + else + { + this.mPoints = 0; + this.mIsCorrect = false; + } + } + else + { + this.mPoints = 0; + this.mIsCorrect = false; + } + + } + + + public String getmQuestion() { + return mQuestion; + } + + + public void setmQuestion(String mQuestion) { + this.mQuestion = mQuestion; + } + + + public String getmAnswer() { + return mAnswer; + } + + + public void setmAnswer(String mAnswer) { + this.mAnswer = mAnswer; + } + + + public String getmUserAnswer() { + return mUserAnswer; + } + + + public void setmUserAnswer(String mUserAnswer) { + this.mUserAnswer = mUserAnswer; + } + + + public GeneratedQuestion.Type getmQuestionType() { + return mQuestionType; + } + + + public void setmQuestionType(GeneratedQuestion.Type mQuestionType) { + this.mQuestionType = mQuestionType; + } + + + public String getmAnswerType() { + return mAnswerType; + } + + + public void setmAnswerType(String mAnswerType) { + this.mAnswerType = mAnswerType; + } + + + public String[] getmOptions() { + return mOptions; + } + + + public void setmOptions(String[] mOptions) { + this.mOptions = mOptions; + } + + public boolean isAnswered() + { + return mIsAnswered; + } + + public String getState() { + return mState; + } + + public void setState(String mState) { + this.mState = mState; + } + + public String getCountry() { + return mCountry; + } + + public void setCountry(String mCountry) { + this.mCountry = mCountry; + } + + private void evaluateFill() + { + if(this.mQuestionType == Type.Fill) + { + double result = CompareStrings(mUserAnswer, mAnswer); + if(result > .95) + { + this.mIsCorrect = true; + this.mPoints = 10; + } + else + { + this.mIsCorrect = false; + this.mPoints = 0; + } + } + + } + + @SuppressLint("DefaultLocale") + public static double CompareStrings(String stringA, String stringB) { + stringA = stringA.toLowerCase(Locale.getDefault()); + stringB = stringB.toLowerCase(Locale.getDefault()); + JaroWinkler algorithm = new JaroWinkler(); + return algorithm.getSimilarity(stringA, stringB); + } + + public boolean isAnswerCorrect() + { + return mIsCorrect; + } + + public int getmPoints() { + return mPoints; + } + + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/questionmodule/XmlQuestion.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/questionmodule/XmlQuestion.java new file mode 100644 index 00000000..d81fa284 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/questionmodule/XmlQuestion.java @@ -0,0 +1,142 @@ +package org.buildmlearn.learnfrommap.questionmodule; + + +public class XmlQuestion { + + private String code; + private Type type; + private String format; + private String answer; + private boolean location; + private String relation; + private String count; + private String display; + private String alias; + private String marker; + public static enum Type {PinOnMap, MultipleChoiceQuestion, FillBlanks}; + + + + /** + * @return the marker + */ + public String getMarker() { + return marker; + } + + /** + * @param marker the marker to set + */ + public void setMarker(String marker) { + this.marker = marker; + } + + public String getAlias() { + return alias; + } + + public void setAlias(String alias) { + this.alias = alias; + } + + public String getDisplay() { + return display; + } + + public void setDisplay(String display) { + this.display = display; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + + + public Type getType() { + return type; + } + + public void setType(Type type) { + this.type = type; + } + + public String getFormat() { + + return format; + } + + public void setFormat(String format) { + this.format = format; + } + + public String getAnswer() { + return answer; + } + + public void setAnswer(String answer) { + this.answer = answer; + } + + public boolean isLocation() { + return location; + } + + public void setLocation(boolean location) { + this.location = location; + } + + public String getRelation() { + return relation; + } + + public void setRelation(String relation) { + this.relation = relation; + } + + public String getCount() { + return count; + } + + public void setCount(String count) { + this.count = count; + } + + public void printRule() + { +// Log.e("Rule", this.getFormat()); + } + + public XmlQuestion(String code, String type, String format, String answer, + boolean location, String relation, String count, String alias, String marker) { + super(); + this.code = code; + if(type.equals("PIN")) + { + this.type = Type.PinOnMap; + } + else if(type.equals("MCQ")) + { + this.type = Type.MultipleChoiceQuestion; + } + else if(type.equals("FILL")) + { + this.type = Type.FillBlanks; + } + this.format = format; + this.answer = answer; + this.location = location; + this.relation = relation; + this.count = count; + this.alias = alias; + this.display = "name"; + this.marker = marker; + } + + + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/service/AlarmService.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/service/AlarmService.java new file mode 100644 index 00000000..e9746e40 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/service/AlarmService.java @@ -0,0 +1,78 @@ +package org.buildmlearn.learnfrommap.service; + +import java.util.Calendar; + +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.os.IBinder; + +public class AlarmService extends Service { + + + + @Override + public IBinder onBind(Intent arg0) { + return null; + } + + + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + + Intent i = new Intent(getApplicationContext(), NotificationBarAlarm.class); + i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + PendingIntent pi = PendingIntent.getBroadcast(this.getApplicationContext(), 0, i, PendingIntent.FLAG_UPDATE_CURRENT); + // Repeat the notification every 15 seconds (15000) + AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); + Calendar firingCal= Calendar.getInstance(); + Calendar currentCal = Calendar.getInstance(); + + firingCal.set(Calendar.HOUR_OF_DAY, 19); // At the hour you wanna fire + firingCal.set(Calendar.MINUTE, 30); // Particular minute + firingCal.set(Calendar.SECOND, 0); // particular second + //firingCal.set(Calendar.) + + long intendedTime = firingCal.getTimeInMillis(); + long currentTime = currentCal.getTimeInMillis(); + +// Toast.makeText(this, "Intended Time: " + firingCal.getTime() + "\nCurrent Time: " + currentCal.getTime(), Toast.LENGTH_SHORT).show(); +// Toast.makeText(this, "Intended Time: " + firingCal.getTime() + "\nCurrent Time: " + currentCal.getTime(), Toast.LENGTH_SHORT).show(); +// Toast.makeText(this, "Intended Time: " + firingCal.getTime() + "\nCurrent Time: " + currentCal.getTime(), Toast.LENGTH_SHORT).show(); +// Toast.makeText(this, "Intended Time: " + firingCal.getTime() + "\nCurrent Time: " + currentCal.getTime(), Toast.LENGTH_SHORT).show(); +// Toast.makeText(this, "Intended Time: " + firingCal.getTime() + "\nCurrent Time: " + currentCal.getTime(), Toast.LENGTH_SHORT).show(); +// Toast.makeText(this, "Intended Time: " + firingCal.getTime() + "\nCurrent Time: " + currentCal.getTime(), Toast.LENGTH_SHORT).show(); +// Toast.makeText(this, "Intended Time: " + firingCal.getTime() + "\nCurrent Time: " + currentCal.getTime(), Toast.LENGTH_SHORT).show(); +// Toast.makeText(this, "Intended Time: " + intendedTime + "\nCurrent Time: " + currentTime, Toast.LENGTH_SHORT).show(); +// Toast.makeText(this, "Intended Time: " + intendedTime + "\nCurrent Time: " + currentTime, Toast.LENGTH_SHORT).show(); +// Toast.makeText(this, "Intended Time: " + intendedTime + "\nCurrent Time: " + currentTime, Toast.LENGTH_SHORT).show(); +// Toast.makeText(this, "Intended Time: " + intendedTime + "\nCurrent Time: " + currentTime, Toast.LENGTH_SHORT).show(); +// Toast.makeText(this, "Intended Time: " + intendedTime + "\nCurrent Time: " + currentTime, Toast.LENGTH_SHORT).show(); +// Toast.makeText(this, "Intended Time: " + intendedTime + "\nCurrent Time: " + currentTime, Toast.LENGTH_SHORT).show(); +// Toast.makeText(this, "Intended Time: " + intendedTime + "\nCurrent Time: " + currentTime, Toast.LENGTH_SHORT).show(); + + + if(intendedTime >= currentTime) + { + am.setRepeating(AlarmManager.RTC_WAKEUP, intendedTime, AlarmManager.INTERVAL_DAY, pi); + + } + else{ + firingCal.add(Calendar.DAY_OF_MONTH, 1); + intendedTime = firingCal.getTimeInMillis(); + am.setRepeating(AlarmManager.RTC_WAKEUP, intendedTime, AlarmManager.INTERVAL_DAY, pi); + } + + return Service.START_NOT_STICKY; + } + + @Override + public void onDestroy() { + } + + + +} diff --git a/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/service/NotificationBarAlarm.java b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/service/NotificationBarAlarm.java new file mode 100644 index 00000000..5de468c7 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/java/org/buildmlearn/learnfrommap/service/NotificationBarAlarm.java @@ -0,0 +1,46 @@ +package org.buildmlearn.learnfrommap.service; + +import org.buildmlearn.learnfrommap.R; +import org.buildmlearn.learnfrommap.SplashActivity; +import org.buildmlearn.learnfrommap.databasehelper.Database; +import org.buildmlearn.learnfrommap.helper.TinyDB; + +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.support.v4.app.NotificationCompat; + +public class NotificationBarAlarm extends BroadcastReceiver { + + NotificationManager notifyManager; + private TinyDB pref; + + @Override + public void onReceive(Context context, Intent intent) { + + Intent intent1 = new Intent(context, SplashActivity.class); + PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent1, 0); + Database db = new Database(context); + String message = db.getNotificationMsg(); + long[] pattern = {500,500,500,500,500,500,500,500,500}; + NotificationCompat.Builder builder = new NotificationCompat.Builder( + context); + Notification notification = builder.setContentIntent(pIntent) + .setSmallIcon(R.drawable.not).setTicker(message).setOnlyAlertOnce(true).setVibrate(pattern) + .setAutoCancel(true).setContentTitle("Learn From Map") + .setStyle(new NotificationCompat.BigTextStyle().bigText(message)) + .setContentText(message).setDefaults(Notification.DEFAULT_SOUND).build(); + + db.close(); + NotificationManager mNotificationManager = + (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + pref = new TinyDB(context); + + boolean toNotify = pref.getBoolean("NOTI"); + if(toNotify) + mNotificationManager.notify(0, notification); + } +} diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/bg_nexus.jpg b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/bg_nexus.jpg new file mode 100644 index 00000000..e26f3608 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/bg_nexus.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/category_mode.png b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/category_mode.png new file mode 100644 index 00000000..bb1bfe9c Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/category_mode.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/classic.png b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/classic.png new file mode 100644 index 00000000..625d03ba Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/classic.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/globe.png b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/globe.png new file mode 100644 index 00000000..93f764e7 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/globe.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_about.png b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_about.png new file mode 100644 index 00000000..9b902d00 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_about.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_accept.png b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_accept.png new file mode 100644 index 00000000..700fc815 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_accept.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_cancel.png b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_cancel.png new file mode 100644 index 00000000..e206f296 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_cancel.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_important.png b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_important.png new file mode 100644 index 00000000..953dee08 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_important.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_location_found.png b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_location_found.png new file mode 100644 index 00000000..4748e901 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_location_found.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_next_item.png b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_next_item.png new file mode 100644 index 00000000..fc998a51 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_next_item.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_web_site.png b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_web_site.png new file mode 100644 index 00000000..8c4add42 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_action_web_site.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_launcher.png b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 00000000..45183006 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/ic_launcher.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/logo_white.png b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/logo_white.png new file mode 100644 index 00000000..1ca3653e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/logo_white.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/map.png b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/map.png new file mode 100644 index 00000000..dc959363 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/map.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/not.png b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/not.png new file mode 100644 index 00000000..eb74d82d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/not.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/pin_100.png b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/pin_100.png new file mode 100644 index 00000000..b35ad63d Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/pin_100.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/settings.png b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/settings.png new file mode 100644 index 00000000..a4f61c66 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-hdpi/settings.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-land/bg_nexus.jpg b/LearnFromMap/learnFromMap/src/main/res/drawable-land/bg_nexus.jpg new file mode 100644 index 00000000..8c9bbe34 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-land/bg_nexus.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/bg_nexus.jpg b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/bg_nexus.jpg new file mode 100644 index 00000000..d2bd9721 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/bg_nexus.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/ic_action_about.png b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/ic_action_about.png new file mode 100644 index 00000000..7ede67d8 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/ic_action_about.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/ic_action_location_found.png b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/ic_action_location_found.png new file mode 100644 index 00000000..582296f0 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/ic_action_location_found.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/ic_action_next_item.png b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/ic_action_next_item.png new file mode 100644 index 00000000..0f79e4ff Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/ic_action_next_item.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/ic_action_web_site.png b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/ic_action_web_site.png new file mode 100644 index 00000000..c073fa5e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/ic_action_web_site.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/ic_launcher.png b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 00000000..8c381928 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/ic_launcher.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/swipe1.jpg b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/swipe1.jpg new file mode 100644 index 00000000..d27c934a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/swipe1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/swipe2.jpg b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/swipe2.jpg new file mode 100644 index 00000000..dd8864f5 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/swipe2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/swipe3.jpg b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/swipe3.jpg new file mode 100644 index 00000000..9aef361a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/swipe3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/swipe4.jpg b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/swipe4.jpg new file mode 100644 index 00000000..922acadc Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/swipe4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/swipe5.jpg b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/swipe5.jpg new file mode 100644 index 00000000..74946db0 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/swipe5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/swipe6.jpg b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/swipe6.jpg new file mode 100644 index 00000000..31c599d9 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-mdpi/swipe6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/bg_nexus.jpg b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/bg_nexus.jpg new file mode 100644 index 00000000..70153188 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/bg_nexus.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/ic_action_about.png b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/ic_action_about.png new file mode 100644 index 00000000..4536a8d1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/ic_action_about.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/ic_action_location_found.png b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/ic_action_location_found.png new file mode 100644 index 00000000..f5031892 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/ic_action_location_found.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/ic_action_next_item.png b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/ic_action_next_item.png new file mode 100644 index 00000000..1f77e8fe Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/ic_action_next_item.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/ic_action_web_site.png b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/ic_action_web_site.png new file mode 100644 index 00000000..5afa5d26 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/ic_action_web_site.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/ic_launcher.png b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 00000000..379cebdd Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/ic_launcher.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/swipe1.jpg b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/swipe1.jpg new file mode 100644 index 00000000..7bf6e688 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/swipe1.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/swipe2.jpg b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/swipe2.jpg new file mode 100644 index 00000000..2014231b Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/swipe2.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/swipe3.jpg b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/swipe3.jpg new file mode 100644 index 00000000..df93ffbf Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/swipe3.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/swipe4.jpg b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/swipe4.jpg new file mode 100644 index 00000000..7c207f15 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/swipe4.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/swipe5.jpg b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/swipe5.jpg new file mode 100644 index 00000000..09a5530a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/swipe5.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/swipe6.jpg b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/swipe6.jpg new file mode 100644 index 00000000..75b5835e Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-xhdpi/swipe6.jpg differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-xxhdpi/ic_action_about.png b/LearnFromMap/learnFromMap/src/main/res/drawable-xxhdpi/ic_action_about.png new file mode 100644 index 00000000..a7bdf347 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-xxhdpi/ic_action_about.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-xxhdpi/ic_action_location_found.png b/LearnFromMap/learnFromMap/src/main/res/drawable-xxhdpi/ic_action_location_found.png new file mode 100644 index 00000000..b378d0c1 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-xxhdpi/ic_action_location_found.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-xxhdpi/ic_action_next_item.png b/LearnFromMap/learnFromMap/src/main/res/drawable-xxhdpi/ic_action_next_item.png new file mode 100644 index 00000000..4ac16d06 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-xxhdpi/ic_action_next_item.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-xxhdpi/ic_action_web_site.png b/LearnFromMap/learnFromMap/src/main/res/drawable-xxhdpi/ic_action_web_site.png new file mode 100644 index 00000000..e24eed75 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-xxhdpi/ic_action_web_site.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable-xxhdpi/ic_launcher.png b/LearnFromMap/learnFromMap/src/main/res/drawable-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..89001522 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable-xxhdpi/ic_launcher.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable/border_button.xml b/LearnFromMap/learnFromMap/src/main/res/drawable/border_button.xml new file mode 100644 index 00000000..b4f18cf1 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/drawable/border_button.xml @@ -0,0 +1,44 @@ + + + + + + + + + + > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable/border_white.xml b/LearnFromMap/learnFromMap/src/main/res/drawable/border_white.xml new file mode 100644 index 00000000..da85225d --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/drawable/border_white.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable/button_click.xml b/LearnFromMap/learnFromMap/src/main/res/drawable/button_click.xml new file mode 100644 index 00000000..816e457f --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/drawable/button_click.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable/custom_tile_color.xml b/LearnFromMap/learnFromMap/src/main/res/drawable/custom_tile_color.xml new file mode 100644 index 00000000..de5470db --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/drawable/custom_tile_color.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable/custom_tile_color_no_bg.xml b/LearnFromMap/learnFromMap/src/main/res/drawable/custom_tile_color_no_bg.xml new file mode 100644 index 00000000..a81c69a6 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/drawable/custom_tile_color_no_bg.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable/flag.png b/LearnFromMap/learnFromMap/src/main/res/drawable/flag.png new file mode 100644 index 00000000..30fdc6eb Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable/flag.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable/layout_right_answer.xml b/LearnFromMap/learnFromMap/src/main/res/drawable/layout_right_answer.xml new file mode 100644 index 00000000..e1fc2052 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/drawable/layout_right_answer.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable/layout_right_wrong.xml b/LearnFromMap/learnFromMap/src/main/res/drawable/layout_right_wrong.xml new file mode 100644 index 00000000..50c0c746 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/drawable/layout_right_wrong.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable/logo_notext.png b/LearnFromMap/learnFromMap/src/main/res/drawable/logo_notext.png new file mode 100644 index 00000000..d202e326 Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable/logo_notext.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable/my_rectangle.xml b/LearnFromMap/learnFromMap/src/main/res/drawable/my_rectangle.xml new file mode 100644 index 00000000..392571c7 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/drawable/my_rectangle.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable/right_answer.xml b/LearnFromMap/learnFromMap/src/main/res/drawable/right_answer.xml new file mode 100644 index 00000000..f642097b --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/drawable/right_answer.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable/small_white.png b/LearnFromMap/learnFromMap/src/main/res/drawable/small_white.png new file mode 100644 index 00000000..68bbf9cf Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/drawable/small_white.png differ diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable/spinner_text.xml b/LearnFromMap/learnFromMap/src/main/res/drawable/spinner_text.xml new file mode 100644 index 00000000..692d84b7 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/drawable/spinner_text.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/drawable/wrong_answer.xml b/LearnFromMap/learnFromMap/src/main/res/drawable/wrong_answer.xml new file mode 100644 index 00000000..3c491685 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/drawable/wrong_answer.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout-land/activity_classic_mode.xml b/LearnFromMap/learnFromMap/src/main/res/layout-land/activity_classic_mode.xml new file mode 100644 index 00000000..75ae1b03 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout-land/activity_classic_mode.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout-land/activity_main.xml b/LearnFromMap/learnFromMap/src/main/res/layout-land/activity_main.xml new file mode 100644 index 00000000..16507a62 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout-land/activity_main.xml @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/about_dialog.xml b/LearnFromMap/learnFromMap/src/main/res/layout/about_dialog.xml new file mode 100644 index 00000000..fd41fc84 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/about_dialog.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/activity_app_tutorial.xml b/LearnFromMap/learnFromMap/src/main/res/layout/activity_app_tutorial.xml new file mode 100644 index 00000000..d00bdd15 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/activity_app_tutorial.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/activity_category.xml b/LearnFromMap/learnFromMap/src/main/res/layout/activity_category.xml new file mode 100644 index 00000000..0c02a097 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/activity_category.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/activity_classic_mode.xml b/LearnFromMap/learnFromMap/src/main/res/layout/activity_classic_mode.xml new file mode 100644 index 00000000..c6643c8c --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/activity_classic_mode.xml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/activity_explore_mode.xml b/LearnFromMap/learnFromMap/src/main/res/layout/activity_explore_mode.xml new file mode 100644 index 00000000..fcf11834 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/activity_explore_mode.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/activity_game.xml b/LearnFromMap/learnFromMap/src/main/res/layout/activity_game.xml new file mode 100644 index 00000000..081b0905 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/activity_game.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/activity_main.xml b/LearnFromMap/learnFromMap/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000..399a0baf --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/activity_main.xml @@ -0,0 +1,380 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/activity_main_backup.xml b/LearnFromMap/learnFromMap/src/main/res/layout/activity_main_backup.xml new file mode 100644 index 00000000..7a062974 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/activity_main_backup.xml @@ -0,0 +1,194 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/activity_map.xml b/LearnFromMap/learnFromMap/src/main/res/layout/activity_map.xml new file mode 100644 index 00000000..ecd251c7 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/activity_map.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/activity_mcq.xml b/LearnFromMap/learnFromMap/src/main/res/layout/activity_mcq.xml new file mode 100644 index 00000000..6851a253 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/activity_mcq.xml @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/activity_score.xml b/LearnFromMap/learnFromMap/src/main/res/layout/activity_score.xml new file mode 100644 index 00000000..a65d484d --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/activity_score.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/activity_settings.xml b/LearnFromMap/learnFromMap/src/main/res/layout/activity_settings.xml new file mode 100644 index 00000000..903b168a --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/activity_settings.xml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/activity_splash.xml b/LearnFromMap/learnFromMap/src/main/res/layout/activity_splash.xml new file mode 100644 index 00000000..992734bd --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/activity_splash.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/activity_statistics.xml b/LearnFromMap/learnFromMap/src/main/res/layout/activity_statistics.xml new file mode 100644 index 00000000..b690df3c --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/activity_statistics.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/activity_test.xml b/LearnFromMap/learnFromMap/src/main/res/layout/activity_test.xml new file mode 100644 index 00000000..a529ac1e --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/activity_test.xml @@ -0,0 +1,8 @@ + + diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/activity_test_db.xml b/LearnFromMap/learnFromMap/src/main/res/layout/activity_test_db.xml new file mode 100644 index 00000000..5c77c981 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/activity_test_db.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/dialog_confirm.xml b/LearnFromMap/learnFromMap/src/main/res/layout/dialog_confirm.xml new file mode 100644 index 00000000..7fb5a4c8 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/dialog_confirm.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/dialog_location.xml b/LearnFromMap/learnFromMap/src/main/res/layout/dialog_location.xml new file mode 100644 index 00000000..ee57f211 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/dialog_location.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/fragment_test.xml b/LearnFromMap/learnFromMap/src/main/res/layout/fragment_test.xml new file mode 100644 index 00000000..19b79e1d --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/fragment_test.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/layout_fill.xml b/LearnFromMap/learnFromMap/src/main/res/layout/layout_fill.xml new file mode 100644 index 00000000..873edb33 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/layout_fill.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/layout_play_game.xml b/LearnFromMap/learnFromMap/src/main/res/layout/layout_play_game.xml new file mode 100644 index 00000000..b445460e --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/layout_play_game.xml @@ -0,0 +1,44 @@ + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/listview_row_category_mode.xml b/LearnFromMap/learnFromMap/src/main/res/layout/listview_row_category_mode.xml new file mode 100644 index 00000000..8050e211 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/listview_row_category_mode.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/listview_row_fill.xml b/LearnFromMap/learnFromMap/src/main/res/layout/listview_row_fill.xml new file mode 100644 index 00000000..03e6455c --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/listview_row_fill.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/listview_row_map.xml b/LearnFromMap/learnFromMap/src/main/res/layout/listview_row_map.xml new file mode 100644 index 00000000..f5350477 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/listview_row_map.xml @@ -0,0 +1,31 @@ + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/listview_row_mcq.xml b/LearnFromMap/learnFromMap/src/main/res/layout/listview_row_mcq.xml new file mode 100644 index 00000000..8281ec4b --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/listview_row_mcq.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/listview_row_stat.xml b/LearnFromMap/learnFromMap/src/main/res/layout/listview_row_stat.xml new file mode 100644 index 00000000..47650ac1 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/listview_row_stat.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/spinner_text_view.xml b/LearnFromMap/learnFromMap/src/main/res/layout/spinner_text_view.xml new file mode 100644 index 00000000..fc1a9037 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/spinner_text_view.xml @@ -0,0 +1,9 @@ + + diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/spinner_text_view_dropdown.xml b/LearnFromMap/learnFromMap/src/main/res/layout/spinner_text_view_dropdown.xml new file mode 100644 index 00000000..64914529 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/spinner_text_view_dropdown.xml @@ -0,0 +1,11 @@ + + diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/swipe1.xml b/LearnFromMap/learnFromMap/src/main/res/layout/swipe1.xml new file mode 100644 index 00000000..c5abf491 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/swipe1.xml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/swipe2.xml b/LearnFromMap/learnFromMap/src/main/res/layout/swipe2.xml new file mode 100644 index 00000000..736d1b96 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/swipe2.xml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/swipe3.xml b/LearnFromMap/learnFromMap/src/main/res/layout/swipe3.xml new file mode 100644 index 00000000..16c1ab77 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/swipe3.xml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/swipe4.xml b/LearnFromMap/learnFromMap/src/main/res/layout/swipe4.xml new file mode 100644 index 00000000..0f211abe --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/swipe4.xml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/swipe5.xml b/LearnFromMap/learnFromMap/src/main/res/layout/swipe5.xml new file mode 100644 index 00000000..846b6e8c --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/swipe5.xml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/layout/swipe6.xml b/LearnFromMap/learnFromMap/src/main/res/layout/swipe6.xml new file mode 100644 index 00000000..bc76b3a4 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/layout/swipe6.xml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/menu/app_tutorial.xml b/LearnFromMap/learnFromMap/src/main/res/menu/app_tutorial.xml new file mode 100644 index 00000000..96512978 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/menu/app_tutorial.xml @@ -0,0 +1,12 @@ +

+ + + + diff --git a/LearnFromMap/learnFromMap/src/main/res/menu/category.xml b/LearnFromMap/learnFromMap/src/main/res/menu/category.xml new file mode 100644 index 00000000..155a8c50 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/menu/category.xml @@ -0,0 +1,6 @@ + + + diff --git a/LearnFromMap/learnFromMap/src/main/res/menu/classic_mode.xml b/LearnFromMap/learnFromMap/src/main/res/menu/classic_mode.xml new file mode 100644 index 00000000..7b2d05da --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/menu/classic_mode.xml @@ -0,0 +1,6 @@ + + + diff --git a/LearnFromMap/learnFromMap/src/main/res/menu/explore_mode.xml b/LearnFromMap/learnFromMap/src/main/res/menu/explore_mode.xml new file mode 100644 index 00000000..f8fabfd6 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/menu/explore_mode.xml @@ -0,0 +1,6 @@ + + + diff --git a/LearnFromMap/learnFromMap/src/main/res/menu/game.xml b/LearnFromMap/learnFromMap/src/main/res/menu/game.xml new file mode 100644 index 00000000..1fdd4162 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/menu/game.xml @@ -0,0 +1,5 @@ + + diff --git a/LearnFromMap/learnFromMap/src/main/res/menu/main.xml b/LearnFromMap/learnFromMap/src/main/res/menu/main.xml new file mode 100644 index 00000000..1fb805f9 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/menu/main.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/LearnFromMap/learnFromMap/src/main/res/menu/map.xml b/LearnFromMap/learnFromMap/src/main/res/menu/map.xml new file mode 100644 index 00000000..76bfc105 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/menu/map.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/LearnFromMap/learnFromMap/src/main/res/menu/score.xml b/LearnFromMap/learnFromMap/src/main/res/menu/score.xml new file mode 100644 index 00000000..29792f6e --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/menu/score.xml @@ -0,0 +1,5 @@ + + diff --git a/LearnFromMap/learnFromMap/src/main/res/menu/settings.xml b/LearnFromMap/learnFromMap/src/main/res/menu/settings.xml new file mode 100644 index 00000000..da8ecf4a --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/menu/settings.xml @@ -0,0 +1,6 @@ + + + diff --git a/LearnFromMap/learnFromMap/src/main/res/menu/splash.xml b/LearnFromMap/learnFromMap/src/main/res/menu/splash.xml new file mode 100644 index 00000000..259a1e51 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/menu/splash.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/LearnFromMap/learnFromMap/src/main/res/menu/statistics.xml b/LearnFromMap/learnFromMap/src/main/res/menu/statistics.xml new file mode 100644 index 00000000..fb80b490 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/menu/statistics.xml @@ -0,0 +1,6 @@ + + + diff --git a/LearnFromMap/learnFromMap/src/main/res/menu/test.xml b/LearnFromMap/learnFromMap/src/main/res/menu/test.xml new file mode 100644 index 00000000..6da58685 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/menu/test.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/LearnFromMap/learnFromMap/src/main/res/menu/test_db.xml b/LearnFromMap/learnFromMap/src/main/res/menu/test_db.xml new file mode 100644 index 00000000..e1c9135d --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/menu/test_db.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/LearnFromMap/learnFromMap/src/main/res/raw/correct_answer.mp3 b/LearnFromMap/learnFromMap/src/main/res/raw/correct_answer.mp3 new file mode 100644 index 00000000..1798612a Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/raw/correct_answer.mp3 differ diff --git a/LearnFromMap/learnFromMap/src/main/res/raw/wrong_answer.mp3 b/LearnFromMap/learnFromMap/src/main/res/raw/wrong_answer.mp3 new file mode 100644 index 00000000..05732b2f Binary files /dev/null and b/LearnFromMap/learnFromMap/src/main/res/raw/wrong_answer.mp3 differ diff --git a/LearnFromMap/learnFromMap/src/main/res/values-v11/styles.xml b/LearnFromMap/learnFromMap/src/main/res/values-v11/styles.xml new file mode 100644 index 00000000..a4a95bc4 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/values-v11/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/LearnFromMap/learnFromMap/src/main/res/values-v14/styles.xml b/LearnFromMap/learnFromMap/src/main/res/values-v14/styles.xml new file mode 100644 index 00000000..664f4f16 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/values-v14/styles.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/LearnFromMap/learnFromMap/src/main/res/values-w820dp/dimens.xml b/LearnFromMap/learnFromMap/src/main/res/values-w820dp/dimens.xml new file mode 100644 index 00000000..f3e70203 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/values-w820dp/dimens.xml @@ -0,0 +1,10 @@ + + + + 64dp + + diff --git a/LearnFromMap/learnFromMap/src/main/res/values/action_bar_custom_theme.xml b/LearnFromMap/learnFromMap/src/main/res/values/action_bar_custom_theme.xml new file mode 100644 index 00000000..939290cd --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/values/action_bar_custom_theme.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/values/dimens.xml b/LearnFromMap/learnFromMap/src/main/res/values/dimens.xml new file mode 100644 index 00000000..55c1e590 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/values/dimens.xml @@ -0,0 +1,7 @@ + + + + 16dp + 16dp + + diff --git a/LearnFromMap/learnFromMap/src/main/res/values/strings.xml b/LearnFromMap/learnFromMap/src/main/res/values/strings.xml new file mode 100644 index 00000000..a40d283c --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/values/strings.xml @@ -0,0 +1,82 @@ + + + + Learn From Map + Hello world! + About + + #70000000 + + + BuildmLearn + MOST SUCCESSFUL ANSWERS + more info + Explore Mode + Classic Mode + Category Mode + Settings + + #800099CC + #51ffffff + #51000000 + #A0797979 + #A00099CC + #A0CC0000 + #A099CC00 + #A033B5E5 + + Map + Fun + Pin the capital of India + 00:60 + Submit + Mcq + What is the capital of India ? + Option 1 + Option 2 + Option 3 + Option 4 + Category Mode + Classic Mode + "In this mode, you can select your phone location or select any of the available countries from the drop-down. The questions will be based on your selection." + Use My Location + Or select a location + Play + Explore Mode + Select a continent + Double tap the continent to select + Start Challenge + Loading + Start Challenge + Answer + Test + Score Board + 96 + Your Score + Questions correctly solved + 18/20 + TestDb + Please Wait...\nFetching Your Location + Version: 2.0.0 + Are you sure you want to quit this challenge? + Yes + No + "\'Learn from Map\' is an educative game that teaches geography in a fun way. The users get to use an interactive map to answer questions by pinning relevant location on the Maps." + Developed by BuildmLearn + Visit us at www.buildmlearn.org + Select a category + "In this mode, you can select a category from the given list. Question will be based on selected category." + Statistics + Play challenges to see statistics here! + India + 95% + Settings + Rate this app + AppTutorial + Show App tutorial + Sound + Notifications + Location services are disabled, do you wish to enable location? + Not now + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/values/styles.xml b/LearnFromMap/learnFromMap/src/main/res/values/styles.xml new file mode 100644 index 00000000..81980221 --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/values/styles.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/learnFromMap/src/main/res/values/text_view_plus_attrs.xml b/LearnFromMap/learnFromMap/src/main/res/values/text_view_plus_attrs.xml new file mode 100644 index 00000000..2db296ac --- /dev/null +++ b/LearnFromMap/learnFromMap/src/main/res/values/text_view_plus_attrs.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/LearnFromMap/settings.gradle b/LearnFromMap/settings.gradle new file mode 100644 index 00000000..617179d1 --- /dev/null +++ b/LearnFromMap/settings.gradle @@ -0,0 +1,3 @@ +include ':holoGraphLibrary' +include ':volley_buildmlearn' +include ':learnFromMap' diff --git a/LearnFromMap/volley_buildmlearn/build.gradle b/LearnFromMap/volley_buildmlearn/build.gradle new file mode 100644 index 00000000..bbfeb03c --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/build.gradle @@ -0,0 +1 @@ +apply plugin: 'java' diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/AuthFailureError.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/AuthFailureError.java new file mode 100644 index 00000000..7bb2e15f --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/AuthFailureError.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +import android.content.Intent; + +import com.android.volley.NetworkResponse; +import com.android.volley.VolleyError; + +/** + * Error indicating that there was an authentication failure when performing a Request. + */ +@SuppressWarnings("serial") +public class AuthFailureError extends VolleyError { + /** An intent that can be used to resolve this exception. (Brings up the password dialog.) */ + private Intent mResolutionIntent; + + public AuthFailureError() { } + + public AuthFailureError(Intent intent) { + mResolutionIntent = intent; + } + + public AuthFailureError(NetworkResponse response) { + super(response); + } + + public AuthFailureError(String message) { + super(message); + } + + public AuthFailureError(String message, Exception reason) { + super(message, reason); + } + + public Intent getResolutionIntent() { + return mResolutionIntent; + } + + @Override + public String getMessage() { + if (mResolutionIntent != null) { + return "User needs to (re)enter credentials."; + } + return super.getMessage(); + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/Cache.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/Cache.java new file mode 100644 index 00000000..eafd1188 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/Cache.java @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +import java.util.Collections; +import java.util.Map; + +/** + * An interface for a cache keyed by a String with a byte array as data. + */ +public interface Cache { + /** + * Retrieves an entry from the cache. + * @param key Cache key + * @return An {@link Entry} or null in the event of a cache miss + */ + public Entry get(String key); + + /** + * Adds or replaces an entry to the cache. + * @param key Cache key + * @param entry Data to store and metadata for cache coherency, TTL, etc. + */ + public void put(String key, Entry entry); + + /** + * Performs any potentially long-running actions needed to initialize the cache; + * will be called from a worker thread. + */ + public void initialize(); + + /** + * Invalidates an entry in the cache. + * @param key Cache key + * @param fullExpire True to fully expire the entry, false to soft expire + */ + public void invalidate(String key, boolean fullExpire); + + /** + * Removes an entry from the cache. + * @param key Cache key + */ + public void remove(String key); + + /** + * Empties the cache. + */ + public void clear(); + + /** + * Data and metadata for an entry returned by the cache. + */ + public static class Entry { + /** The data returned from cache. */ + public byte[] data; + + /** ETag for cache coherency. */ + public String etag; + + /** Date of this response as reported by the server. */ + public long serverDate; + + /** TTL for this record. */ + public long ttl; + + /** Soft TTL for this record. */ + public long softTtl; + + /** Immutable response headers as received from server; must be non-null. */ + public Map responseHeaders = Collections.emptyMap(); + + /** True if the entry is expired. */ + public boolean isExpired() { + return this.ttl < System.currentTimeMillis(); + } + + /** True if a refresh is needed from the original data source. */ + public boolean refreshNeeded() { + return this.softTtl < System.currentTimeMillis(); + } + } + +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/CacheDispatcher.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/CacheDispatcher.java new file mode 100644 index 00000000..18d219b4 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/CacheDispatcher.java @@ -0,0 +1,158 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +import android.os.Process; + +import java.util.concurrent.BlockingQueue; + +/** + * Provides a thread for performing cache triage on a queue of requests. + * + * Requests added to the specified cache queue are resolved from cache. + * Any deliverable response is posted back to the caller via a + * {@link ResponseDelivery}. Cache misses and responses that require + * refresh are enqueued on the specified network queue for processing + * by a {@link NetworkDispatcher}. + */ +public class CacheDispatcher extends Thread { + + private static final boolean DEBUG = VolleyLog.DEBUG; + + /** The queue of requests coming in for triage. */ + private final BlockingQueue> mCacheQueue; + + /** The queue of requests going out to the network. */ + private final BlockingQueue> mNetworkQueue; + + /** The cache to read from. */ + private final Cache mCache; + + /** For posting responses. */ + private final ResponseDelivery mDelivery; + + /** Used for telling us to die. */ + private volatile boolean mQuit = false; + + /** + * Creates a new cache triage dispatcher thread. You must call {@link #start()} + * in order to begin processing. + * + * @param cacheQueue Queue of incoming requests for triage + * @param networkQueue Queue to post requests that require network to + * @param cache Cache interface to use for resolution + * @param delivery Delivery interface to use for posting responses + */ + public CacheDispatcher( + BlockingQueue> cacheQueue, BlockingQueue> networkQueue, + Cache cache, ResponseDelivery delivery) { + mCacheQueue = cacheQueue; + mNetworkQueue = networkQueue; + mCache = cache; + mDelivery = delivery; + } + + /** + * Forces this dispatcher to quit immediately. If any requests are still in + * the queue, they are not guaranteed to be processed. + */ + public void quit() { + mQuit = true; + interrupt(); + } + + @Override + public void run() { + if (DEBUG) VolleyLog.v("start new dispatcher"); + Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); + + // Make a blocking call to initialize the cache. + mCache.initialize(); + + while (true) { + try { + // Get a request from the cache triage queue, blocking until + // at least one is available. + final Request request = mCacheQueue.take(); + request.addMarker("cache-queue-take"); + + // If the request has been canceled, don't bother dispatching it. + if (request.isCanceled()) { + request.finish("cache-discard-canceled"); + continue; + } + + // Attempt to retrieve this item from cache. + Cache.Entry entry = mCache.get(request.getCacheKey()); + if (entry == null) { + request.addMarker("cache-miss"); + // Cache miss; send off to the network dispatcher. + mNetworkQueue.put(request); + continue; + } + + // If it is completely expired, just send it to the network. + if (entry.isExpired()) { + request.addMarker("cache-hit-expired"); + request.setCacheEntry(entry); + mNetworkQueue.put(request); + continue; + } + + // We have a cache hit; parse its data for delivery back to the request. + request.addMarker("cache-hit"); + Response response = request.parseNetworkResponse( + new NetworkResponse(entry.data, entry.responseHeaders)); + request.addMarker("cache-hit-parsed"); + + if (!entry.refreshNeeded()) { + // Completely unexpired cache hit. Just deliver the response. + mDelivery.postResponse(request, response); + } else { + // Soft-expired cache hit. We can deliver the cached response, + // but we need to also send the request to the network for + // refreshing. + request.addMarker("cache-hit-refresh-needed"); + request.setCacheEntry(entry); + + // Mark the response as intermediate. + response.intermediate = true; + + // Post the intermediate response back to the user and have + // the delivery then forward the request along to the network. + mDelivery.postResponse(request, response, new Runnable() { + @Override + public void run() { + try { + mNetworkQueue.put(request); + } catch (InterruptedException e) { + // Not much we can do about this. + } + } + }); + } + + } catch (InterruptedException e) { + // We may have been interrupted because it was time to quit. + if (mQuit) { + return; + } + continue; + } + } + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/DefaultRetryPolicy.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/DefaultRetryPolicy.java new file mode 100644 index 00000000..ce4f9e0a --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/DefaultRetryPolicy.java @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +/** + * Default retry policy for requests. + */ +public class DefaultRetryPolicy implements RetryPolicy { + /** The current timeout in milliseconds. */ + private int mCurrentTimeoutMs; + + /** The current retry count. */ + private int mCurrentRetryCount; + + /** The maximum number of attempts. */ + private final int mMaxNumRetries; + + /** The backoff multiplier for for the policy. */ + private final float mBackoffMultiplier; + + /** The default socket timeout in milliseconds */ + public static final int DEFAULT_TIMEOUT_MS = 2500; + + /** The default number of retries */ + public static final int DEFAULT_MAX_RETRIES = 1; + + /** The default backoff multiplier */ + public static final float DEFAULT_BACKOFF_MULT = 1f; + + /** + * Constructs a new retry policy using the default timeouts. + */ + public DefaultRetryPolicy() { + this(DEFAULT_TIMEOUT_MS, DEFAULT_MAX_RETRIES, DEFAULT_BACKOFF_MULT); + } + + /** + * Constructs a new retry policy. + * @param initialTimeoutMs The initial timeout for the policy. + * @param maxNumRetries The maximum number of retries. + * @param backoffMultiplier Backoff multiplier for the policy. + */ + public DefaultRetryPolicy(int initialTimeoutMs, int maxNumRetries, float backoffMultiplier) { + mCurrentTimeoutMs = initialTimeoutMs; + mMaxNumRetries = maxNumRetries; + mBackoffMultiplier = backoffMultiplier; + } + + /** + * Returns the current timeout. + */ + @Override + public int getCurrentTimeout() { + return mCurrentTimeoutMs; + } + + /** + * Returns the current retry count. + */ + @Override + public int getCurrentRetryCount() { + return mCurrentRetryCount; + } + + /** + * Prepares for the next retry by applying a backoff to the timeout. + * @param error The error code of the last attempt. + */ + @Override + public void retry(VolleyError error) throws VolleyError { + mCurrentRetryCount++; + mCurrentTimeoutMs += (mCurrentTimeoutMs * mBackoffMultiplier); + if (!hasAttemptRemaining()) { + throw error; + } + } + + /** + * Returns true if this policy has attempts remaining, false otherwise. + */ + protected boolean hasAttemptRemaining() { + return mCurrentRetryCount <= mMaxNumRetries; + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/ExecutorDelivery.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/ExecutorDelivery.java new file mode 100644 index 00000000..1babfcd1 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/ExecutorDelivery.java @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +import android.os.Handler; + +import java.util.concurrent.Executor; + +/** + * Delivers responses and errors. + */ +public class ExecutorDelivery implements ResponseDelivery { + /** Used for posting responses, typically to the main thread. */ + private final Executor mResponsePoster; + + /** + * Creates a new response delivery interface. + * @param handler {@link Handler} to post responses on + */ + public ExecutorDelivery(final Handler handler) { + // Make an Executor that just wraps the handler. + mResponsePoster = new Executor() { + @Override + public void execute(Runnable command) { + handler.post(command); + } + }; + } + + /** + * Creates a new response delivery interface, mockable version + * for testing. + * @param executor For running delivery tasks + */ + public ExecutorDelivery(Executor executor) { + mResponsePoster = executor; + } + + @Override + public void postResponse(Request request, Response response) { + postResponse(request, response, null); + } + + @Override + public void postResponse(Request request, Response response, Runnable runnable) { + request.markDelivered(); + request.addMarker("post-response"); + mResponsePoster.execute(new ResponseDeliveryRunnable(request, response, runnable)); + } + + @Override + public void postError(Request request, VolleyError error) { + request.addMarker("post-error"); + Response response = Response.error(error); + mResponsePoster.execute(new ResponseDeliveryRunnable(request, response, null)); + } + + /** + * A Runnable used for delivering network responses to a listener on the + * main thread. + */ + @SuppressWarnings("rawtypes") + private class ResponseDeliveryRunnable implements Runnable { + private final Request mRequest; + private final Response mResponse; + private final Runnable mRunnable; + + public ResponseDeliveryRunnable(Request request, Response response, Runnable runnable) { + mRequest = request; + mResponse = response; + mRunnable = runnable; + } + + @SuppressWarnings("unchecked") + @Override + public void run() { + // If this request has canceled, finish it and don't deliver. + if (mRequest.isCanceled()) { + mRequest.finish("canceled-at-delivery"); + return; + } + + // Deliver a normal response or error, depending. + if (mResponse.isSuccess()) { + mRequest.deliverResponse(mResponse.result); + } else { + mRequest.deliverError(mResponse.error); + } + + // If this is an intermediate response, add a marker, otherwise we're done + // and the request can be finished. + if (mResponse.intermediate) { + mRequest.addMarker("intermediate-response"); + } else { + mRequest.finish("done"); + } + + // If we have been provided a post-delivery runnable, run it. + if (mRunnable != null) { + mRunnable.run(); + } + } + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/Network.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/Network.java new file mode 100644 index 00000000..ab45830f --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/Network.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +/** + * An interface for performing requests. + */ +public interface Network { + /** + * Performs the specified request. + * @param request Request to process + * @return A {@link NetworkResponse} with data and caching metadata; will never be null + * @throws VolleyError on errors + */ + public NetworkResponse performRequest(Request request) throws VolleyError; +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/NetworkDispatcher.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/NetworkDispatcher.java new file mode 100644 index 00000000..a654ead5 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/NetworkDispatcher.java @@ -0,0 +1,147 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +import android.annotation.TargetApi; +import android.net.TrafficStats; +import android.os.Build; +import android.os.Process; + +import java.util.concurrent.BlockingQueue; + +/** + * Provides a thread for performing network dispatch from a queue of requests. + * + * Requests added to the specified queue are processed from the network via a + * specified {@link Network} interface. Responses are committed to cache, if + * eligible, using a specified {@link Cache} interface. Valid responses and + * errors are posted back to the caller via a {@link ResponseDelivery}. + */ +public class NetworkDispatcher extends Thread { + /** The queue of requests to service. */ + private final BlockingQueue> mQueue; + /** The network interface for processing requests. */ + private final Network mNetwork; + /** The cache to write to. */ + private final Cache mCache; + /** For posting responses and errors. */ + private final ResponseDelivery mDelivery; + /** Used for telling us to die. */ + private volatile boolean mQuit = false; + + /** + * Creates a new network dispatcher thread. You must call {@link #start()} + * in order to begin processing. + * + * @param queue Queue of incoming requests for triage + * @param network Network interface to use for performing requests + * @param cache Cache interface to use for writing responses to cache + * @param delivery Delivery interface to use for posting responses + */ + public NetworkDispatcher(BlockingQueue> queue, + Network network, Cache cache, + ResponseDelivery delivery) { + mQueue = queue; + mNetwork = network; + mCache = cache; + mDelivery = delivery; + } + + /** + * Forces this dispatcher to quit immediately. If any requests are still in + * the queue, they are not guaranteed to be processed. + */ + public void quit() { + mQuit = true; + interrupt(); + } + + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) + private void addTrafficStatsTag(Request request) { + // Tag the request (if API >= 14) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + TrafficStats.setThreadStatsTag(request.getTrafficStatsTag()); + } + } + + @Override + public void run() { + Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); + Request request; + while (true) { + try { + // Take a request from the queue. + request = mQueue.take(); + } catch (InterruptedException e) { + // We may have been interrupted because it was time to quit. + if (mQuit) { + return; + } + continue; + } + + try { + request.addMarker("network-queue-take"); + + // If the request was cancelled already, do not perform the + // network request. + if (request.isCanceled()) { + request.finish("network-discard-cancelled"); + continue; + } + + addTrafficStatsTag(request); + + // Perform the network request. + NetworkResponse networkResponse = mNetwork.performRequest(request); + request.addMarker("network-http-complete"); + + // If the server returned 304 AND we delivered a response already, + // we're done -- don't deliver a second identical response. + if (networkResponse.notModified && request.hasHadResponseDelivered()) { + request.finish("not-modified"); + continue; + } + + // Parse the response here on the worker thread. + Response response = request.parseNetworkResponse(networkResponse); + request.addMarker("network-parse-complete"); + + // Write to cache if applicable. + // TODO: Only update cache metadata instead of entire record for 304s. + if (request.shouldCache() && response.cacheEntry != null) { + mCache.put(request.getCacheKey(), response.cacheEntry); + request.addMarker("network-cache-written"); + } + + // Post the response back. + request.markDelivered(); + mDelivery.postResponse(request, response); + } catch (VolleyError volleyError) { + parseAndDeliverNetworkError(request, volleyError); + } catch (Exception e) { + VolleyLog.e(e, "Unhandled exception %s", e.toString()); + mDelivery.postError(request, new VolleyError(e)); + } + } + } + + private void parseAndDeliverNetworkError(Request request, VolleyError error) { + error = request.parseNetworkError(error); + mDelivery.postError(request, error); + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/NetworkError.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/NetworkError.java new file mode 100644 index 00000000..42fbcc26 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/NetworkError.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +import com.android.volley.NetworkResponse; +import com.android.volley.VolleyError; + +/** + * Indicates that there was a network error when performing a Volley request. + */ +@SuppressWarnings("serial") +public class NetworkError extends VolleyError { + public NetworkError() { + super(); + } + + public NetworkError(Throwable cause) { + super(cause); + } + + public NetworkError(NetworkResponse networkResponse) { + super(networkResponse); + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/NetworkResponse.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/NetworkResponse.java new file mode 100644 index 00000000..6a0b5c2b --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/NetworkResponse.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +import org.apache.http.HttpStatus; + +import java.util.Collections; +import java.util.Map; + +/** + * Data and headers returned from {@link Network#performRequest(Request)}. + */ +public class NetworkResponse { + /** + * Creates a new network response. + * @param statusCode the HTTP status code + * @param data Response body + * @param headers Headers returned with this response, or null for none + * @param notModified True if the server returned a 304 and the data was already in cache + */ + public NetworkResponse(int statusCode, byte[] data, Map headers, + boolean notModified) { + this.statusCode = statusCode; + this.data = data; + this.headers = headers; + this.notModified = notModified; + } + + public NetworkResponse(byte[] data) { + this(HttpStatus.SC_OK, data, Collections.emptyMap(), false); + } + + public NetworkResponse(byte[] data, Map headers) { + this(HttpStatus.SC_OK, data, headers, false); + } + + /** The HTTP status code. */ + public final int statusCode; + + /** Raw data from this response. */ + public final byte[] data; + + /** Response headers. */ + public final Map headers; + + /** True if the server returned a 304 (Not Modified). */ + public final boolean notModified; +} \ No newline at end of file diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/NoConnectionError.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/NoConnectionError.java new file mode 100644 index 00000000..fc231562 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/NoConnectionError.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +/** + * Error indicating that no connection could be established when performing a Volley request. + */ +@SuppressWarnings("serial") +public class NoConnectionError extends NetworkError { + public NoConnectionError() { + super(); + } + + public NoConnectionError(Throwable reason) { + super(reason); + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/ParseError.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/ParseError.java new file mode 100644 index 00000000..a55da470 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/ParseError.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +import com.android.volley.NetworkResponse; +import com.android.volley.VolleyError; + +/** + * Indicates that the server's response could not be parsed. + */ +@SuppressWarnings("serial") +public class ParseError extends VolleyError { + public ParseError() { } + + public ParseError(NetworkResponse networkResponse) { + super(networkResponse); + } + + public ParseError(Throwable cause) { + super(cause); + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/Request.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/Request.java new file mode 100644 index 00000000..53093e68 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/Request.java @@ -0,0 +1,589 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +import android.net.TrafficStats; +import android.net.Uri; +import android.os.Handler; +import android.os.Looper; +import android.os.SystemClock; +import android.text.TextUtils; + +import com.android.volley.VolleyLog.MarkerLog; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.Collections; +import java.util.Map; + +/** + * Base class for all network requests. + * + * @param The type of parsed response this request expects. + */ +public abstract class Request implements Comparable> { + + /** + * Default encoding for POST or PUT parameters. See {@link #getParamsEncoding()}. + */ + private static final String DEFAULT_PARAMS_ENCODING = "UTF-8"; + + /** + * Supported request methods. + */ + public interface Method { + int DEPRECATED_GET_OR_POST = -1; + int GET = 0; + int POST = 1; + int PUT = 2; + int DELETE = 3; + int HEAD = 4; + int OPTIONS = 5; + int TRACE = 6; + int PATCH = 7; + } + + /** An event log tracing the lifetime of this request; for debugging. */ + private final MarkerLog mEventLog = MarkerLog.ENABLED ? new MarkerLog() : null; + + /** + * Request method of this request. Currently supports GET, POST, PUT, DELETE, HEAD, OPTIONS, + * TRACE, and PATCH. + */ + private final int mMethod; + + /** URL of this request. */ + private final String mUrl; + + /** Default tag for {@link TrafficStats}. */ + private final int mDefaultTrafficStatsTag; + + /** Listener interface for errors. */ + private final Response.ErrorListener mErrorListener; + + /** Sequence number of this request, used to enforce FIFO ordering. */ + private Integer mSequence; + + /** The request queue this request is associated with. */ + private RequestQueue mRequestQueue; + + /** Whether or not responses to this request should be cached. */ + private boolean mShouldCache = true; + + /** Whether or not this request has been canceled. */ + private boolean mCanceled = false; + + /** Whether or not a response has been delivered for this request yet. */ + private boolean mResponseDelivered = false; + + // A cheap variant of request tracing used to dump slow requests. + private long mRequestBirthTime = 0; + + /** Threshold at which we should log the request (even when debug logging is not enabled). */ + private static final long SLOW_REQUEST_THRESHOLD_MS = 3000; + + /** The retry policy for this request. */ + private RetryPolicy mRetryPolicy; + + /** + * When a request can be retrieved from cache but must be refreshed from + * the network, the cache entry will be stored here so that in the event of + * a "Not Modified" response, we can be sure it hasn't been evicted from cache. + */ + private Cache.Entry mCacheEntry = null; + + /** An opaque token tagging this request; used for bulk cancellation. */ + private Object mTag; + + /** + * Creates a new request with the given URL and error listener. Note that + * the normal response listener is not provided here as delivery of responses + * is provided by subclasses, who have a better idea of how to deliver an + * already-parsed response. + * + * @deprecated Use {@link #Request(int, String, com.android.volley.Response.ErrorListener)}. + */ + @Deprecated + public Request(String url, Response.ErrorListener listener) { + this(Method.DEPRECATED_GET_OR_POST, url, listener); + } + + /** + * Creates a new request with the given method (one of the values from {@link Method}), + * URL, and error listener. Note that the normal response listener is not provided here as + * delivery of responses is provided by subclasses, who have a better idea of how to deliver + * an already-parsed response. + */ + public Request(int method, String url, Response.ErrorListener listener) { + mMethod = method; + mUrl = url; + mErrorListener = listener; + setRetryPolicy(new DefaultRetryPolicy()); + + mDefaultTrafficStatsTag = findDefaultTrafficStatsTag(url); + } + + /** + * Return the method for this request. Can be one of the values in {@link Method}. + */ + public int getMethod() { + return mMethod; + } + + /** + * Set a tag on this request. Can be used to cancel all requests with this + * tag by {@link RequestQueue#cancelAll(Object)}. + * + * @return This Request object to allow for chaining. + */ + public Request setTag(Object tag) { + mTag = tag; + return this; + } + + /** + * Returns this request's tag. + * @see Request#setTag(Object) + */ + public Object getTag() { + return mTag; + } + + /** + * @return A tag for use with {@link TrafficStats#setThreadStatsTag(int)} + */ + public int getTrafficStatsTag() { + return mDefaultTrafficStatsTag; + } + + /** + * @return The hashcode of the URL's host component, or 0 if there is none. + */ + private static int findDefaultTrafficStatsTag(String url) { + if (!TextUtils.isEmpty(url)) { + Uri uri = Uri.parse(url); + if (uri != null) { + String host = uri.getHost(); + if (host != null) { + return host.hashCode(); + } + } + } + return 0; + } + + /** + * Sets the retry policy for this request. + * + * @return This Request object to allow for chaining. + */ + public Request setRetryPolicy(RetryPolicy retryPolicy) { + mRetryPolicy = retryPolicy; + return this; + } + + /** + * Adds an event to this request's event log; for debugging. + */ + public void addMarker(String tag) { + if (MarkerLog.ENABLED) { + mEventLog.add(tag, Thread.currentThread().getId()); + } else if (mRequestBirthTime == 0) { + mRequestBirthTime = SystemClock.elapsedRealtime(); + } + } + + /** + * Notifies the request queue that this request has finished (successfully or with error). + * + *

Also dumps all events from this request's event log; for debugging.

+ */ + void finish(final String tag) { + if (mRequestQueue != null) { + mRequestQueue.finish(this); + } + if (MarkerLog.ENABLED) { + final long threadId = Thread.currentThread().getId(); + if (Looper.myLooper() != Looper.getMainLooper()) { + // If we finish marking off of the main thread, we need to + // actually do it on the main thread to ensure correct ordering. + Handler mainThread = new Handler(Looper.getMainLooper()); + mainThread.post(new Runnable() { + @Override + public void run() { + mEventLog.add(tag, threadId); + mEventLog.finish(this.toString()); + } + }); + return; + } + + mEventLog.add(tag, threadId); + mEventLog.finish(this.toString()); + } else { + long requestTime = SystemClock.elapsedRealtime() - mRequestBirthTime; + if (requestTime >= SLOW_REQUEST_THRESHOLD_MS) { + VolleyLog.d("%d ms: %s", requestTime, this.toString()); + } + } + } + + /** + * Associates this request with the given queue. The request queue will be notified when this + * request has finished. + * + * @return This Request object to allow for chaining. + */ + public Request setRequestQueue(RequestQueue requestQueue) { + mRequestQueue = requestQueue; + return this; + } + + /** + * Sets the sequence number of this request. Used by {@link RequestQueue}. + * + * @return This Request object to allow for chaining. + */ + public final Request setSequence(int sequence) { + mSequence = sequence; + return this; + } + + /** + * Returns the sequence number of this request. + */ + public final int getSequence() { + if (mSequence == null) { + throw new IllegalStateException("getSequence called before setSequence"); + } + return mSequence; + } + + /** + * Returns the URL of this request. + */ + public String getUrl() { + return mUrl; + } + + /** + * Returns the cache key for this request. By default, this is the URL. + */ + public String getCacheKey() { + return getUrl(); + } + + /** + * Annotates this request with an entry retrieved for it from cache. + * Used for cache coherency support. + * + * @return This Request object to allow for chaining. + */ + public Request setCacheEntry(Cache.Entry entry) { + mCacheEntry = entry; + return this; + } + + /** + * Returns the annotated cache entry, or null if there isn't one. + */ + public Cache.Entry getCacheEntry() { + return mCacheEntry; + } + + /** + * Mark this request as canceled. No callback will be delivered. + */ + public void cancel() { + mCanceled = true; + } + + /** + * Returns true if this request has been canceled. + */ + public boolean isCanceled() { + return mCanceled; + } + + /** + * Returns a list of extra HTTP headers to go along with this request. Can + * throw {@link AuthFailureError} as authentication may be required to + * provide these values. + * @throws AuthFailureError In the event of auth failure + */ + public Map getHeaders() throws AuthFailureError { + return Collections.emptyMap(); + } + + /** + * Returns a Map of POST parameters to be used for this request, or null if + * a simple GET should be used. Can throw {@link AuthFailureError} as + * authentication may be required to provide these values. + * + *

Note that only one of getPostParams() and getPostBody() can return a non-null + * value.

+ * @throws AuthFailureError In the event of auth failure + * + * @deprecated Use {@link #getParams()} instead. + */ + @Deprecated + protected Map getPostParams() throws AuthFailureError { + return getParams(); + } + + /** + * Returns which encoding should be used when converting POST parameters returned by + * {@link #getPostParams()} into a raw POST body. + * + *

This controls both encodings: + *

    + *
  1. The string encoding used when converting parameter names and values into bytes prior + * to URL encoding them.
  2. + *
  3. The string encoding used when converting the URL encoded parameters into a raw + * byte array.
  4. + *
+ * + * @deprecated Use {@link #getParamsEncoding()} instead. + */ + @Deprecated + protected String getPostParamsEncoding() { + return getParamsEncoding(); + } + + /** + * @deprecated Use {@link #getBodyContentType()} instead. + */ + @Deprecated + public String getPostBodyContentType() { + return getBodyContentType(); + } + + /** + * Returns the raw POST body to be sent. + * + * @throws AuthFailureError In the event of auth failure + * + * @deprecated Use {@link #getBody()} instead. + */ + @Deprecated + public byte[] getPostBody() throws AuthFailureError { + // Note: For compatibility with legacy clients of volley, this implementation must remain + // here instead of simply calling the getBody() function because this function must + // call getPostParams() and getPostParamsEncoding() since legacy clients would have + // overridden these two member functions for POST requests. + Map postParams = getPostParams(); + if (postParams != null && postParams.size() > 0) { + return encodeParameters(postParams, getPostParamsEncoding()); + } + return null; + } + + /** + * Returns a Map of parameters to be used for a POST or PUT request. Can throw + * {@link AuthFailureError} as authentication may be required to provide these values. + * + *

Note that you can directly override {@link #getBody()} for custom data.

+ * + * @throws AuthFailureError in the event of auth failure + */ + protected Map getParams() throws AuthFailureError { + return null; + } + + /** + * Returns which encoding should be used when converting POST or PUT parameters returned by + * {@link #getParams()} into a raw POST or PUT body. + * + *

This controls both encodings: + *

    + *
  1. The string encoding used when converting parameter names and values into bytes prior + * to URL encoding them.
  2. + *
  3. The string encoding used when converting the URL encoded parameters into a raw + * byte array.
  4. + *
+ */ + protected String getParamsEncoding() { + return DEFAULT_PARAMS_ENCODING; + } + + public String getBodyContentType() { + return "application/x-www-form-urlencoded; charset=" + getParamsEncoding(); + } + + /** + * Returns the raw POST or PUT body to be sent. + * + * @throws AuthFailureError in the event of auth failure + */ + public byte[] getBody() throws AuthFailureError { + Map params = getParams(); + if (params != null && params.size() > 0) { + return encodeParameters(params, getParamsEncoding()); + } + return null; + } + + /** + * Converts params into an application/x-www-form-urlencoded encoded string. + */ + private byte[] encodeParameters(Map params, String paramsEncoding) { + StringBuilder encodedParams = new StringBuilder(); + try { + for (Map.Entry entry : params.entrySet()) { + encodedParams.append(URLEncoder.encode(entry.getKey(), paramsEncoding)); + encodedParams.append('='); + encodedParams.append(URLEncoder.encode(entry.getValue(), paramsEncoding)); + encodedParams.append('&'); + } + return encodedParams.toString().getBytes(paramsEncoding); + } catch (UnsupportedEncodingException uee) { + throw new RuntimeException("Encoding not supported: " + paramsEncoding, uee); + } + } + + /** + * Set whether or not responses to this request should be cached. + * + * @return This Request object to allow for chaining. + */ + public final Request setShouldCache(boolean shouldCache) { + mShouldCache = shouldCache; + return this; + } + + /** + * Returns true if responses to this request should be cached. + */ + public final boolean shouldCache() { + return mShouldCache; + } + + /** + * Priority values. Requests will be processed from higher priorities to + * lower priorities, in FIFO order. + */ + public enum Priority { + LOW, + NORMAL, + HIGH, + IMMEDIATE + } + + /** + * Returns the {@link Priority} of this request; {@link Priority#NORMAL} by default. + */ + public Priority getPriority() { + return Priority.NORMAL; + } + + /** + * Returns the socket timeout in milliseconds per retry attempt. (This value can be changed + * per retry attempt if a backoff is specified via backoffTimeout()). If there are no retry + * attempts remaining, this will cause delivery of a {@link TimeoutError} error. + */ + public final int getTimeoutMs() { + return mRetryPolicy.getCurrentTimeout(); + } + + /** + * Returns the retry policy that should be used for this request. + */ + public RetryPolicy getRetryPolicy() { + return mRetryPolicy; + } + + /** + * Mark this request as having a response delivered on it. This can be used + * later in the request's lifetime for suppressing identical responses. + */ + public void markDelivered() { + mResponseDelivered = true; + } + + /** + * Returns true if this request has had a response delivered for it. + */ + public boolean hasHadResponseDelivered() { + return mResponseDelivered; + } + + /** + * Subclasses must implement this to parse the raw network response + * and return an appropriate response type. This method will be + * called from a worker thread. The response will not be delivered + * if you return null. + * @param response Response from the network + * @return The parsed response, or null in the case of an error + */ + abstract protected Response parseNetworkResponse(NetworkResponse response); + + /** + * Subclasses can override this method to parse 'networkError' and return a more specific error. + * + *

The default implementation just returns the passed 'networkError'.

+ * + * @param volleyError the error retrieved from the network + * @return an NetworkError augmented with additional information + */ + protected VolleyError parseNetworkError(VolleyError volleyError) { + return volleyError; + } + + /** + * Subclasses must implement this to perform delivery of the parsed + * response to their listeners. The given response is guaranteed to + * be non-null; responses that fail to parse are not delivered. + * @param response The parsed response returned by + * {@link #parseNetworkResponse(NetworkResponse)} + */ + abstract protected void deliverResponse(T response); + + /** + * Delivers error message to the ErrorListener that the Request was + * initialized with. + * + * @param error Error details + */ + public void deliverError(VolleyError error) { + if (mErrorListener != null) { + mErrorListener.onErrorResponse(error); + } + } + + /** + * Our comparator sorts from high to low priority, and secondarily by + * sequence number to provide FIFO ordering. + */ + @Override + public int compareTo(Request other) { + Priority left = this.getPriority(); + Priority right = other.getPriority(); + + // High-priority requests are "lesser" so they are sorted to the front. + // Equal priorities are sorted by sequence number to provide FIFO ordering. + return left == right ? + this.mSequence - other.mSequence : + right.ordinal() - left.ordinal(); + } + + @Override + public String toString() { + String trafficStatsTag = "0x" + Integer.toHexString(getTrafficStatsTag()); + return (mCanceled ? "[X] " : "[ ] ") + getUrl() + " " + trafficStatsTag + " " + + getPriority() + " " + mSequence; + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/RequestQueue.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/RequestQueue.java new file mode 100644 index 00000000..5c0e7afb --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/RequestQueue.java @@ -0,0 +1,286 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +import android.os.Handler; +import android.os.Looper; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.Map; +import java.util.Queue; +import java.util.Set; +import java.util.concurrent.PriorityBlockingQueue; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * A request dispatch queue with a thread pool of dispatchers. + * + * Calling {@link #add(Request)} will enqueue the given Request for dispatch, + * resolving from either cache or network on a worker thread, and then delivering + * a parsed response on the main thread. + */ +public class RequestQueue { + + /** Used for generating monotonically-increasing sequence numbers for requests. */ + private AtomicInteger mSequenceGenerator = new AtomicInteger(); + + /** + * Staging area for requests that already have a duplicate request in flight. + * + *
    + *
  • containsKey(cacheKey) indicates that there is a request in flight for the given cache + * key.
  • + *
  • get(cacheKey) returns waiting requests for the given cache key. The in flight request + * is not contained in that list. Is null if no requests are staged.
  • + *
+ */ + private final Map>> mWaitingRequests = + new HashMap>>(); + + /** + * The set of all requests currently being processed by this RequestQueue. A Request + * will be in this set if it is waiting in any queue or currently being processed by + * any dispatcher. + */ + private final Set> mCurrentRequests = new HashSet>(); + + /** The cache triage queue. */ + private final PriorityBlockingQueue> mCacheQueue = + new PriorityBlockingQueue>(); + + /** The queue of requests that are actually going out to the network. */ + private final PriorityBlockingQueue> mNetworkQueue = + new PriorityBlockingQueue>(); + + /** Number of network request dispatcher threads to start. */ + private static final int DEFAULT_NETWORK_THREAD_POOL_SIZE = 4; + + /** Cache interface for retrieving and storing responses. */ + private final Cache mCache; + + /** Network interface for performing requests. */ + private final Network mNetwork; + + /** Response delivery mechanism. */ + private final ResponseDelivery mDelivery; + + /** The network dispatchers. */ + private NetworkDispatcher[] mDispatchers; + + /** The cache dispatcher. */ + private CacheDispatcher mCacheDispatcher; + + /** + * Creates the worker pool. Processing will not begin until {@link #start()} is called. + * + * @param cache A Cache to use for persisting responses to disk + * @param network A Network interface for performing HTTP requests + * @param threadPoolSize Number of network dispatcher threads to create + * @param delivery A ResponseDelivery interface for posting responses and errors + */ + public RequestQueue(Cache cache, Network network, int threadPoolSize, + ResponseDelivery delivery) { + mCache = cache; + mNetwork = network; + mDispatchers = new NetworkDispatcher[threadPoolSize]; + mDelivery = delivery; + } + + /** + * Creates the worker pool. Processing will not begin until {@link #start()} is called. + * + * @param cache A Cache to use for persisting responses to disk + * @param network A Network interface for performing HTTP requests + * @param threadPoolSize Number of network dispatcher threads to create + */ + public RequestQueue(Cache cache, Network network, int threadPoolSize) { + this(cache, network, threadPoolSize, + new ExecutorDelivery(new Handler(Looper.getMainLooper()))); + } + + /** + * Creates the worker pool. Processing will not begin until {@link #start()} is called. + * + * @param cache A Cache to use for persisting responses to disk + * @param network A Network interface for performing HTTP requests + */ + public RequestQueue(Cache cache, Network network) { + this(cache, network, DEFAULT_NETWORK_THREAD_POOL_SIZE); + } + + /** + * Starts the dispatchers in this queue. + */ + public void start() { + stop(); // Make sure any currently running dispatchers are stopped. + // Create the cache dispatcher and start it. + mCacheDispatcher = new CacheDispatcher(mCacheQueue, mNetworkQueue, mCache, mDelivery); + mCacheDispatcher.start(); + + // Create network dispatchers (and corresponding threads) up to the pool size. + for (int i = 0; i < mDispatchers.length; i++) { + NetworkDispatcher networkDispatcher = new NetworkDispatcher(mNetworkQueue, mNetwork, + mCache, mDelivery); + mDispatchers[i] = networkDispatcher; + networkDispatcher.start(); + } + } + + /** + * Stops the cache and network dispatchers. + */ + public void stop() { + if (mCacheDispatcher != null) { + mCacheDispatcher.quit(); + } + for (int i = 0; i < mDispatchers.length; i++) { + if (mDispatchers[i] != null) { + mDispatchers[i].quit(); + } + } + } + + /** + * Gets a sequence number. + */ + public int getSequenceNumber() { + return mSequenceGenerator.incrementAndGet(); + } + + /** + * Gets the {@link Cache} instance being used. + */ + public Cache getCache() { + return mCache; + } + + /** + * A simple predicate or filter interface for Requests, for use by + * {@link RequestQueue#cancelAll(RequestFilter)}. + */ + public interface RequestFilter { + public boolean apply(Request request); + } + + /** + * Cancels all requests in this queue for which the given filter applies. + * @param filter The filtering function to use + */ + public void cancelAll(RequestFilter filter) { + synchronized (mCurrentRequests) { + for (Request request : mCurrentRequests) { + if (filter.apply(request)) { + request.cancel(); + } + } + } + } + + /** + * Cancels all requests in this queue with the given tag. Tag must be non-null + * and equality is by identity. + */ + public void cancelAll(final Object tag) { + if (tag == null) { + throw new IllegalArgumentException("Cannot cancelAll with a null tag"); + } + cancelAll(new RequestFilter() { + @Override + public boolean apply(Request request) { + return request.getTag() == tag; + } + }); + } + + /** + * Adds a Request to the dispatch queue. + * @param request The request to service + * @return The passed-in request + */ + public Request add(Request request) { + // Tag the request as belonging to this queue and add it to the set of current requests. + request.setRequestQueue(this); + synchronized (mCurrentRequests) { + mCurrentRequests.add(request); + } + + // Process requests in the order they are added. + request.setSequence(getSequenceNumber()); + request.addMarker("add-to-queue"); + + // If the request is uncacheable, skip the cache queue and go straight to the network. + if (!request.shouldCache()) { + mNetworkQueue.add(request); + return request; + } + + // Insert request into stage if there's already a request with the same cache key in flight. + synchronized (mWaitingRequests) { + String cacheKey = request.getCacheKey(); + if (mWaitingRequests.containsKey(cacheKey)) { + // There is already a request in flight. Queue up. + Queue> stagedRequests = mWaitingRequests.get(cacheKey); + if (stagedRequests == null) { + stagedRequests = new LinkedList>(); + } + stagedRequests.add(request); + mWaitingRequests.put(cacheKey, stagedRequests); + if (VolleyLog.DEBUG) { + VolleyLog.v("Request for cacheKey=%s is in flight, putting on hold.", cacheKey); + } + } else { + // Insert 'null' queue for this cacheKey, indicating there is now a request in + // flight. + mWaitingRequests.put(cacheKey, null); + mCacheQueue.add(request); + } + return request; + } + } + + /** + * Called from {@link Request#finish(String)}, indicating that processing of the given request + * has finished. + * + *

Releases waiting requests for request.getCacheKey() if + * request.shouldCache().

+ */ + void finish(Request request) { + // Remove from the set of requests currently being processed. + synchronized (mCurrentRequests) { + mCurrentRequests.remove(request); + } + + if (request.shouldCache()) { + synchronized (mWaitingRequests) { + String cacheKey = request.getCacheKey(); + Queue> waitingRequests = mWaitingRequests.remove(cacheKey); + if (waitingRequests != null) { + if (VolleyLog.DEBUG) { + VolleyLog.v("Releasing %d waiting requests for cacheKey=%s.", + waitingRequests.size(), cacheKey); + } + // Process all queued up requests. They won't be considered as in flight, but + // that's not a problem as the cache has been primed by 'request'. + mCacheQueue.addAll(waitingRequests); + } + } + } + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/Response.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/Response.java new file mode 100644 index 00000000..1165595d --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/Response.java @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +/** + * Encapsulates a parsed response for delivery. + * + * @param Parsed type of this response + */ +public class Response { + + /** Callback interface for delivering parsed responses. */ + public interface Listener { + /** Called when a response is received. */ + public void onResponse(T response); + } + + /** Callback interface for delivering error responses. */ + public interface ErrorListener { + /** + * Callback method that an error has been occurred with the + * provided error code and optional user-readable message. + */ + public void onErrorResponse(VolleyError error); + } + + /** Returns a successful response containing the parsed result. */ + public static Response success(T result, Cache.Entry cacheEntry) { + return new Response(result, cacheEntry); + } + + /** + * Returns a failed response containing the given error code and an optional + * localized message displayed to the user. + */ + public static Response error(VolleyError error) { + return new Response(error); + } + + /** Parsed response, or null in the case of error. */ + public final T result; + + /** Cache metadata for this response, or null in the case of error. */ + public final Cache.Entry cacheEntry; + + /** Detailed error information if errorCode != OK. */ + public final VolleyError error; + + /** True if this response was a soft-expired one and a second one MAY be coming. */ + public boolean intermediate = false; + + /** + * Returns whether this response is considered successful. + */ + public boolean isSuccess() { + return error == null; + } + + + private Response(T result, Cache.Entry cacheEntry) { + this.result = result; + this.cacheEntry = cacheEntry; + this.error = null; + } + + private Response(VolleyError error) { + this.result = null; + this.cacheEntry = null; + this.error = error; + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/ResponseDelivery.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/ResponseDelivery.java new file mode 100644 index 00000000..87706afc --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/ResponseDelivery.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +public interface ResponseDelivery { + /** + * Parses a response from the network or cache and delivers it. + */ + public void postResponse(Request request, Response response); + + /** + * Parses a response from the network or cache and delivers it. The provided + * Runnable will be executed after delivery. + */ + public void postResponse(Request request, Response response, Runnable runnable); + + /** + * Posts an error for the given request. + */ + public void postError(Request request, VolleyError error); +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/RetryPolicy.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/RetryPolicy.java new file mode 100644 index 00000000..0dd198b2 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/RetryPolicy.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +/** + * Retry policy for a request. + */ +public interface RetryPolicy { + + /** + * Returns the current timeout (used for logging). + */ + public int getCurrentTimeout(); + + /** + * Returns the current retry count (used for logging). + */ + public int getCurrentRetryCount(); + + /** + * Prepares for the next retry by applying a backoff to the timeout. + * @param error The error code of the last attempt. + * @throws VolleyError In the event that the retry could not be performed (for example if we + * ran out of attempts), the passed in error is thrown. + */ + public void retry(VolleyError error) throws VolleyError; +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/ServerError.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/ServerError.java new file mode 100644 index 00000000..b29a6c66 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/ServerError.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +import com.android.volley.NetworkResponse; +import com.android.volley.VolleyError; + +/** + * Indicates that the error responded with an error response. + */ +@SuppressWarnings("serial") +public class ServerError extends VolleyError { + public ServerError(NetworkResponse networkResponse) { + super(networkResponse); + } + + public ServerError() { + super(); + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/TimeoutError.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/TimeoutError.java new file mode 100644 index 00000000..0b5d6acb --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/TimeoutError.java @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +/** + * Indicates that the connection or the socket timed out. + */ +@SuppressWarnings("serial") +public class TimeoutError extends VolleyError { } diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/VolleyError.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/VolleyError.java new file mode 100644 index 00000000..4f7b883d --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/VolleyError.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +/** + * Exception style class encapsulating Volley errors + */ +@SuppressWarnings("serial") +public class VolleyError extends Exception { + public final NetworkResponse networkResponse; + + public VolleyError() { + networkResponse = null; + } + + public VolleyError(NetworkResponse response) { + networkResponse = response; + } + + public VolleyError(String exceptionMessage) { + super(exceptionMessage); + networkResponse = null; + } + + public VolleyError(String exceptionMessage, Throwable reason) { + super(exceptionMessage, reason); + networkResponse = null; + } + + public VolleyError(Throwable cause) { + super(cause); + networkResponse = null; + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/VolleyLog.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/VolleyLog.java new file mode 100644 index 00000000..66846902 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/VolleyLog.java @@ -0,0 +1,176 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley; + +import android.os.SystemClock; +import android.util.Log; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +/** Logging helper class. */ +public class VolleyLog { + public static String TAG = "Volley"; + + public static boolean DEBUG = Log.isLoggable(TAG, Log.VERBOSE); + + /** + * Customize the log tag for your application, so that other apps + * using Volley don't mix their logs with yours. + *
+ * Enable the log property for your tag before starting your app: + *
+ * {@code adb shell setprop log.tag.<tag>} + */ + public static void setTag(String tag) { + d("Changing log tag to %s", tag); + TAG = tag; + + // Reinitialize the DEBUG "constant" + DEBUG = Log.isLoggable(TAG, Log.VERBOSE); + } + + public static void v(String format, Object... args) { + if (DEBUG) { + Log.v(TAG, buildMessage(format, args)); + } + } + + public static void d(String format, Object... args) { + Log.d(TAG, buildMessage(format, args)); + } + + public static void e(String format, Object... args) { + Log.e(TAG, buildMessage(format, args)); + } + + public static void e(Throwable tr, String format, Object... args) { + Log.e(TAG, buildMessage(format, args), tr); + } + + public static void wtf(String format, Object... args) { + Log.wtf(TAG, buildMessage(format, args)); + } + + public static void wtf(Throwable tr, String format, Object... args) { + Log.wtf(TAG, buildMessage(format, args), tr); + } + + /** + * Formats the caller's provided message and prepends useful info like + * calling thread ID and method name. + */ + private static String buildMessage(String format, Object... args) { + String msg = (args == null) ? format : String.format(Locale.US, format, args); + StackTraceElement[] trace = new Throwable().fillInStackTrace().getStackTrace(); + + String caller = ""; + // Walk up the stack looking for the first caller outside of VolleyLog. + // It will be at least two frames up, so start there. + for (int i = 2; i < trace.length; i++) { + Class clazz = trace[i].getClass(); + if (!clazz.equals(VolleyLog.class)) { + String callingClass = trace[i].getClassName(); + callingClass = callingClass.substring(callingClass.lastIndexOf('.') + 1); + callingClass = callingClass.substring(callingClass.lastIndexOf('$') + 1); + + caller = callingClass + "." + trace[i].getMethodName(); + break; + } + } + return String.format(Locale.US, "[%d] %s: %s", + Thread.currentThread().getId(), caller, msg); + } + + /** + * A simple event log with records containing a name, thread ID, and timestamp. + */ + static class MarkerLog { + public static final boolean ENABLED = VolleyLog.DEBUG; + + /** Minimum duration from first marker to last in an marker log to warrant logging. */ + private static final long MIN_DURATION_FOR_LOGGING_MS = 0; + + private static class Marker { + public final String name; + public final long thread; + public final long time; + + public Marker(String name, long thread, long time) { + this.name = name; + this.thread = thread; + this.time = time; + } + } + + private final List mMarkers = new ArrayList(); + private boolean mFinished = false; + + /** Adds a marker to this log with the specified name. */ + public synchronized void add(String name, long threadId) { + if (mFinished) { + throw new IllegalStateException("Marker added to finished log"); + } + + mMarkers.add(new Marker(name, threadId, SystemClock.elapsedRealtime())); + } + + /** + * Closes the log, dumping it to logcat if the time difference between + * the first and last markers is greater than {@link #MIN_DURATION_FOR_LOGGING_MS}. + * @param header Header string to print above the marker log. + */ + public synchronized void finish(String header) { + mFinished = true; + + long duration = getTotalDuration(); + if (duration <= MIN_DURATION_FOR_LOGGING_MS) { + return; + } + + long prevTime = mMarkers.get(0).time; + d("(%-4d ms) %s", duration, header); + for (Marker marker : mMarkers) { + long thisTime = marker.time; + d("(+%-4d) [%2d] %s", (thisTime - prevTime), marker.thread, marker.name); + prevTime = thisTime; + } + } + + @Override + protected void finalize() throws Throwable { + // Catch requests that have been collected (and hence end-of-lifed) + // but had no debugging output printed for them. + if (!mFinished) { + finish("Request on the loose"); + e("Marker log finalized without finish() - uncaught exit point for request"); + } + } + + /** Returns the time difference between the first and last events in this log. */ + private long getTotalDuration() { + if (mMarkers.size() == 0) { + return 0; + } + + long first = mMarkers.get(0).time; + long last = mMarkers.get(mMarkers.size() - 1).time; + return last - first; + } + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/AndroidAuthenticator.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/AndroidAuthenticator.java new file mode 100644 index 00000000..371fd83d --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/AndroidAuthenticator.java @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import com.android.volley.AuthFailureError; + +import android.accounts.Account; +import android.accounts.AccountManager; +import android.accounts.AccountManagerFuture; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; + +/** + * An Authenticator that uses {@link AccountManager} to get auth + * tokens of a specified type for a specified account. + */ +public class AndroidAuthenticator implements Authenticator { + private final Context mContext; + private final Account mAccount; + private final String mAuthTokenType; + private final boolean mNotifyAuthFailure; + + /** + * Creates a new authenticator. + * @param context Context for accessing AccountManager + * @param account Account to authenticate as + * @param authTokenType Auth token type passed to AccountManager + */ + public AndroidAuthenticator(Context context, Account account, String authTokenType) { + this(context, account, authTokenType, false); + } + + /** + * Creates a new authenticator. + * @param context Context for accessing AccountManager + * @param account Account to authenticate as + * @param authTokenType Auth token type passed to AccountManager + * @param notifyAuthFailure Whether to raise a notification upon auth failure + */ + public AndroidAuthenticator(Context context, Account account, String authTokenType, + boolean notifyAuthFailure) { + mContext = context; + mAccount = account; + mAuthTokenType = authTokenType; + mNotifyAuthFailure = notifyAuthFailure; + } + + /** + * Returns the Account being used by this authenticator. + */ + public Account getAccount() { + return mAccount; + } + + // TODO: Figure out what to do about notifyAuthFailure + @SuppressWarnings("deprecation") + @Override + public String getAuthToken() throws AuthFailureError { + final AccountManager accountManager = AccountManager.get(mContext); + AccountManagerFuture future = accountManager.getAuthToken(mAccount, + mAuthTokenType, mNotifyAuthFailure, null, null); + Bundle result; + try { + result = future.getResult(); + } catch (Exception e) { + throw new AuthFailureError("Error while retrieving auth token", e); + } + String authToken = null; + if (future.isDone() && !future.isCancelled()) { + if (result.containsKey(AccountManager.KEY_INTENT)) { + Intent intent = result.getParcelable(AccountManager.KEY_INTENT); + throw new AuthFailureError(intent); + } + authToken = result.getString(AccountManager.KEY_AUTHTOKEN); + } + if (authToken == null) { + throw new AuthFailureError("Got null auth token for type: " + mAuthTokenType); + } + + return authToken; + } + + @Override + public void invalidateAuthToken(String authToken) { + AccountManager.get(mContext).invalidateAuthToken(mAccount.type, authToken); + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/Authenticator.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/Authenticator.java new file mode 100644 index 00000000..d9f5e3c2 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/Authenticator.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import com.android.volley.AuthFailureError; + +/** + * An interface for interacting with auth tokens. + */ +public interface Authenticator { + /** + * Synchronously retrieves an auth token. + * + * @throws AuthFailureError If authentication did not succeed + */ + public String getAuthToken() throws AuthFailureError; + + /** + * Invalidates the provided auth token. + */ + public void invalidateAuthToken(String authToken); +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/BasicNetwork.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/BasicNetwork.java new file mode 100644 index 00000000..c82fc34a --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/BasicNetwork.java @@ -0,0 +1,249 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import android.os.SystemClock; + +import com.android.volley.AuthFailureError; +import com.android.volley.Cache; +import com.android.volley.Network; +import com.android.volley.NetworkError; +import com.android.volley.NetworkResponse; +import com.android.volley.NoConnectionError; +import com.android.volley.Request; +import com.android.volley.RetryPolicy; +import com.android.volley.ServerError; +import com.android.volley.TimeoutError; +import com.android.volley.VolleyError; +import com.android.volley.VolleyLog; + +import org.apache.http.Header; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.StatusLine; +import org.apache.http.conn.ConnectTimeoutException; +import org.apache.http.impl.cookie.DateUtils; + +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.SocketTimeoutException; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * A network performing Volley requests over an {@link HttpStack}. + */ +public class BasicNetwork implements Network { + protected static final boolean DEBUG = VolleyLog.DEBUG; + + private static int SLOW_REQUEST_THRESHOLD_MS = 3000; + + private static int DEFAULT_POOL_SIZE = 4096; + + protected final HttpStack mHttpStack; + + protected final ByteArrayPool mPool; + + /** + * @param httpStack HTTP stack to be used + */ + public BasicNetwork(HttpStack httpStack) { + // If a pool isn't passed in, then build a small default pool that will give us a lot of + // benefit and not use too much memory. + this(httpStack, new ByteArrayPool(DEFAULT_POOL_SIZE)); + } + + /** + * @param httpStack HTTP stack to be used + * @param pool a buffer pool that improves GC performance in copy operations + */ + public BasicNetwork(HttpStack httpStack, ByteArrayPool pool) { + mHttpStack = httpStack; + mPool = pool; + } + + @Override + public NetworkResponse performRequest(Request request) throws VolleyError { + long requestStart = SystemClock.elapsedRealtime(); + while (true) { + HttpResponse httpResponse = null; + byte[] responseContents = null; + Map responseHeaders = new HashMap(); + try { + // Gather headers. + Map headers = new HashMap(); + addCacheHeaders(headers, request.getCacheEntry()); + httpResponse = mHttpStack.performRequest(request, headers); + StatusLine statusLine = httpResponse.getStatusLine(); + int statusCode = statusLine.getStatusCode(); + + responseHeaders = convertHeaders(httpResponse.getAllHeaders()); + // Handle cache validation. + if (statusCode == HttpStatus.SC_NOT_MODIFIED) { + return new NetworkResponse(HttpStatus.SC_NOT_MODIFIED, + request.getCacheEntry() == null ? null : request.getCacheEntry().data, + responseHeaders, true); + } + + // Some responses such as 204s do not have content. We must check. + if (httpResponse.getEntity() != null) { + responseContents = entityToBytes(httpResponse.getEntity()); + } else { + // Add 0 byte response as a way of honestly representing a + // no-content request. + responseContents = new byte[0]; + } + + // if the request is slow, log it. + long requestLifetime = SystemClock.elapsedRealtime() - requestStart; + logSlowRequests(requestLifetime, request, responseContents, statusLine); + + if (statusCode < 200 || statusCode > 299) { + throw new IOException(); + } + return new NetworkResponse(statusCode, responseContents, responseHeaders, false); + } catch (SocketTimeoutException e) { + attemptRetryOnException("socket", request, new TimeoutError()); + } catch (ConnectTimeoutException e) { + attemptRetryOnException("connection", request, new TimeoutError()); + } catch (MalformedURLException e) { + throw new RuntimeException("Bad URL " + request.getUrl(), e); + } catch (IOException e) { + int statusCode = 0; + NetworkResponse networkResponse = null; + if (httpResponse != null) { + statusCode = httpResponse.getStatusLine().getStatusCode(); + } else { + throw new NoConnectionError(e); + } + VolleyLog.e("Unexpected response code %d for %s", statusCode, request.getUrl()); + if (responseContents != null) { + networkResponse = new NetworkResponse(statusCode, responseContents, + responseHeaders, false); + if (statusCode == HttpStatus.SC_UNAUTHORIZED || + statusCode == HttpStatus.SC_FORBIDDEN) { + attemptRetryOnException("auth", + request, new AuthFailureError(networkResponse)); + } else { + // TODO: Only throw ServerError for 5xx status codes. + throw new ServerError(networkResponse); + } + } else { + throw new NetworkError(networkResponse); + } + } + } + } + + /** + * Logs requests that took over SLOW_REQUEST_THRESHOLD_MS to complete. + */ + private void logSlowRequests(long requestLifetime, Request request, + byte[] responseContents, StatusLine statusLine) { + if (DEBUG || requestLifetime > SLOW_REQUEST_THRESHOLD_MS) { + VolleyLog.d("HTTP response for request=<%s> [lifetime=%d], [size=%s], " + + "[rc=%d], [retryCount=%s]", request, requestLifetime, + responseContents != null ? responseContents.length : "null", + statusLine.getStatusCode(), request.getRetryPolicy().getCurrentRetryCount()); + } + } + + /** + * Attempts to prepare the request for a retry. If there are no more attempts remaining in the + * request's retry policy, a timeout exception is thrown. + * @param request The request to use. + */ + private static void attemptRetryOnException(String logPrefix, Request request, + VolleyError exception) throws VolleyError { + RetryPolicy retryPolicy = request.getRetryPolicy(); + int oldTimeout = request.getTimeoutMs(); + + try { + retryPolicy.retry(exception); + } catch (VolleyError e) { + request.addMarker( + String.format("%s-timeout-giveup [timeout=%s]", logPrefix, oldTimeout)); + throw e; + } + request.addMarker(String.format("%s-retry [timeout=%s]", logPrefix, oldTimeout)); + } + + private void addCacheHeaders(Map headers, Cache.Entry entry) { + // If there's no cache entry, we're done. + if (entry == null) { + return; + } + + if (entry.etag != null) { + headers.put("If-None-Match", entry.etag); + } + + if (entry.serverDate > 0) { + Date refTime = new Date(entry.serverDate); + headers.put("If-Modified-Since", DateUtils.formatDate(refTime)); + } + } + + protected void logError(String what, String url, long start) { + long now = SystemClock.elapsedRealtime(); + VolleyLog.v("HTTP ERROR(%s) %d ms to fetch %s", what, (now - start), url); + } + + /** Reads the contents of HttpEntity into a byte[]. */ + private byte[] entityToBytes(HttpEntity entity) throws IOException, ServerError { + PoolingByteArrayOutputStream bytes = + new PoolingByteArrayOutputStream(mPool, (int) entity.getContentLength()); + byte[] buffer = null; + try { + InputStream in = entity.getContent(); + if (in == null) { + throw new ServerError(); + } + buffer = mPool.getBuf(1024); + int count; + while ((count = in.read(buffer)) != -1) { + bytes.write(buffer, 0, count); + } + return bytes.toByteArray(); + } finally { + try { + // Close the InputStream and release the resources by "consuming the content". + entity.consumeContent(); + } catch (IOException e) { + // This can happen if there was an exception above that left the entity in + // an invalid state. + VolleyLog.v("Error occured when calling consumingContent"); + } + mPool.returnBuf(buffer); + bytes.close(); + } + } + + /** + * Converts Headers[] to Map. + */ + private static Map convertHeaders(Header[] headers) { + Map result = new HashMap(); + for (int i = 0; i < headers.length; i++) { + result.put(headers[i].getName(), headers[i].getValue()); + } + return result; + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/ByteArrayPool.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/ByteArrayPool.java new file mode 100644 index 00000000..af95076a --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/ByteArrayPool.java @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedList; +import java.util.List; + +/** + * ByteArrayPool is a source and repository of byte[] objects. Its purpose is to + * supply those buffers to consumers who need to use them for a short period of time and then + * dispose of them. Simply creating and disposing such buffers in the conventional manner can + * considerable heap churn and garbage collection delays on Android, which lacks good management of + * short-lived heap objects. It may be advantageous to trade off some memory in the form of a + * permanently allocated pool of buffers in order to gain heap performance improvements; that is + * what this class does. + *

+ * A good candidate user for this class is something like an I/O system that uses large temporary + * byte[] buffers to copy data around. In these use cases, often the consumer wants + * the buffer to be a certain minimum size to ensure good performance (e.g. when copying data chunks + * off of a stream), but doesn't mind if the buffer is larger than the minimum. Taking this into + * account and also to maximize the odds of being able to reuse a recycled buffer, this class is + * free to return buffers larger than the requested size. The caller needs to be able to gracefully + * deal with getting buffers any size over the minimum. + *

+ * If there is not a suitably-sized buffer in its recycling pool when a buffer is requested, this + * class will allocate a new buffer and return it. + *

+ * This class has no special ownership of buffers it creates; the caller is free to take a buffer + * it receives from this pool, use it permanently, and never return it to the pool; additionally, + * it is not harmful to return to this pool a buffer that was allocated elsewhere, provided there + * are no other lingering references to it. + *

+ * This class ensures that the total size of the buffers in its recycling pool never exceeds a + * certain byte limit. When a buffer is returned that would cause the pool to exceed the limit, + * least-recently-used buffers are disposed. + */ +public class ByteArrayPool { + /** The buffer pool, arranged both by last use and by buffer size */ + private List mBuffersByLastUse = new LinkedList(); + private List mBuffersBySize = new ArrayList(64); + + /** The total size of the buffers in the pool */ + private int mCurrentSize = 0; + + /** + * The maximum aggregate size of the buffers in the pool. Old buffers are discarded to stay + * under this limit. + */ + private final int mSizeLimit; + + /** Compares buffers by size */ + protected static final Comparator BUF_COMPARATOR = new Comparator() { + @Override + public int compare(byte[] lhs, byte[] rhs) { + return lhs.length - rhs.length; + } + }; + + /** + * @param sizeLimit the maximum size of the pool, in bytes + */ + public ByteArrayPool(int sizeLimit) { + mSizeLimit = sizeLimit; + } + + /** + * Returns a buffer from the pool if one is available in the requested size, or allocates a new + * one if a pooled one is not available. + * + * @param len the minimum size, in bytes, of the requested buffer. The returned buffer may be + * larger. + * @return a byte[] buffer is always returned. + */ + public synchronized byte[] getBuf(int len) { + for (int i = 0; i < mBuffersBySize.size(); i++) { + byte[] buf = mBuffersBySize.get(i); + if (buf.length >= len) { + mCurrentSize -= buf.length; + mBuffersBySize.remove(i); + mBuffersByLastUse.remove(buf); + return buf; + } + } + return new byte[len]; + } + + /** + * Returns a buffer to the pool, throwing away old buffers if the pool would exceed its allotted + * size. + * + * @param buf the buffer to return to the pool. + */ + public synchronized void returnBuf(byte[] buf) { + if (buf == null || buf.length > mSizeLimit) { + return; + } + mBuffersByLastUse.add(buf); + int pos = Collections.binarySearch(mBuffersBySize, buf, BUF_COMPARATOR); + if (pos < 0) { + pos = -pos - 1; + } + mBuffersBySize.add(pos, buf); + mCurrentSize += buf.length; + trim(); + } + + /** + * Removes buffers from the pool until it is under its size limit. + */ + private synchronized void trim() { + while (mCurrentSize > mSizeLimit) { + byte[] buf = mBuffersByLastUse.remove(0); + mBuffersBySize.remove(buf); + mCurrentSize -= buf.length; + } + } + +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/ClearCacheRequest.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/ClearCacheRequest.java new file mode 100644 index 00000000..a3478bf1 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/ClearCacheRequest.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import com.android.volley.Cache; +import com.android.volley.NetworkResponse; +import com.android.volley.Request; +import com.android.volley.Response; + +import android.os.Handler; +import android.os.Looper; + +/** + * A synthetic request used for clearing the cache. + */ +public class ClearCacheRequest extends Request { + private final Cache mCache; + private final Runnable mCallback; + + /** + * Creates a synthetic request for clearing the cache. + * @param cache Cache to clear + * @param callback Callback to make on the main thread once the cache is clear, + * or null for none + */ + public ClearCacheRequest(Cache cache, Runnable callback) { + super(Method.GET, null, null); + mCache = cache; + mCallback = callback; + } + + @Override + public boolean isCanceled() { + // This is a little bit of a hack, but hey, why not. + mCache.clear(); + if (mCallback != null) { + Handler handler = new Handler(Looper.getMainLooper()); + handler.postAtFrontOfQueue(mCallback); + } + return true; + } + + @Override + public Priority getPriority() { + return Priority.IMMEDIATE; + } + + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + return null; + } + + @Override + protected void deliverResponse(Object response) { + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/DiskBasedCache.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/DiskBasedCache.java new file mode 100644 index 00000000..d397aad0 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/DiskBasedCache.java @@ -0,0 +1,561 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import android.os.SystemClock; + +import com.android.volley.Cache; +import com.android.volley.VolleyLog; + +import java.io.EOFException; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * Cache implementation that caches files directly onto the hard disk in the specified + * directory. The default disk usage size is 5MB, but is configurable. + */ +public class DiskBasedCache implements Cache { + + /** Map of the Key, CacheHeader pairs */ + private final Map mEntries = + new LinkedHashMap(16, .75f, true); + + /** Total amount of space currently used by the cache in bytes. */ + private long mTotalSize = 0; + + /** The root directory to use for the cache. */ + private final File mRootDirectory; + + /** The maximum size of the cache in bytes. */ + private final int mMaxCacheSizeInBytes; + + /** Default maximum disk usage in bytes. */ + private static final int DEFAULT_DISK_USAGE_BYTES = 5 * 1024 * 1024; + + /** High water mark percentage for the cache */ + private static final float HYSTERESIS_FACTOR = 0.9f; + + /** Magic number for current version of cache file format. */ + private static final int CACHE_MAGIC = 0x20140623; + + /** + * Constructs an instance of the DiskBasedCache at the specified directory. + * @param rootDirectory The root directory of the cache. + * @param maxCacheSizeInBytes The maximum size of the cache in bytes. + */ + public DiskBasedCache(File rootDirectory, int maxCacheSizeInBytes) { + mRootDirectory = rootDirectory; + mMaxCacheSizeInBytes = maxCacheSizeInBytes; + } + + /** + * Constructs an instance of the DiskBasedCache at the specified directory using + * the default maximum cache size of 5MB. + * @param rootDirectory The root directory of the cache. + */ + public DiskBasedCache(File rootDirectory) { + this(rootDirectory, DEFAULT_DISK_USAGE_BYTES); + } + + /** + * Clears the cache. Deletes all cached files from disk. + */ + @Override + public synchronized void clear() { + File[] files = mRootDirectory.listFiles(); + if (files != null) { + for (File file : files) { + file.delete(); + } + } + mEntries.clear(); + mTotalSize = 0; + VolleyLog.d("Cache cleared."); + } + + /** + * Returns the cache entry with the specified key if it exists, null otherwise. + */ + @Override + public synchronized Entry get(String key) { + CacheHeader entry = mEntries.get(key); + // if the entry does not exist, return. + if (entry == null) { + return null; + } + + File file = getFileForKey(key); + CountingInputStream cis = null; + try { + cis = new CountingInputStream(new FileInputStream(file)); + CacheHeader.readHeader(cis); // eat header + byte[] data = streamToBytes(cis, (int) (file.length() - cis.bytesRead)); + return entry.toCacheEntry(data); + } catch (IOException e) { + VolleyLog.d("%s: %s", file.getAbsolutePath(), e.toString()); + remove(key); + return null; + } finally { + if (cis != null) { + try { + cis.close(); + } catch (IOException ioe) { + return null; + } + } + } + } + + /** + * Initializes the DiskBasedCache by scanning for all files currently in the + * specified root directory. Creates the root directory if necessary. + */ + @Override + public synchronized void initialize() { + if (!mRootDirectory.exists()) { + if (!mRootDirectory.mkdirs()) { + VolleyLog.e("Unable to create cache dir %s", mRootDirectory.getAbsolutePath()); + } + return; + } + + File[] files = mRootDirectory.listFiles(); + if (files == null) { + return; + } + for (File file : files) { + FileInputStream fis = null; + try { + fis = new FileInputStream(file); + CacheHeader entry = CacheHeader.readHeader(fis); + entry.size = file.length(); + putEntry(entry.key, entry); + } catch (IOException e) { + if (file != null) { + file.delete(); + } + } finally { + try { + if (fis != null) { + fis.close(); + } + } catch (IOException ignored) { } + } + } + } + + /** + * Invalidates an entry in the cache. + * @param key Cache key + * @param fullExpire True to fully expire the entry, false to soft expire + */ + @Override + public synchronized void invalidate(String key, boolean fullExpire) { + Entry entry = get(key); + if (entry != null) { + entry.softTtl = 0; + if (fullExpire) { + entry.ttl = 0; + } + put(key, entry); + } + + } + + /** + * Puts the entry with the specified key into the cache. + */ + @Override + public synchronized void put(String key, Entry entry) { + pruneIfNeeded(entry.data.length); + File file = getFileForKey(key); + try { + FileOutputStream fos = new FileOutputStream(file); + CacheHeader e = new CacheHeader(key, entry); + boolean success = e.writeHeader(fos); + if (!success) { + fos.close(); + VolleyLog.d("Failed to write header for %s", file.getAbsolutePath()); + throw new IOException(); + } + fos.write(entry.data); + fos.close(); + putEntry(key, e); + return; + } catch (IOException e) { + } + boolean deleted = file.delete(); + if (!deleted) { + VolleyLog.d("Could not clean up file %s", file.getAbsolutePath()); + } + } + + /** + * Removes the specified key from the cache if it exists. + */ + @Override + public synchronized void remove(String key) { + boolean deleted = getFileForKey(key).delete(); + removeEntry(key); + if (!deleted) { + VolleyLog.d("Could not delete cache entry for key=%s, filename=%s", + key, getFilenameForKey(key)); + } + } + + /** + * Creates a pseudo-unique filename for the specified cache key. + * @param key The key to generate a file name for. + * @return A pseudo-unique filename. + */ + private String getFilenameForKey(String key) { + int firstHalfLength = key.length() / 2; + String localFilename = String.valueOf(key.substring(0, firstHalfLength).hashCode()); + localFilename += String.valueOf(key.substring(firstHalfLength).hashCode()); + return localFilename; + } + + /** + * Returns a file object for the given cache key. + */ + public File getFileForKey(String key) { + return new File(mRootDirectory, getFilenameForKey(key)); + } + + /** + * Prunes the cache to fit the amount of bytes specified. + * @param neededSpace The amount of bytes we are trying to fit into the cache. + */ + private void pruneIfNeeded(int neededSpace) { + if ((mTotalSize + neededSpace) < mMaxCacheSizeInBytes) { + return; + } + if (VolleyLog.DEBUG) { + VolleyLog.v("Pruning old cache entries."); + } + + long before = mTotalSize; + int prunedFiles = 0; + long startTime = SystemClock.elapsedRealtime(); + + Iterator> iterator = mEntries.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + CacheHeader e = entry.getValue(); + boolean deleted = getFileForKey(e.key).delete(); + if (deleted) { + mTotalSize -= e.size; + } else { + VolleyLog.d("Could not delete cache entry for key=%s, filename=%s", + e.key, getFilenameForKey(e.key)); + } + iterator.remove(); + prunedFiles++; + + if ((mTotalSize + neededSpace) < mMaxCacheSizeInBytes * HYSTERESIS_FACTOR) { + break; + } + } + + if (VolleyLog.DEBUG) { + VolleyLog.v("pruned %d files, %d bytes, %d ms", + prunedFiles, (mTotalSize - before), SystemClock.elapsedRealtime() - startTime); + } + } + + /** + * Puts the entry with the specified key into the cache. + * @param key The key to identify the entry by. + * @param entry The entry to cache. + */ + private void putEntry(String key, CacheHeader entry) { + if (!mEntries.containsKey(key)) { + mTotalSize += entry.size; + } else { + CacheHeader oldEntry = mEntries.get(key); + mTotalSize += (entry.size - oldEntry.size); + } + mEntries.put(key, entry); + } + + /** + * Removes the entry identified by 'key' from the cache. + */ + private void removeEntry(String key) { + CacheHeader entry = mEntries.get(key); + if (entry != null) { + mTotalSize -= entry.size; + mEntries.remove(key); + } + } + + /** + * Reads the contents of an InputStream into a byte[]. + * */ + private static byte[] streamToBytes(InputStream in, int length) throws IOException { + byte[] bytes = new byte[length]; + int count; + int pos = 0; + while (pos < length && ((count = in.read(bytes, pos, length - pos)) != -1)) { + pos += count; + } + if (pos != length) { + throw new IOException("Expected " + length + " bytes, read " + pos + " bytes"); + } + return bytes; + } + + /** + * Handles holding onto the cache headers for an entry. + */ + // Visible for testing. + static class CacheHeader { + /** The size of the data identified by this CacheHeader. (This is not + * serialized to disk. */ + public long size; + + /** The key that identifies the cache entry. */ + public String key; + + /** ETag for cache coherence. */ + public String etag; + + /** Date of this response as reported by the server. */ + public long serverDate; + + /** TTL for this record. */ + public long ttl; + + /** Soft TTL for this record. */ + public long softTtl; + + /** Headers from the response resulting in this cache entry. */ + public Map responseHeaders; + + private CacheHeader() { } + + /** + * Instantiates a new CacheHeader object + * @param key The key that identifies the cache entry + * @param entry The cache entry. + */ + public CacheHeader(String key, Entry entry) { + this.key = key; + this.size = entry.data.length; + this.etag = entry.etag; + this.serverDate = entry.serverDate; + this.ttl = entry.ttl; + this.softTtl = entry.softTtl; + this.responseHeaders = entry.responseHeaders; + } + + /** + * Reads the header off of an InputStream and returns a CacheHeader object. + * @param is The InputStream to read from. + * @throws IOException + */ + public static CacheHeader readHeader(InputStream is) throws IOException { + CacheHeader entry = new CacheHeader(); + int magic = readInt(is); + if (magic != CACHE_MAGIC) { + // don't bother deleting, it'll get pruned eventually + throw new IOException(); + } + entry.key = readString(is); + entry.etag = readString(is); + if (entry.etag.equals("")) { + entry.etag = null; + } + entry.serverDate = readLong(is); + entry.ttl = readLong(is); + entry.softTtl = readLong(is); + entry.responseHeaders = readStringStringMap(is); + return entry; + } + + /** + * Creates a cache entry for the specified data. + */ + public Entry toCacheEntry(byte[] data) { + Entry e = new Entry(); + e.data = data; + e.etag = etag; + e.serverDate = serverDate; + e.ttl = ttl; + e.softTtl = softTtl; + e.responseHeaders = responseHeaders; + return e; + } + + + /** + * Writes the contents of this CacheHeader to the specified OutputStream. + */ + public boolean writeHeader(OutputStream os) { + try { + writeInt(os, CACHE_MAGIC); + writeString(os, key); + writeString(os, etag == null ? "" : etag); + writeLong(os, serverDate); + writeLong(os, ttl); + writeLong(os, softTtl); + writeStringStringMap(responseHeaders, os); + os.flush(); + return true; + } catch (IOException e) { + VolleyLog.d("%s", e.toString()); + return false; + } + } + + } + + private static class CountingInputStream extends FilterInputStream { + private int bytesRead = 0; + + private CountingInputStream(InputStream in) { + super(in); + } + + @Override + public int read() throws IOException { + int result = super.read(); + if (result != -1) { + bytesRead++; + } + return result; + } + + @Override + public int read(byte[] buffer, int offset, int count) throws IOException { + int result = super.read(buffer, offset, count); + if (result != -1) { + bytesRead += result; + } + return result; + } + } + + /* + * Homebrewed simple serialization system used for reading and writing cache + * headers on disk. Once upon a time, this used the standard Java + * Object{Input,Output}Stream, but the default implementation relies heavily + * on reflection (even for standard types) and generates a ton of garbage. + */ + + /** + * Simple wrapper around {@link InputStream#read()} that throws EOFException + * instead of returning -1. + */ + private static int read(InputStream is) throws IOException { + int b = is.read(); + if (b == -1) { + throw new EOFException(); + } + return b; + } + + static void writeInt(OutputStream os, int n) throws IOException { + os.write((n >> 0) & 0xff); + os.write((n >> 8) & 0xff); + os.write((n >> 16) & 0xff); + os.write((n >> 24) & 0xff); + } + + static int readInt(InputStream is) throws IOException { + int n = 0; + n |= (read(is) << 0); + n |= (read(is) << 8); + n |= (read(is) << 16); + n |= (read(is) << 24); + return n; + } + + static void writeLong(OutputStream os, long n) throws IOException { + os.write((byte)(n >>> 0)); + os.write((byte)(n >>> 8)); + os.write((byte)(n >>> 16)); + os.write((byte)(n >>> 24)); + os.write((byte)(n >>> 32)); + os.write((byte)(n >>> 40)); + os.write((byte)(n >>> 48)); + os.write((byte)(n >>> 56)); + } + + static long readLong(InputStream is) throws IOException { + long n = 0; + n |= ((read(is) & 0xFFL) << 0); + n |= ((read(is) & 0xFFL) << 8); + n |= ((read(is) & 0xFFL) << 16); + n |= ((read(is) & 0xFFL) << 24); + n |= ((read(is) & 0xFFL) << 32); + n |= ((read(is) & 0xFFL) << 40); + n |= ((read(is) & 0xFFL) << 48); + n |= ((read(is) & 0xFFL) << 56); + return n; + } + + static void writeString(OutputStream os, String s) throws IOException { + byte[] b = s.getBytes("UTF-8"); + writeLong(os, b.length); + os.write(b, 0, b.length); + } + + static String readString(InputStream is) throws IOException { + int n = (int) readLong(is); + byte[] b = streamToBytes(is, n); + return new String(b, "UTF-8"); + } + + static void writeStringStringMap(Map map, OutputStream os) throws IOException { + if (map != null) { + writeInt(os, map.size()); + for (Map.Entry entry : map.entrySet()) { + writeString(os, entry.getKey()); + writeString(os, entry.getValue()); + } + } else { + writeInt(os, 0); + } + } + + static Map readStringStringMap(InputStream is) throws IOException { + int size = readInt(is); + Map result = (size == 0) + ? Collections.emptyMap() + : new HashMap(size); + for (int i = 0; i < size; i++) { + String key = readString(is).intern(); + String value = readString(is).intern(); + result.put(key, value); + } + return result; + } + + +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/HttpClientStack.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/HttpClientStack.java new file mode 100644 index 00000000..377110ef --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/HttpClientStack.java @@ -0,0 +1,194 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import com.android.volley.AuthFailureError; +import com.android.volley.Request; +import com.android.volley.Request.Method; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpHead; +import org.apache.http.client.methods.HttpOptions; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.client.methods.HttpTrace; +import org.apache.http.client.methods.HttpUriRequest; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.params.HttpConnectionParams; +import org.apache.http.params.HttpParams; + +import java.io.IOException; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * An HttpStack that performs request over an {@link HttpClient}. + */ +public class HttpClientStack implements HttpStack { + protected final HttpClient mClient; + + private final static String HEADER_CONTENT_TYPE = "Content-Type"; + + public HttpClientStack(HttpClient client) { + mClient = client; + } + + private static void addHeaders(HttpUriRequest httpRequest, Map headers) { + for (String key : headers.keySet()) { + httpRequest.setHeader(key, headers.get(key)); + } + } + + @SuppressWarnings("unused") + private static List getPostParameterPairs(Map postParams) { + List result = new ArrayList(postParams.size()); + for (String key : postParams.keySet()) { + result.add(new BasicNameValuePair(key, postParams.get(key))); + } + return result; + } + + @Override + public HttpResponse performRequest(Request request, Map additionalHeaders) + throws IOException, AuthFailureError { + HttpUriRequest httpRequest = createHttpRequest(request, additionalHeaders); + addHeaders(httpRequest, additionalHeaders); + addHeaders(httpRequest, request.getHeaders()); + onPrepareRequest(httpRequest); + HttpParams httpParams = httpRequest.getParams(); + int timeoutMs = request.getTimeoutMs(); + // TODO: Reevaluate this connection timeout based on more wide-scale + // data collection and possibly different for wifi vs. 3G. + HttpConnectionParams.setConnectionTimeout(httpParams, 5000); + HttpConnectionParams.setSoTimeout(httpParams, timeoutMs); + return mClient.execute(httpRequest); + } + + /** + * Creates the appropriate subclass of HttpUriRequest for passed in request. + */ + @SuppressWarnings("deprecation") + /* protected */ static HttpUriRequest createHttpRequest(Request request, + Map additionalHeaders) throws AuthFailureError { + switch (request.getMethod()) { + case Method.DEPRECATED_GET_OR_POST: { + // This is the deprecated way that needs to be handled for backwards compatibility. + // If the request's post body is null, then the assumption is that the request is + // GET. Otherwise, it is assumed that the request is a POST. + byte[] postBody = request.getPostBody(); + if (postBody != null) { + HttpPost postRequest = new HttpPost(request.getUrl()); + postRequest.addHeader(HEADER_CONTENT_TYPE, request.getPostBodyContentType()); + HttpEntity entity; + entity = new ByteArrayEntity(postBody); + postRequest.setEntity(entity); + return postRequest; + } else { + return new HttpGet(request.getUrl()); + } + } + case Method.GET: + return new HttpGet(request.getUrl()); + case Method.DELETE: + return new HttpDelete(request.getUrl()); + case Method.POST: { + HttpPost postRequest = new HttpPost(request.getUrl()); + postRequest.addHeader(HEADER_CONTENT_TYPE, request.getBodyContentType()); + setEntityIfNonEmptyBody(postRequest, request); + return postRequest; + } + case Method.PUT: { + HttpPut putRequest = new HttpPut(request.getUrl()); + putRequest.addHeader(HEADER_CONTENT_TYPE, request.getBodyContentType()); + setEntityIfNonEmptyBody(putRequest, request); + return putRequest; + } + case Method.HEAD: + return new HttpHead(request.getUrl()); + case Method.OPTIONS: + return new HttpOptions(request.getUrl()); + case Method.TRACE: + return new HttpTrace(request.getUrl()); + case Method.PATCH: { + HttpPatch patchRequest = new HttpPatch(request.getUrl()); + patchRequest.addHeader(HEADER_CONTENT_TYPE, request.getBodyContentType()); + setEntityIfNonEmptyBody(patchRequest, request); + return patchRequest; + } + default: + throw new IllegalStateException("Unknown request method."); + } + } + + private static void setEntityIfNonEmptyBody(HttpEntityEnclosingRequestBase httpRequest, + Request request) throws AuthFailureError { + byte[] body = request.getBody(); + if (body != null) { + HttpEntity entity = new ByteArrayEntity(body); + httpRequest.setEntity(entity); + } + } + + /** + * Called before the request is executed using the underlying HttpClient. + * + *

Overwrite in subclasses to augment the request.

+ */ + protected void onPrepareRequest(HttpUriRequest request) throws IOException { + // Nothing. + } + + /** + * The HttpPatch class does not exist in the Android framework, so this has been defined here. + */ + public static final class HttpPatch extends HttpEntityEnclosingRequestBase { + + public final static String METHOD_NAME = "PATCH"; + + public HttpPatch() { + super(); + } + + public HttpPatch(final URI uri) { + super(); + setURI(uri); + } + + /** + * @throws IllegalArgumentException if the uri is invalid. + */ + public HttpPatch(final String uri) { + super(); + setURI(URI.create(uri)); + } + + @Override + public String getMethod() { + return METHOD_NAME; + } + + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/HttpHeaderParser.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/HttpHeaderParser.java new file mode 100644 index 00000000..cb084322 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/HttpHeaderParser.java @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import com.android.volley.Cache; +import com.android.volley.NetworkResponse; + +import org.apache.http.impl.cookie.DateParseException; +import org.apache.http.impl.cookie.DateUtils; +import org.apache.http.protocol.HTTP; + +import java.util.Map; + +/** + * Utility methods for parsing HTTP headers. + */ +public class HttpHeaderParser { + + /** + * Extracts a {@link Cache.Entry} from a {@link NetworkResponse}. + * + * @param response The network response to parse headers from + * @return a cache entry for the given response, or null if the response is not cacheable. + */ + public static Cache.Entry parseCacheHeaders(NetworkResponse response) { + long now = System.currentTimeMillis(); + + Map headers = response.headers; + + long serverDate = 0; + long serverExpires = 0; + long softExpire = 0; + long maxAge = 0; + boolean hasCacheControl = false; + + String serverEtag = null; + String headerValue; + + headerValue = headers.get("Date"); + if (headerValue != null) { + serverDate = parseDateAsEpoch(headerValue); + } + + headerValue = headers.get("Cache-Control"); + if (headerValue != null) { + hasCacheControl = true; + String[] tokens = headerValue.split(","); + for (int i = 0; i < tokens.length; i++) { + String token = tokens[i].trim(); + if (token.equals("no-cache") || token.equals("no-store")) { + return null; + } else if (token.startsWith("max-age=")) { + try { + maxAge = Long.parseLong(token.substring(8)); + } catch (Exception e) { + } + } else if (token.equals("must-revalidate") || token.equals("proxy-revalidate")) { + maxAge = 0; + } + } + } + + headerValue = headers.get("Expires"); + if (headerValue != null) { + serverExpires = parseDateAsEpoch(headerValue); + } + + serverEtag = headers.get("ETag"); + + // Cache-Control takes precedence over an Expires header, even if both exist and Expires + // is more restrictive. + if (hasCacheControl) { + softExpire = now + maxAge * 1000; + } else if (serverDate > 0 && serverExpires >= serverDate) { + // Default semantic for Expire header in HTTP specification is softExpire. + softExpire = now + (serverExpires - serverDate); + } + + Cache.Entry entry = new Cache.Entry(); + entry.data = response.data; + entry.etag = serverEtag; + entry.softTtl = softExpire; + entry.ttl = entry.softTtl; + entry.serverDate = serverDate; + entry.responseHeaders = headers; + + return entry; + } + + /** + * Parse date in RFC1123 format, and return its value as epoch + */ + public static long parseDateAsEpoch(String dateStr) { + try { + // Parse date in RFC1123 format if this header contains one + return DateUtils.parseDate(dateStr).getTime(); + } catch (DateParseException e) { + // Date in invalid format, fallback to 0 + return 0; + } + } + + /** + * Returns the charset specified in the Content-Type of this header, + * or the HTTP default (ISO-8859-1) if none can be found. + */ + public static String parseCharset(Map headers) { + String contentType = headers.get(HTTP.CONTENT_TYPE); + if (contentType != null) { + String[] params = contentType.split(";"); + for (int i = 1; i < params.length; i++) { + String[] pair = params[i].trim().split("="); + if (pair.length == 2) { + if (pair[0].equals("charset")) { + return pair[1]; + } + } + } + } + + return HTTP.DEFAULT_CONTENT_CHARSET; + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/HttpStack.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/HttpStack.java new file mode 100644 index 00000000..a52fd06c --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/HttpStack.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import com.android.volley.AuthFailureError; +import com.android.volley.Request; + +import org.apache.http.HttpResponse; + +import java.io.IOException; +import java.util.Map; + +/** + * An HTTP stack abstraction. + */ +public interface HttpStack { + /** + * Performs an HTTP request with the given parameters. + * + *

A GET request is sent if request.getPostBody() == null. A POST request is sent otherwise, + * and the Content-Type header is set to request.getPostBodyContentType().

+ * + * @param request the request to perform + * @param additionalHeaders additional headers to be sent together with + * {@link Request#getHeaders()} + * @return the HTTP response + */ + public HttpResponse performRequest(Request request, Map additionalHeaders) + throws IOException, AuthFailureError; + +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/HurlStack.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/HurlStack.java new file mode 100644 index 00000000..31d57f0d --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/HurlStack.java @@ -0,0 +1,245 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import com.android.volley.AuthFailureError; +import com.android.volley.Request; +import com.android.volley.Request.Method; + +import org.apache.http.Header; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.ProtocolVersion; +import org.apache.http.StatusLine; +import org.apache.http.entity.BasicHttpEntity; +import org.apache.http.message.BasicHeader; +import org.apache.http.message.BasicHttpResponse; +import org.apache.http.message.BasicStatusLine; + +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLSocketFactory; + +/** + * An {@link HttpStack} based on {@link HttpURLConnection}. + */ +public class HurlStack implements HttpStack { + + private static final String HEADER_CONTENT_TYPE = "Content-Type"; + + /** + * An interface for transforming URLs before use. + */ + public interface UrlRewriter { + /** + * Returns a URL to use instead of the provided one, or null to indicate + * this URL should not be used at all. + */ + public String rewriteUrl(String originalUrl); + } + + private final UrlRewriter mUrlRewriter; + private final SSLSocketFactory mSslSocketFactory; + + public HurlStack() { + this(null); + } + + /** + * @param urlRewriter Rewriter to use for request URLs + */ + public HurlStack(UrlRewriter urlRewriter) { + this(urlRewriter, null); + } + + /** + * @param urlRewriter Rewriter to use for request URLs + * @param sslSocketFactory SSL factory to use for HTTPS connections + */ + public HurlStack(UrlRewriter urlRewriter, SSLSocketFactory sslSocketFactory) { + mUrlRewriter = urlRewriter; + mSslSocketFactory = sslSocketFactory; + } + + @Override + public HttpResponse performRequest(Request request, Map additionalHeaders) + throws IOException, AuthFailureError { + String url = request.getUrl(); + HashMap map = new HashMap(); + map.putAll(request.getHeaders()); + map.putAll(additionalHeaders); + if (mUrlRewriter != null) { + String rewritten = mUrlRewriter.rewriteUrl(url); + if (rewritten == null) { + throw new IOException("URL blocked by rewriter: " + url); + } + url = rewritten; + } + URL parsedUrl = new URL(url); + HttpURLConnection connection = openConnection(parsedUrl, request); + for (String headerName : map.keySet()) { + connection.addRequestProperty(headerName, map.get(headerName)); + } + setConnectionParametersForRequest(connection, request); + // Initialize HttpResponse with data from the HttpURLConnection. + ProtocolVersion protocolVersion = new ProtocolVersion("HTTP", 1, 1); + int responseCode = connection.getResponseCode(); + if (responseCode == -1) { + // -1 is returned by getResponseCode() if the response code could not be retrieved. + // Signal to the caller that something was wrong with the connection. + throw new IOException("Could not retrieve response code from HttpUrlConnection."); + } + StatusLine responseStatus = new BasicStatusLine(protocolVersion, + connection.getResponseCode(), connection.getResponseMessage()); + BasicHttpResponse response = new BasicHttpResponse(responseStatus); + response.setEntity(entityFromConnection(connection)); + for (Entry> header : connection.getHeaderFields().entrySet()) { + if (header.getKey() != null) { + Header h = new BasicHeader(header.getKey(), header.getValue().get(0)); + response.addHeader(h); + } + } + return response; + } + + /** + * Initializes an {@link HttpEntity} from the given {@link HttpURLConnection}. + * @param connection + * @return an HttpEntity populated with data from connection. + */ + private static HttpEntity entityFromConnection(HttpURLConnection connection) { + BasicHttpEntity entity = new BasicHttpEntity(); + InputStream inputStream; + try { + inputStream = connection.getInputStream(); + } catch (IOException ioe) { + inputStream = connection.getErrorStream(); + } + entity.setContent(inputStream); + entity.setContentLength(connection.getContentLength()); + entity.setContentEncoding(connection.getContentEncoding()); + entity.setContentType(connection.getContentType()); + return entity; + } + + /** + * Create an {@link HttpURLConnection} for the specified {@code url}. + */ + protected HttpURLConnection createConnection(URL url) throws IOException { + return (HttpURLConnection) url.openConnection(); + } + + /** + * Opens an {@link HttpURLConnection} with parameters. + * @param url + * @return an open connection + * @throws IOException + */ + private HttpURLConnection openConnection(URL url, Request request) throws IOException { + HttpURLConnection connection = createConnection(url); + + int timeoutMs = request.getTimeoutMs(); + connection.setConnectTimeout(timeoutMs); + connection.setReadTimeout(timeoutMs); + connection.setUseCaches(false); + connection.setDoInput(true); + + // use caller-provided custom SslSocketFactory, if any, for HTTPS + if ("https".equals(url.getProtocol()) && mSslSocketFactory != null) { + ((HttpsURLConnection)connection).setSSLSocketFactory(mSslSocketFactory); + } + + return connection; + } + + @SuppressWarnings("deprecation") + /* package */ static void setConnectionParametersForRequest(HttpURLConnection connection, + Request request) throws IOException, AuthFailureError { + switch (request.getMethod()) { + case Method.DEPRECATED_GET_OR_POST: + // This is the deprecated way that needs to be handled for backwards compatibility. + // If the request's post body is null, then the assumption is that the request is + // GET. Otherwise, it is assumed that the request is a POST. + byte[] postBody = request.getPostBody(); + if (postBody != null) { + // Prepare output. There is no need to set Content-Length explicitly, + // since this is handled by HttpURLConnection using the size of the prepared + // output stream. + connection.setDoOutput(true); + connection.setRequestMethod("POST"); + connection.addRequestProperty(HEADER_CONTENT_TYPE, + request.getPostBodyContentType()); + DataOutputStream out = new DataOutputStream(connection.getOutputStream()); + out.write(postBody); + out.close(); + } + break; + case Method.GET: + // Not necessary to set the request method because connection defaults to GET but + // being explicit here. + connection.setRequestMethod("GET"); + break; + case Method.DELETE: + connection.setRequestMethod("DELETE"); + break; + case Method.POST: + connection.setRequestMethod("POST"); + addBodyIfExists(connection, request); + break; + case Method.PUT: + connection.setRequestMethod("PUT"); + addBodyIfExists(connection, request); + break; + case Method.HEAD: + connection.setRequestMethod("HEAD"); + break; + case Method.OPTIONS: + connection.setRequestMethod("OPTIONS"); + break; + case Method.TRACE: + connection.setRequestMethod("TRACE"); + break; + case Method.PATCH: + connection.setRequestMethod("PATCH"); + addBodyIfExists(connection, request); + break; + default: + throw new IllegalStateException("Unknown method type."); + } + } + + private static void addBodyIfExists(HttpURLConnection connection, Request request) + throws IOException, AuthFailureError { + byte[] body = request.getBody(); + if (body != null) { + connection.setDoOutput(true); + connection.addRequestProperty(HEADER_CONTENT_TYPE, request.getBodyContentType()); + DataOutputStream out = new DataOutputStream(connection.getOutputStream()); + out.write(body); + out.close(); + } + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/ImageLoader.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/ImageLoader.java new file mode 100644 index 00000000..fe0f32ad --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/ImageLoader.java @@ -0,0 +1,480 @@ +/** + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.volley.toolbox; + +import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; +import android.os.Handler; +import android.os.Looper; +import android.widget.ImageView; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response.ErrorListener; +import com.android.volley.Response.Listener; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.ImageRequest; + +import java.util.HashMap; +import java.util.LinkedList; + +/** + * Helper that handles loading and caching images from remote URLs. + * + * The simple way to use this class is to call {@link ImageLoader#get(String, ImageListener)} + * and to pass in the default image listener provided by + * {@link ImageLoader#getImageListener(ImageView, int, int)}. Note that all function calls to + * this class must be made from the main thead, and all responses will be delivered to the main + * thread as well. + */ +public class ImageLoader { + /** RequestQueue for dispatching ImageRequests onto. */ + private final RequestQueue mRequestQueue; + + /** Amount of time to wait after first response arrives before delivering all responses. */ + private int mBatchResponseDelayMs = 100; + + /** The cache implementation to be used as an L1 cache before calling into volley. */ + private final ImageCache mCache; + + /** + * HashMap of Cache keys -> BatchedImageRequest used to track in-flight requests so + * that we can coalesce multiple requests to the same URL into a single network request. + */ + private final HashMap mInFlightRequests = + new HashMap(); + + /** HashMap of the currently pending responses (waiting to be delivered). */ + private final HashMap mBatchedResponses = + new HashMap(); + + /** Handler to the main thread. */ + private final Handler mHandler = new Handler(Looper.getMainLooper()); + + /** Runnable for in-flight response delivery. */ + private Runnable mRunnable; + + /** + * Simple cache adapter interface. If provided to the ImageLoader, it + * will be used as an L1 cache before dispatch to Volley. Implementations + * must not block. Implementation with an LruCache is recommended. + */ + public interface ImageCache { + public Bitmap getBitmap(String url); + public void putBitmap(String url, Bitmap bitmap); + } + + /** + * Constructs a new ImageLoader. + * @param queue The RequestQueue to use for making image requests. + * @param imageCache The cache to use as an L1 cache. + */ + public ImageLoader(RequestQueue queue, ImageCache imageCache) { + mRequestQueue = queue; + mCache = imageCache; + } + + /** + * The default implementation of ImageListener which handles basic functionality + * of showing a default image until the network response is received, at which point + * it will switch to either the actual image or the error image. + * @param imageView The imageView that the listener is associated with. + * @param defaultImageResId Default image resource ID to use, or 0 if it doesn't exist. + * @param errorImageResId Error image resource ID to use, or 0 if it doesn't exist. + */ + public static ImageListener getImageListener(final ImageView view, + final int defaultImageResId, final int errorImageResId) { + return new ImageListener() { + @Override + public void onErrorResponse(VolleyError error) { + if (errorImageResId != 0) { + view.setImageResource(errorImageResId); + } + } + + @Override + public void onResponse(ImageContainer response, boolean isImmediate) { + if (response.getBitmap() != null) { + view.setImageBitmap(response.getBitmap()); + } else if (defaultImageResId != 0) { + view.setImageResource(defaultImageResId); + } + } + }; + } + + /** + * Interface for the response handlers on image requests. + * + * The call flow is this: + * 1. Upon being attached to a request, onResponse(response, true) will + * be invoked to reflect any cached data that was already available. If the + * data was available, response.getBitmap() will be non-null. + * + * 2. After a network response returns, only one of the following cases will happen: + * - onResponse(response, false) will be called if the image was loaded. + * or + * - onErrorResponse will be called if there was an error loading the image. + */ + public interface ImageListener extends ErrorListener { + /** + * Listens for non-error changes to the loading of the image request. + * + * @param response Holds all information pertaining to the request, as well + * as the bitmap (if it is loaded). + * @param isImmediate True if this was called during ImageLoader.get() variants. + * This can be used to differentiate between a cached image loading and a network + * image loading in order to, for example, run an animation to fade in network loaded + * images. + */ + public void onResponse(ImageContainer response, boolean isImmediate); + } + + /** + * Checks if the item is available in the cache. + * @param requestUrl The url of the remote image + * @param maxWidth The maximum width of the returned image. + * @param maxHeight The maximum height of the returned image. + * @return True if the item exists in cache, false otherwise. + */ + public boolean isCached(String requestUrl, int maxWidth, int maxHeight) { + throwIfNotOnMainThread(); + + String cacheKey = getCacheKey(requestUrl, maxWidth, maxHeight); + return mCache.getBitmap(cacheKey) != null; + } + + /** + * Returns an ImageContainer for the requested URL. + * + * The ImageContainer will contain either the specified default bitmap or the loaded bitmap. + * If the default was returned, the {@link ImageLoader} will be invoked when the + * request is fulfilled. + * + * @param requestUrl The URL of the image to be loaded. + * @param defaultImage Optional default image to return until the actual image is loaded. + */ + public ImageContainer get(String requestUrl, final ImageListener listener) { + return get(requestUrl, listener, 0, 0); + } + + /** + * Issues a bitmap request with the given URL if that image is not available + * in the cache, and returns a bitmap container that contains all of the data + * relating to the request (as well as the default image if the requested + * image is not available). + * @param requestUrl The url of the remote image + * @param imageListener The listener to call when the remote image is loaded + * @param maxWidth The maximum width of the returned image. + * @param maxHeight The maximum height of the returned image. + * @return A container object that contains all of the properties of the request, as well as + * the currently available image (default if remote is not loaded). + */ + public ImageContainer get(String requestUrl, ImageListener imageListener, + int maxWidth, int maxHeight) { + // only fulfill requests that were initiated from the main thread. + throwIfNotOnMainThread(); + + final String cacheKey = getCacheKey(requestUrl, maxWidth, maxHeight); + + // Try to look up the request in the cache of remote images. + Bitmap cachedBitmap = mCache.getBitmap(cacheKey); + if (cachedBitmap != null) { + // Return the cached bitmap. + ImageContainer container = new ImageContainer(cachedBitmap, requestUrl, null, null); + imageListener.onResponse(container, true); + return container; + } + + // The bitmap did not exist in the cache, fetch it! + ImageContainer imageContainer = + new ImageContainer(null, requestUrl, cacheKey, imageListener); + + // Update the caller to let them know that they should use the default bitmap. + imageListener.onResponse(imageContainer, true); + + // Check to see if a request is already in-flight. + BatchedImageRequest request = mInFlightRequests.get(cacheKey); + if (request != null) { + // If it is, add this request to the list of listeners. + request.addContainer(imageContainer); + return imageContainer; + } + + // The request is not already in flight. Send the new request to the network and + // track it. + Request newRequest = + new ImageRequest(requestUrl, new Listener() { + @Override + public void onResponse(Bitmap response) { + onGetImageSuccess(cacheKey, response); + } + }, maxWidth, maxHeight, + Config.RGB_565, new ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + onGetImageError(cacheKey, error); + } + }); + + mRequestQueue.add(newRequest); + mInFlightRequests.put(cacheKey, + new BatchedImageRequest(newRequest, imageContainer)); + return imageContainer; + } + + /** + * Sets the amount of time to wait after the first response arrives before delivering all + * responses. Batching can be disabled entirely by passing in 0. + * @param newBatchedResponseDelayMs The time in milliseconds to wait. + */ + public void setBatchedResponseDelay(int newBatchedResponseDelayMs) { + mBatchResponseDelayMs = newBatchedResponseDelayMs; + } + + /** + * Handler for when an image was successfully loaded. + * @param cacheKey The cache key that is associated with the image request. + * @param response The bitmap that was returned from the network. + */ + private void onGetImageSuccess(String cacheKey, Bitmap response) { + // cache the image that was fetched. + mCache.putBitmap(cacheKey, response); + + // remove the request from the list of in-flight requests. + BatchedImageRequest request = mInFlightRequests.remove(cacheKey); + + if (request != null) { + // Update the response bitmap. + request.mResponseBitmap = response; + + // Send the batched response + batchResponse(cacheKey, request); + } + } + + /** + * Handler for when an image failed to load. + * @param cacheKey The cache key that is associated with the image request. + */ + private void onGetImageError(String cacheKey, VolleyError error) { + // Notify the requesters that something failed via a null result. + // Remove this request from the list of in-flight requests. + BatchedImageRequest request = mInFlightRequests.remove(cacheKey); + + if (request != null) { + // Set the error for this request + request.setError(error); + + // Send the batched response + batchResponse(cacheKey, request); + } + } + + /** + * Container object for all of the data surrounding an image request. + */ + public class ImageContainer { + /** + * The most relevant bitmap for the container. If the image was in cache, the + * Holder to use for the final bitmap (the one that pairs to the requested URL). + */ + private Bitmap mBitmap; + + private final ImageListener mListener; + + /** The cache key that was associated with the request */ + private final String mCacheKey; + + /** The request URL that was specified */ + private final String mRequestUrl; + + /** + * Constructs a BitmapContainer object. + * @param bitmap The final bitmap (if it exists). + * @param requestUrl The requested URL for this container. + * @param cacheKey The cache key that identifies the requested URL for this container. + */ + public ImageContainer(Bitmap bitmap, String requestUrl, + String cacheKey, ImageListener listener) { + mBitmap = bitmap; + mRequestUrl = requestUrl; + mCacheKey = cacheKey; + mListener = listener; + } + + /** + * Releases interest in the in-flight request (and cancels it if no one else is listening). + */ + public void cancelRequest() { + if (mListener == null) { + return; + } + + BatchedImageRequest request = mInFlightRequests.get(mCacheKey); + if (request != null) { + boolean canceled = request.removeContainerAndCancelIfNecessary(this); + if (canceled) { + mInFlightRequests.remove(mCacheKey); + } + } else { + // check to see if it is already batched for delivery. + request = mBatchedResponses.get(mCacheKey); + if (request != null) { + request.removeContainerAndCancelIfNecessary(this); + if (request.mContainers.size() == 0) { + mBatchedResponses.remove(mCacheKey); + } + } + } + } + + /** + * Returns the bitmap associated with the request URL if it has been loaded, null otherwise. + */ + public Bitmap getBitmap() { + return mBitmap; + } + + /** + * Returns the requested URL for this container. + */ + public String getRequestUrl() { + return mRequestUrl; + } + } + + /** + * Wrapper class used to map a Request to the set of active ImageContainer objects that are + * interested in its results. + */ + private class BatchedImageRequest { + /** The request being tracked */ + private final Request mRequest; + + /** The result of the request being tracked by this item */ + private Bitmap mResponseBitmap; + + /** Error if one occurred for this response */ + private VolleyError mError; + + /** List of all of the active ImageContainers that are interested in the request */ + private final LinkedList mContainers = new LinkedList(); + + /** + * Constructs a new BatchedImageRequest object + * @param request The request being tracked + * @param container The ImageContainer of the person who initiated the request. + */ + public BatchedImageRequest(Request request, ImageContainer container) { + mRequest = request; + mContainers.add(container); + } + + /** + * Set the error for this response + */ + public void setError(VolleyError error) { + mError = error; + } + + /** + * Get the error for this response + */ + public VolleyError getError() { + return mError; + } + + /** + * Adds another ImageContainer to the list of those interested in the results of + * the request. + */ + public void addContainer(ImageContainer container) { + mContainers.add(container); + } + + /** + * Detatches the bitmap container from the request and cancels the request if no one is + * left listening. + * @param container The container to remove from the list + * @return True if the request was canceled, false otherwise. + */ + public boolean removeContainerAndCancelIfNecessary(ImageContainer container) { + mContainers.remove(container); + if (mContainers.size() == 0) { + mRequest.cancel(); + return true; + } + return false; + } + } + + /** + * Starts the runnable for batched delivery of responses if it is not already started. + * @param cacheKey The cacheKey of the response being delivered. + * @param request The BatchedImageRequest to be delivered. + * @param error The volley error associated with the request (if applicable). + */ + private void batchResponse(String cacheKey, BatchedImageRequest request) { + mBatchedResponses.put(cacheKey, request); + // If we don't already have a batch delivery runnable in flight, make a new one. + // Note that this will be used to deliver responses to all callers in mBatchedResponses. + if (mRunnable == null) { + mRunnable = new Runnable() { + @Override + public void run() { + for (BatchedImageRequest bir : mBatchedResponses.values()) { + for (ImageContainer container : bir.mContainers) { + // If one of the callers in the batched request canceled the request + // after the response was received but before it was delivered, + // skip them. + if (container.mListener == null) { + continue; + } + if (bir.getError() == null) { + container.mBitmap = bir.mResponseBitmap; + container.mListener.onResponse(container, false); + } else { + container.mListener.onErrorResponse(bir.getError()); + } + } + } + mBatchedResponses.clear(); + mRunnable = null; + } + + }; + // Post the runnable. + mHandler.postDelayed(mRunnable, mBatchResponseDelayMs); + } + } + + private void throwIfNotOnMainThread() { + if (Looper.myLooper() != Looper.getMainLooper()) { + throw new IllegalStateException("ImageLoader must be invoked from the main thread."); + } + } + /** + * Creates a cache key for use with the L1 cache. + * @param url The URL of the request. + * @param maxWidth The max-width of the output. + * @param maxHeight The max-height of the output. + */ + private static String getCacheKey(String url, int maxWidth, int maxHeight) { + return new StringBuilder(url.length() + 12).append("#W").append(maxWidth) + .append("#H").append(maxHeight).append(url).toString(); + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/ImageRequest.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/ImageRequest.java new file mode 100644 index 00000000..2ebe015b --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/ImageRequest.java @@ -0,0 +1,211 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import com.android.volley.DefaultRetryPolicy; +import com.android.volley.NetworkResponse; +import com.android.volley.ParseError; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyLog; + +import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; +import android.graphics.BitmapFactory; + +/** + * A canned request for getting an image at a given URL and calling + * back with a decoded Bitmap. + */ +public class ImageRequest extends Request { + /** Socket timeout in milliseconds for image requests */ + private static final int IMAGE_TIMEOUT_MS = 1000; + + /** Default number of retries for image requests */ + private static final int IMAGE_MAX_RETRIES = 2; + + /** Default backoff multiplier for image requests */ + private static final float IMAGE_BACKOFF_MULT = 2f; + + private final Response.Listener mListener; + private final Config mDecodeConfig; + private final int mMaxWidth; + private final int mMaxHeight; + + /** Decoding lock so that we don't decode more than one image at a time (to avoid OOM's) */ + private static final Object sDecodeLock = new Object(); + + /** + * Creates a new image request, decoding to a maximum specified width and + * height. If both width and height are zero, the image will be decoded to + * its natural size. If one of the two is nonzero, that dimension will be + * clamped and the other one will be set to preserve the image's aspect + * ratio. If both width and height are nonzero, the image will be decoded to + * be fit in the rectangle of dimensions width x height while keeping its + * aspect ratio. + * + * @param url URL of the image + * @param listener Listener to receive the decoded bitmap + * @param maxWidth Maximum width to decode this bitmap to, or zero for none + * @param maxHeight Maximum height to decode this bitmap to, or zero for + * none + * @param decodeConfig Format to decode the bitmap to + * @param errorListener Error listener, or null to ignore errors + */ + public ImageRequest(String url, Response.Listener listener, int maxWidth, int maxHeight, + Config decodeConfig, Response.ErrorListener errorListener) { + super(Method.GET, url, errorListener); + setRetryPolicy( + new DefaultRetryPolicy(IMAGE_TIMEOUT_MS, IMAGE_MAX_RETRIES, IMAGE_BACKOFF_MULT)); + mListener = listener; + mDecodeConfig = decodeConfig; + mMaxWidth = maxWidth; + mMaxHeight = maxHeight; + } + + @Override + public Priority getPriority() { + return Priority.LOW; + } + + /** + * Scales one side of a rectangle to fit aspect ratio. + * + * @param maxPrimary Maximum size of the primary dimension (i.e. width for + * max width), or zero to maintain aspect ratio with secondary + * dimension + * @param maxSecondary Maximum size of the secondary dimension, or zero to + * maintain aspect ratio with primary dimension + * @param actualPrimary Actual size of the primary dimension + * @param actualSecondary Actual size of the secondary dimension + */ + private static int getResizedDimension(int maxPrimary, int maxSecondary, int actualPrimary, + int actualSecondary) { + // If no dominant value at all, just return the actual. + if (maxPrimary == 0 && maxSecondary == 0) { + return actualPrimary; + } + + // If primary is unspecified, scale primary to match secondary's scaling ratio. + if (maxPrimary == 0) { + double ratio = (double) maxSecondary / (double) actualSecondary; + return (int) (actualPrimary * ratio); + } + + if (maxSecondary == 0) { + return maxPrimary; + } + + double ratio = (double) actualSecondary / (double) actualPrimary; + int resized = maxPrimary; + if (resized * ratio > maxSecondary) { + resized = (int) (maxSecondary / ratio); + } + return resized; + } + + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + // Serialize all decode on a global lock to reduce concurrent heap usage. + synchronized (sDecodeLock) { + try { + return doParse(response); + } catch (OutOfMemoryError e) { + VolleyLog.e("Caught OOM for %d byte image, url=%s", response.data.length, getUrl()); + return Response.error(new ParseError(e)); + } + } + } + + /** + * The real guts of parseNetworkResponse. Broken out for readability. + */ + private Response doParse(NetworkResponse response) { + byte[] data = response.data; + BitmapFactory.Options decodeOptions = new BitmapFactory.Options(); + Bitmap bitmap = null; + if (mMaxWidth == 0 && mMaxHeight == 0) { + decodeOptions.inPreferredConfig = mDecodeConfig; + bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, decodeOptions); + } else { + // If we have to resize this image, first get the natural bounds. + decodeOptions.inJustDecodeBounds = true; + BitmapFactory.decodeByteArray(data, 0, data.length, decodeOptions); + int actualWidth = decodeOptions.outWidth; + int actualHeight = decodeOptions.outHeight; + + // Then compute the dimensions we would ideally like to decode to. + int desiredWidth = getResizedDimension(mMaxWidth, mMaxHeight, + actualWidth, actualHeight); + int desiredHeight = getResizedDimension(mMaxHeight, mMaxWidth, + actualHeight, actualWidth); + + // Decode to the nearest power of two scaling factor. + decodeOptions.inJustDecodeBounds = false; + // TODO(ficus): Do we need this or is it okay since API 8 doesn't support it? + // decodeOptions.inPreferQualityOverSpeed = PREFER_QUALITY_OVER_SPEED; + decodeOptions.inSampleSize = + findBestSampleSize(actualWidth, actualHeight, desiredWidth, desiredHeight); + Bitmap tempBitmap = + BitmapFactory.decodeByteArray(data, 0, data.length, decodeOptions); + + // If necessary, scale down to the maximal acceptable size. + if (tempBitmap != null && (tempBitmap.getWidth() > desiredWidth || + tempBitmap.getHeight() > desiredHeight)) { + bitmap = Bitmap.createScaledBitmap(tempBitmap, + desiredWidth, desiredHeight, true); + tempBitmap.recycle(); + } else { + bitmap = tempBitmap; + } + } + + if (bitmap == null) { + return Response.error(new ParseError(response)); + } else { + return Response.success(bitmap, HttpHeaderParser.parseCacheHeaders(response)); + } + } + + @Override + protected void deliverResponse(Bitmap response) { + mListener.onResponse(response); + } + + /** + * Returns the largest power-of-two divisor for use in downscaling a bitmap + * that will not result in the scaling past the desired dimensions. + * + * @param actualWidth Actual width of the bitmap + * @param actualHeight Actual height of the bitmap + * @param desiredWidth Desired width of the bitmap + * @param desiredHeight Desired height of the bitmap + */ + // Visible for testing. + static int findBestSampleSize( + int actualWidth, int actualHeight, int desiredWidth, int desiredHeight) { + double wr = (double) actualWidth / desiredWidth; + double hr = (double) actualHeight / desiredHeight; + double ratio = Math.min(wr, hr); + float n = 1.0f; + while ((n * 2) <= ratio) { + n *= 2; + } + + return (int) n; + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/JsonArrayRequest.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/JsonArrayRequest.java new file mode 100644 index 00000000..b1eae805 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/JsonArrayRequest.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import com.android.volley.NetworkResponse; +import com.android.volley.ParseError; +import com.android.volley.Response; +import com.android.volley.Response.ErrorListener; +import com.android.volley.Response.Listener; + +import org.json.JSONArray; +import org.json.JSONException; + +import java.io.UnsupportedEncodingException; + +/** + * A request for retrieving a {@link JSONArray} response body at a given URL. + */ +public class JsonArrayRequest extends JsonRequest { + + /** + * Creates a new request. + * @param url URL to fetch the JSON from + * @param listener Listener to receive the JSON response + * @param errorListener Error listener, or null to ignore errors. + */ + public JsonArrayRequest(String url, Listener listener, ErrorListener errorListener) { + super(Method.GET, url, null, listener, errorListener); + } + + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + try { + String jsonString = + new String(response.data, HttpHeaderParser.parseCharset(response.headers)); + return Response.success(new JSONArray(jsonString), + HttpHeaderParser.parseCacheHeaders(response)); + } catch (UnsupportedEncodingException e) { + return Response.error(new ParseError(e)); + } catch (JSONException je) { + return Response.error(new ParseError(je)); + } + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/JsonObjectRequest.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/JsonObjectRequest.java new file mode 100644 index 00000000..74821cba --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/JsonObjectRequest.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import com.android.volley.NetworkResponse; +import com.android.volley.ParseError; +import com.android.volley.Response; +import com.android.volley.Response.ErrorListener; +import com.android.volley.Response.Listener; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.UnsupportedEncodingException; + +/** + * A request for retrieving a {@link JSONObject} response body at a given URL, allowing for an + * optional {@link JSONObject} to be passed in as part of the request body. + */ +public class JsonObjectRequest extends JsonRequest { + + /** + * Creates a new request. + * @param method the HTTP method to use + * @param url URL to fetch the JSON from + * @param jsonRequest A {@link JSONObject} to post with the request. Null is allowed and + * indicates no parameters will be posted along with request. + * @param listener Listener to receive the JSON response + * @param errorListener Error listener, or null to ignore errors. + */ + public JsonObjectRequest(int method, String url, JSONObject jsonRequest, + Listener listener, ErrorListener errorListener) { + super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener, + errorListener); + } + + /** + * Constructor which defaults to GET if jsonRequest is + * null, POST otherwise. + * + * @see #JsonObjectRequest(int, String, JSONObject, Listener, ErrorListener) + */ + public JsonObjectRequest(String url, JSONObject jsonRequest, Listener listener, + ErrorListener errorListener) { + this(jsonRequest == null ? Method.GET : Method.POST, url, jsonRequest, + listener, errorListener); + } + + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + try { + String jsonString = + new String(response.data, HttpHeaderParser.parseCharset(response.headers)); + return Response.success(new JSONObject(jsonString), + HttpHeaderParser.parseCacheHeaders(response)); + } catch (UnsupportedEncodingException e) { + return Response.error(new ParseError(e)); + } catch (JSONException je) { + return Response.error(new ParseError(je)); + } + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/JsonRequest.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/JsonRequest.java new file mode 100644 index 00000000..f11ac14e --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/JsonRequest.java @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import com.android.volley.NetworkResponse; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.Response.ErrorListener; +import com.android.volley.Response.Listener; +import com.android.volley.VolleyLog; + +import java.io.UnsupportedEncodingException; + +/** + * A request for retrieving a T type response body at a given URL that also + * optionally sends along a JSON body in the request specified. + * + * @param JSON type of response expected + */ +public abstract class JsonRequest extends Request { + /** Charset for request. */ + private static final String PROTOCOL_CHARSET = "utf-8"; + + /** Content type for request. */ + private static final String PROTOCOL_CONTENT_TYPE = + String.format("application/json; charset=%s", PROTOCOL_CHARSET); + + private final Listener mListener; + private final String mRequestBody; + + /** + * Deprecated constructor for a JsonRequest which defaults to GET unless {@link #getPostBody()} + * or {@link #getPostParams()} is overridden (which defaults to POST). + * + * @deprecated Use {@link #JsonRequest(int, String, String, Listener, ErrorListener)}. + */ + public JsonRequest(String url, String requestBody, Listener listener, + ErrorListener errorListener) { + this(Method.DEPRECATED_GET_OR_POST, url, requestBody, listener, errorListener); + } + + public JsonRequest(int method, String url, String requestBody, Listener listener, + ErrorListener errorListener) { + super(method, url, errorListener); + mListener = listener; + mRequestBody = requestBody; + } + + @Override + protected void deliverResponse(T response) { + mListener.onResponse(response); + } + + @Override + abstract protected Response parseNetworkResponse(NetworkResponse response); + + /** + * @deprecated Use {@link #getBodyContentType()}. + */ + @Override + public String getPostBodyContentType() { + return getBodyContentType(); + } + + /** + * @deprecated Use {@link #getBody()}. + */ + @Override + public byte[] getPostBody() { + return getBody(); + } + + @Override + public String getBodyContentType() { + return PROTOCOL_CONTENT_TYPE; + } + + @Override + public byte[] getBody() { + try { + return mRequestBody == null ? null : mRequestBody.getBytes(PROTOCOL_CHARSET); + } catch (UnsupportedEncodingException uee) { + VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", + mRequestBody, PROTOCOL_CHARSET); + return null; + } + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/NetworkImageView.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/NetworkImageView.java new file mode 100644 index 00000000..692e9885 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/NetworkImageView.java @@ -0,0 +1,219 @@ +/** + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.volley.toolbox; + +import android.content.Context; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.ViewGroup.LayoutParams; +import android.widget.ImageView; + +import com.android.volley.VolleyError; +import com.android.volley.toolbox.ImageLoader.ImageContainer; +import com.android.volley.toolbox.ImageLoader.ImageListener; + +/** + * Handles fetching an image from a URL as well as the life-cycle of the + * associated request. + */ +public class NetworkImageView extends ImageView { + /** The URL of the network image to load */ + private String mUrl; + + /** + * Resource ID of the image to be used as a placeholder until the network image is loaded. + */ + private int mDefaultImageId; + + /** + * Resource ID of the image to be used if the network response fails. + */ + private int mErrorImageId; + + /** Local copy of the ImageLoader. */ + private ImageLoader mImageLoader; + + /** Current ImageContainer. (either in-flight or finished) */ + private ImageContainer mImageContainer; + + public NetworkImageView(Context context) { + this(context, null); + } + + public NetworkImageView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public NetworkImageView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + /** + * Sets URL of the image that should be loaded into this view. Note that calling this will + * immediately either set the cached image (if available) or the default image specified by + * {@link NetworkImageView#setDefaultImageResId(int)} on the view. + * + * NOTE: If applicable, {@link NetworkImageView#setDefaultImageResId(int)} and + * {@link NetworkImageView#setErrorImageResId(int)} should be called prior to calling + * this function. + * + * @param url The URL that should be loaded into this ImageView. + * @param imageLoader ImageLoader that will be used to make the request. + */ + public void setImageUrl(String url, ImageLoader imageLoader) { + mUrl = url; + mImageLoader = imageLoader; + // The URL has potentially changed. See if we need to load it. + loadImageIfNecessary(false); + } + + /** + * Sets the default image resource ID to be used for this view until the attempt to load it + * completes. + */ + public void setDefaultImageResId(int defaultImage) { + mDefaultImageId = defaultImage; + } + + /** + * Sets the error image resource ID to be used for this view in the event that the image + * requested fails to load. + */ + public void setErrorImageResId(int errorImage) { + mErrorImageId = errorImage; + } + + /** + * Loads the image for the view if it isn't already loaded. + * @param isInLayoutPass True if this was invoked from a layout pass, false otherwise. + */ + void loadImageIfNecessary(final boolean isInLayoutPass) { + int width = getWidth(); + int height = getHeight(); + + boolean wrapWidth = false, wrapHeight = false; + if (getLayoutParams() != null) { + wrapWidth = getLayoutParams().width == LayoutParams.WRAP_CONTENT; + wrapHeight = getLayoutParams().height == LayoutParams.WRAP_CONTENT; + } + + // if the view's bounds aren't known yet, and this is not a wrap-content/wrap-content + // view, hold off on loading the image. + boolean isFullyWrapContent = wrapWidth && wrapHeight; + if (width == 0 && height == 0 && !isFullyWrapContent) { + return; + } + + // if the URL to be loaded in this view is empty, cancel any old requests and clear the + // currently loaded image. + if (TextUtils.isEmpty(mUrl)) { + if (mImageContainer != null) { + mImageContainer.cancelRequest(); + mImageContainer = null; + } + setDefaultImageOrNull(); + return; + } + + // if there was an old request in this view, check if it needs to be canceled. + if (mImageContainer != null && mImageContainer.getRequestUrl() != null) { + if (mImageContainer.getRequestUrl().equals(mUrl)) { + // if the request is from the same URL, return. + return; + } else { + // if there is a pre-existing request, cancel it if it's fetching a different URL. + mImageContainer.cancelRequest(); + setDefaultImageOrNull(); + } + } + + // Calculate the max image width / height to use while ignoring WRAP_CONTENT dimens. + int maxWidth = wrapWidth ? 0 : width; + int maxHeight = wrapHeight ? 0 : height; + + // The pre-existing content of this view didn't match the current URL. Load the new image + // from the network. + ImageContainer newContainer = mImageLoader.get(mUrl, + new ImageListener() { + @Override + public void onErrorResponse(VolleyError error) { + if (mErrorImageId != 0) { + setImageResource(mErrorImageId); + } + } + + @Override + public void onResponse(final ImageContainer response, boolean isImmediate) { + // If this was an immediate response that was delivered inside of a layout + // pass do not set the image immediately as it will trigger a requestLayout + // inside of a layout. Instead, defer setting the image by posting back to + // the main thread. + if (isImmediate && isInLayoutPass) { + post(new Runnable() { + @Override + public void run() { + onResponse(response, false); + } + }); + return; + } + + if (response.getBitmap() != null) { + setImageBitmap(response.getBitmap()); + } else if (mDefaultImageId != 0) { + setImageResource(mDefaultImageId); + } + } + }, maxWidth, maxHeight); + + // update the ImageContainer to be the new bitmap container. + mImageContainer = newContainer; + } + + private void setDefaultImageOrNull() { + if(mDefaultImageId != 0) { + setImageResource(mDefaultImageId); + } + else { + setImageBitmap(null); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + loadImageIfNecessary(true); + } + + @Override + protected void onDetachedFromWindow() { + if (mImageContainer != null) { + // If the view was bound to an image request, cancel it and clear + // out the image from the view. + mImageContainer.cancelRequest(); + setImageBitmap(null); + // also clear out the container so we can reload the image if necessary. + mImageContainer = null; + } + super.onDetachedFromWindow(); + } + + @Override + protected void drawableStateChanged() { + super.drawableStateChanged(); + invalidate(); + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/NoCache.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/NoCache.java new file mode 100644 index 00000000..ab662543 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/NoCache.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import com.android.volley.Cache; + +/** + * A cache that doesn't. + */ +public class NoCache implements Cache { + @Override + public void clear() { + } + + @Override + public Entry get(String key) { + return null; + } + + @Override + public void put(String key, Entry entry) { + } + + @Override + public void invalidate(String key, boolean fullExpire) { + } + + @Override + public void remove(String key) { + } + + @Override + public void initialize() { + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/PoolingByteArrayOutputStream.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/PoolingByteArrayOutputStream.java new file mode 100644 index 00000000..99715666 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/PoolingByteArrayOutputStream.java @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +/** + * A variation of {@link java.io.ByteArrayOutputStream} that uses a pool of byte[] buffers instead + * of always allocating them fresh, saving on heap churn. + */ +public class PoolingByteArrayOutputStream extends ByteArrayOutputStream { + /** + * If the {@link #PoolingByteArrayOutputStream(ByteArrayPool)} constructor is called, this is + * the default size to which the underlying byte array is initialized. + */ + private static final int DEFAULT_SIZE = 256; + + private final ByteArrayPool mPool; + + /** + * Constructs a new PoolingByteArrayOutputStream with a default size. If more bytes are written + * to this instance, the underlying byte array will expand. + */ + public PoolingByteArrayOutputStream(ByteArrayPool pool) { + this(pool, DEFAULT_SIZE); + } + + /** + * Constructs a new {@code ByteArrayOutputStream} with a default size of {@code size} bytes. If + * more than {@code size} bytes are written to this instance, the underlying byte array will + * expand. + * + * @param size initial size for the underlying byte array. The value will be pinned to a default + * minimum size. + */ + public PoolingByteArrayOutputStream(ByteArrayPool pool, int size) { + mPool = pool; + buf = mPool.getBuf(Math.max(size, DEFAULT_SIZE)); + } + + @Override + public void close() throws IOException { + mPool.returnBuf(buf); + buf = null; + super.close(); + } + + @Override + public void finalize() { + mPool.returnBuf(buf); + } + + /** + * Ensures there is enough space in the buffer for the given number of additional bytes. + */ + private void expand(int i) { + /* Can the buffer handle @i more bytes, if not expand it */ + if (count + i <= buf.length) { + return; + } + byte[] newbuf = mPool.getBuf((count + i) * 2); + System.arraycopy(buf, 0, newbuf, 0, count); + mPool.returnBuf(buf); + buf = newbuf; + } + + @Override + public synchronized void write(byte[] buffer, int offset, int len) { + expand(len); + super.write(buffer, offset, len); + } + + @Override + public synchronized void write(int oneByte) { + expand(1); + super.write(oneByte); + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/RequestFuture.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/RequestFuture.java new file mode 100644 index 00000000..173c44cc --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/RequestFuture.java @@ -0,0 +1,153 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyError; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +/** + * A Future that represents a Volley request. + * + * Used by providing as your response and error listeners. For example: + *
+ * RequestFuture<JSONObject> future = RequestFuture.newFuture();
+ * MyRequest request = new MyRequest(URL, future, future);
+ *
+ * // If you want to be able to cancel the request:
+ * future.setRequest(requestQueue.add(request));
+ *
+ * // Otherwise:
+ * requestQueue.add(request);
+ *
+ * try {
+ *   JSONObject response = future.get();
+ *   // do something with response
+ * } catch (InterruptedException e) {
+ *   // handle the error
+ * } catch (ExecutionException e) {
+ *   // handle the error
+ * }
+ * 
+ * + * @param The type of parsed response this future expects. + */ +public class RequestFuture implements Future, Response.Listener, + Response.ErrorListener { + private Request mRequest; + private boolean mResultReceived = false; + private T mResult; + private VolleyError mException; + + public static RequestFuture newFuture() { + return new RequestFuture(); + } + + private RequestFuture() {} + + public void setRequest(Request request) { + mRequest = request; + } + + @Override + public synchronized boolean cancel(boolean mayInterruptIfRunning) { + if (mRequest == null) { + return false; + } + + if (!isDone()) { + mRequest.cancel(); + return true; + } else { + return false; + } + } + + @Override + public T get() throws InterruptedException, ExecutionException { + try { + return doGet(null); + } catch (TimeoutException e) { + throw new AssertionError(e); + } + } + + @Override + public T get(long timeout, TimeUnit unit) + throws InterruptedException, ExecutionException, TimeoutException { + return doGet(TimeUnit.MILLISECONDS.convert(timeout, unit)); + } + + private synchronized T doGet(Long timeoutMs) + throws InterruptedException, ExecutionException, TimeoutException { + if (mException != null) { + throw new ExecutionException(mException); + } + + if (mResultReceived) { + return mResult; + } + + if (timeoutMs == null) { + wait(0); + } else if (timeoutMs > 0) { + wait(timeoutMs); + } + + if (mException != null) { + throw new ExecutionException(mException); + } + + if (!mResultReceived) { + throw new TimeoutException(); + } + + return mResult; + } + + @Override + public boolean isCancelled() { + if (mRequest == null) { + return false; + } + return mRequest.isCanceled(); + } + + @Override + public synchronized boolean isDone() { + return mResultReceived || mException != null || isCancelled(); + } + + @Override + public synchronized void onResponse(T response) { + mResultReceived = true; + mResult = response; + notifyAll(); + } + + @Override + public synchronized void onErrorResponse(VolleyError error) { + mException = error; + notifyAll(); + } +} + diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/StringRequest.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/StringRequest.java new file mode 100644 index 00000000..6b3dfcf8 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/StringRequest.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import com.android.volley.NetworkResponse; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.Response.ErrorListener; +import com.android.volley.Response.Listener; + +import java.io.UnsupportedEncodingException; + +/** + * A canned request for retrieving the response body at a given URL as a String. + */ +public class StringRequest extends Request { + private final Listener mListener; + + /** + * Creates a new request with the given method. + * + * @param method the request {@link Method} to use + * @param url URL to fetch the string at + * @param listener Listener to receive the String response + * @param errorListener Error listener, or null to ignore errors + */ + public StringRequest(int method, String url, Listener listener, + ErrorListener errorListener) { + super(method, url, errorListener); + mListener = listener; + } + + /** + * Creates a new GET request. + * + * @param url URL to fetch the string at + * @param listener Listener to receive the String response + * @param errorListener Error listener, or null to ignore errors + */ + public StringRequest(String url, Listener listener, ErrorListener errorListener) { + this(Method.GET, url, listener, errorListener); + } + + @Override + protected void deliverResponse(String response) { + mListener.onResponse(response); + } + + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + String parsed; + try { + parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); + } catch (UnsupportedEncodingException e) { + parsed = new String(response.data); + } + return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); + } +} diff --git a/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/Volley.java b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/Volley.java new file mode 100644 index 00000000..0e04e876 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/src/main/java/com/android/volley/toolbox/Volley.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.volley.toolbox; + +import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager.NameNotFoundException; +import android.net.http.AndroidHttpClient; +import android.os.Build; + +import com.android.volley.Network; +import com.android.volley.RequestQueue; + +import java.io.File; + +public class Volley { + + /** Default on-disk cache directory. */ + private static final String DEFAULT_CACHE_DIR = "volley"; + + /** + * Creates a default instance of the worker pool and calls {@link RequestQueue#start()} on it. + * + * @param context A {@link Context} to use for creating the cache dir. + * @param stack An {@link HttpStack} to use for the network, or null for default. + * @return A started {@link RequestQueue} instance. + */ + public static RequestQueue newRequestQueue(Context context, HttpStack stack) { + File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR); + + String userAgent = "volley/0"; + try { + String packageName = context.getPackageName(); + PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0); + userAgent = packageName + "/" + info.versionCode; + } catch (NameNotFoundException e) { + } + + if (stack == null) { + if (Build.VERSION.SDK_INT >= 9) { + stack = new HurlStack(); + } else { + // Prior to Gingerbread, HttpUrlConnection was unreliable. + // See: http://android-developers.blogspot.com/2011/09/androids-http-clients.html + stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent)); + } + } + + Network network = new BasicNetwork(stack); + + RequestQueue queue = new RequestQueue(new DiskBasedCache(cacheDir), network); + queue.start(); + + return queue; + } + + /** + * Creates a default instance of the worker pool and calls {@link RequestQueue#start()} on it. + * + * @param context A {@link Context} to use for creating the cache dir. + * @return A started {@link RequestQueue} instance. + */ + public static RequestQueue newRequestQueue(Context context) { + return newRequestQueue(context, null); + } +} diff --git a/LearnFromMap/volley_buildmlearn/volley_buildmlearn.iml b/LearnFromMap/volley_buildmlearn/volley_buildmlearn.iml new file mode 100644 index 00000000..80bc7887 --- /dev/null +++ b/LearnFromMap/volley_buildmlearn/volley_buildmlearn.iml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/.idea/.name b/Practice Handwriting/.idea/.name new file mode 100644 index 00000000..63f7b645 --- /dev/null +++ b/Practice Handwriting/.idea/.name @@ -0,0 +1 @@ +Practice Handwriting \ No newline at end of file diff --git a/Practice Handwriting/.idea/compiler.xml b/Practice Handwriting/.idea/compiler.xml new file mode 100644 index 00000000..96cc43ef --- /dev/null +++ b/Practice Handwriting/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/.idea/copyright/profiles_settings.xml b/Practice Handwriting/.idea/copyright/profiles_settings.xml new file mode 100644 index 00000000..e7bedf33 --- /dev/null +++ b/Practice Handwriting/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Practice Handwriting/.idea/gradle.xml b/Practice Handwriting/.idea/gradle.xml new file mode 100644 index 00000000..47fdc160 --- /dev/null +++ b/Practice Handwriting/.idea/gradle.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/.idea/misc.xml b/Practice Handwriting/.idea/misc.xml new file mode 100644 index 00000000..bc3190ec --- /dev/null +++ b/Practice Handwriting/.idea/misc.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + 1.7 + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/.idea/modules.xml b/Practice Handwriting/.idea/modules.xml new file mode 100644 index 00000000..5180d945 --- /dev/null +++ b/Practice Handwriting/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/.idea/vcs.xml b/Practice Handwriting/.idea/vcs.xml new file mode 100644 index 00000000..075f87f3 --- /dev/null +++ b/Practice Handwriting/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/.idea/workspace.xml b/Practice Handwriting/.idea/workspace.xml new file mode 100644 index 00000000..e7846a94 --- /dev/null +++ b/Practice Handwriting/.idea/workspace.xml @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1441313307109 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/Practice Handwriting.iml b/Practice Handwriting/Practice Handwriting.iml new file mode 100644 index 00000000..46b2d855 --- /dev/null +++ b/Practice Handwriting/Practice Handwriting.iml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.gradle/2.2.1/taskArtifacts/cache.properties b/Practice Handwriting/source-code/LabeltheDiagram/.gradle/2.2.1/taskArtifacts/cache.properties new file mode 100644 index 00000000..0b5fd79b --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/.gradle/2.2.1/taskArtifacts/cache.properties @@ -0,0 +1 @@ +#Fri Sep 04 02:47:35 IST 2015 diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.gradle/2.2.1/taskArtifacts/cache.properties.lock b/Practice Handwriting/source-code/LabeltheDiagram/.gradle/2.2.1/taskArtifacts/cache.properties.lock new file mode 100644 index 00000000..dbe998f8 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/.gradle/2.2.1/taskArtifacts/cache.properties.lock differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.gradle/2.2.1/taskArtifacts/fileHashes.bin b/Practice Handwriting/source-code/LabeltheDiagram/.gradle/2.2.1/taskArtifacts/fileHashes.bin new file mode 100644 index 00000000..b91644fb Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/.gradle/2.2.1/taskArtifacts/fileHashes.bin differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin b/Practice Handwriting/source-code/LabeltheDiagram/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin new file mode 100644 index 00000000..04ccfb57 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/.gradle/2.2.1/taskArtifacts/fileSnapshots.bin differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.gradle/2.2.1/taskArtifacts/outputFileStates.bin b/Practice Handwriting/source-code/LabeltheDiagram/.gradle/2.2.1/taskArtifacts/outputFileStates.bin new file mode 100644 index 00000000..4f6ce8c2 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/.gradle/2.2.1/taskArtifacts/outputFileStates.bin differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin b/Practice Handwriting/source-code/LabeltheDiagram/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin new file mode 100644 index 00000000..6420d3b4 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/.gradle/2.2.1/taskArtifacts/taskArtifacts.bin differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.idea/.name b/Practice Handwriting/source-code/LabeltheDiagram/.idea/.name new file mode 100644 index 00000000..e5a4cf73 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/.idea/.name @@ -0,0 +1 @@ +LabeltheDiagram \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.idea/compiler.xml b/Practice Handwriting/source-code/LabeltheDiagram/.idea/compiler.xml new file mode 100644 index 00000000..96cc43ef --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.idea/copyright/profiles_settings.xml b/Practice Handwriting/source-code/LabeltheDiagram/.idea/copyright/profiles_settings.xml new file mode 100644 index 00000000..e7bedf33 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.idea/gradle.xml b/Practice Handwriting/source-code/LabeltheDiagram/.idea/gradle.xml new file mode 100644 index 00000000..03c906e2 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/com_crashlytics_sdk_android_crashlytics_classes.xml b/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/com_crashlytics_sdk_android_crashlytics_classes.xml new file mode 100644 index 00000000..fdf7961a --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/com_crashlytics_sdk_android_crashlytics_classes.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/gson_2_2_4.xml b/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/gson_2_2_4.xml new file mode 100644 index 00000000..8e039c39 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/gson_2_2_4.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/io_fabric_sdk_android_fabric.xml b/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/io_fabric_sdk_android_fabric.xml new file mode 100644 index 00000000..6c67a2fb --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/io_fabric_sdk_android_fabric.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/mpandroidchartlibrary_2_1_3.xml b/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/mpandroidchartlibrary_2_1_3.xml new file mode 100644 index 00000000..a1adfda2 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/mpandroidchartlibrary_2_1_3.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/sqliteassethelper_2_0_1.xml b/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/sqliteassethelper_2_0_1.xml new file mode 100644 index 00000000..a138fdc0 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/sqliteassethelper_2_0_1.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/support_annotations_22_2_1.xml b/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/support_annotations_22_2_1.xml new file mode 100644 index 00000000..c44c204f --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/support_annotations_22_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/support_v4_22_2_1.xml b/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/support_v4_22_2_1.xml new file mode 100644 index 00000000..e77b6701 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/.idea/libraries/support_v4_22_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.idea/misc.xml b/Practice Handwriting/source-code/LabeltheDiagram/.idea/misc.xml new file mode 100644 index 00000000..897879bf --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/.idea/misc.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + 1.7 + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.idea/modules.xml b/Practice Handwriting/source-code/LabeltheDiagram/.idea/modules.xml new file mode 100644 index 00000000..016e4eee --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/.idea/modules.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.idea/vcs.xml b/Practice Handwriting/source-code/LabeltheDiagram/.idea/vcs.xml new file mode 100644 index 00000000..c2365ab1 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/.idea/workspace.xml b/Practice Handwriting/source-code/LabeltheDiagram/.idea/workspace.xml new file mode 100644 index 00000000..9692f76b --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/.idea/workspace.xml @@ -0,0 +1,1915 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1441314999686 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/LabeltheDiagram.iml b/Practice Handwriting/source-code/LabeltheDiagram/LabeltheDiagram.iml new file mode 100644 index 00000000..01bcdbf3 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/LabeltheDiagram.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/build.gradle b/Practice Handwriting/source-code/LabeltheDiagram/build.gradle new file mode 100644 index 00000000..88d246d4 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/build.gradle @@ -0,0 +1,15 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:1.2.3' + } +} + +allprojects { + repositories { + jcenter() + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/comcrashlyticssdkandroid_crashlytics/build.gradle b/Practice Handwriting/source-code/LabeltheDiagram/comcrashlyticssdkandroid_crashlytics/build.gradle new file mode 100644 index 00000000..5b16aeeb --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/comcrashlyticssdkandroid_crashlytics/build.gradle @@ -0,0 +1,5 @@ +apply plugin: 'java' + +dependencies { + compile files('libs/com-crashlytics-sdk-android_crashlytics-classes.jar') +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/comcrashlyticssdkandroid_crashlytics/comcrashlyticssdkandroid_crashlytics.iml b/Practice Handwriting/source-code/LabeltheDiagram/comcrashlyticssdkandroid_crashlytics/comcrashlyticssdkandroid_crashlytics.iml new file mode 100644 index 00000000..29b9f706 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/comcrashlyticssdkandroid_crashlytics/comcrashlyticssdkandroid_crashlytics.iml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/comcrashlyticssdkandroid_crashlytics/libs/com-crashlytics-sdk-android_crashlytics-classes.jar b/Practice Handwriting/source-code/LabeltheDiagram/comcrashlyticssdkandroid_crashlytics/libs/com-crashlytics-sdk-android_crashlytics-classes.jar new file mode 100644 index 00000000..43a634ed Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/comcrashlyticssdkandroid_crashlytics/libs/com-crashlytics-sdk-android_crashlytics-classes.jar differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/gradle/wrapper/gradle-wrapper.jar b/Practice Handwriting/source-code/LabeltheDiagram/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 00000000..8c0fb64a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/gradle/wrapper/gradle-wrapper.jar differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/gradle/wrapper/gradle-wrapper.properties b/Practice Handwriting/source-code/LabeltheDiagram/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..0c71e760 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Wed Apr 10 15:27:10 PDT 2013 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip diff --git a/Practice Handwriting/source-code/LabeltheDiagram/gradlew b/Practice Handwriting/source-code/LabeltheDiagram/gradlew new file mode 100755 index 00000000..91a7e269 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/gradlew @@ -0,0 +1,164 @@ +#!/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 + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# 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\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +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"` + + # 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/Practice Handwriting/source-code/LabeltheDiagram/gradlew.bat b/Practice Handwriting/source-code/LabeltheDiagram/gradlew.bat new file mode 100644 index 00000000..aec99730 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/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/Practice Handwriting/source-code/LabeltheDiagram/import-summary.txt b/Practice Handwriting/source-code/LabeltheDiagram/import-summary.txt new file mode 100644 index 00000000..c85542e5 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/import-summary.txt @@ -0,0 +1,227 @@ +ECLIPSE ANDROID PROJECT IMPORT SUMMARY +====================================== + +Risky Project Location: +----------------------- +The tools *should* handle project locations in any directory. However, +due to bugs, placing projects in directories containing spaces in the +path, or characters like ", ' and &, have had issues. We're working to +eliminate these bugs, but to save yourself headaches you may want to +move your project to a location where this is not a problem. +/home/priyank/AndroidStudioProjects/Mobile-applications/Practice Handwriting/source-code/LabeltheDiagram + - + +Ignored Files: +-------------- +The following files were *not* copied into the new Gradle project; you +should evaluate whether these are still needed in your project and if +so manually move them: + +From LabeltheDiagram: +* fabric.properties +* go_btn-web.png +* ic_launcher-web.png +* kit-libs/ +* kit-libs/com-crashlytics-sdk-android_answers/ +* kit-libs/com-crashlytics-sdk-android_answers/AndroidManifest.xml +* kit-libs/com-crashlytics-sdk-android_answers/aapt/ +* kit-libs/com-crashlytics-sdk-android_answers/aapt/AndroidManifest.xml +* kit-libs/com-crashlytics-sdk-android_answers/aapt/bin/ +* kit-libs/com-crashlytics-sdk-android_answers/aapt/bin/AndroidManifest.xml +* kit-libs/com-crashlytics-sdk-android_answers/aapt/bin/classes/ +* kit-libs/com-crashlytics-sdk-android_answers/aapt/bin/classes/com/ +* kit-libs/com-crashlytics-sdk-android_answers/aapt/bin/classes/com/crashlytics/ +* kit-libs/com-crashlytics-sdk-android_answers/aapt/bin/classes/com/crashlytics/android/ +* kit-libs/com-crashlytics-sdk-android_answers/aapt/bin/classes/com/crashlytics/android/answers/ +* kit-libs/com-crashlytics-sdk-android_answers/aapt/bin/classes/com/crashlytics/android/answers/BuildConfig.class +* kit-libs/com-crashlytics-sdk-android_answers/aapt/gen/ +* kit-libs/com-crashlytics-sdk-android_answers/aapt/gen/com/ +* kit-libs/com-crashlytics-sdk-android_answers/aapt/gen/com/crashlytics/ +* kit-libs/com-crashlytics-sdk-android_answers/aapt/gen/com/crashlytics/android/ +* kit-libs/com-crashlytics-sdk-android_answers/aapt/gen/com/crashlytics/android/answers/ +* kit-libs/com-crashlytics-sdk-android_answers/aapt/gen/com/crashlytics/android/answers/BuildConfig.java +* kit-libs/com-crashlytics-sdk-android_answers/aapt/project.properties +* kit-libs/com-crashlytics-sdk-android_answers/bin/ +* kit-libs/com-crashlytics-sdk-android_answers/bin/AndroidManifest.xml +* kit-libs/com-crashlytics-sdk-android_answers/bin/classes/ +* kit-libs/com-crashlytics-sdk-android_answers/bin/classes/com/ +* kit-libs/com-crashlytics-sdk-android_answers/bin/classes/com/crashlytics/ +* kit-libs/com-crashlytics-sdk-android_answers/bin/classes/com/crashlytics/android/ +* kit-libs/com-crashlytics-sdk-android_answers/bin/classes/com/crashlytics/android/answers/ +* kit-libs/com-crashlytics-sdk-android_answers/bin/classes/com/crashlytics/android/answers/BuildConfig.class +* kit-libs/com-crashlytics-sdk-android_answers/bin/com-crashlytics-sdk-android_answers.jar +* kit-libs/com-crashlytics-sdk-android_answers/build.xml +* kit-libs/com-crashlytics-sdk-android_answers/gen/ +* kit-libs/com-crashlytics-sdk-android_answers/gen/com/ +* kit-libs/com-crashlytics-sdk-android_answers/gen/com/crashlytics/ +* kit-libs/com-crashlytics-sdk-android_answers/gen/com/crashlytics/android/ +* kit-libs/com-crashlytics-sdk-android_answers/gen/com/crashlytics/android/answers/ +* kit-libs/com-crashlytics-sdk-android_answers/gen/com/crashlytics/android/answers/BuildConfig.java +* kit-libs/com-crashlytics-sdk-android_answers/kit-version.properties +* kit-libs/com-crashlytics-sdk-android_answers/libs/ +* kit-libs/com-crashlytics-sdk-android_answers/libs/com-crashlytics-sdk-android_answers-classes.jar +* kit-libs/com-crashlytics-sdk-android_answers/project.properties +* kit-libs/com-crashlytics-sdk-android_beta/ +* kit-libs/com-crashlytics-sdk-android_beta/AndroidManifest.xml +* kit-libs/com-crashlytics-sdk-android_beta/aapt/ +* kit-libs/com-crashlytics-sdk-android_beta/aapt/AndroidManifest.xml +* kit-libs/com-crashlytics-sdk-android_beta/bin/ +* kit-libs/com-crashlytics-sdk-android_beta/bin/AndroidManifest.xml +* kit-libs/com-crashlytics-sdk-android_beta/bin/classes/ +* kit-libs/com-crashlytics-sdk-android_beta/bin/classes/com/ +* kit-libs/com-crashlytics-sdk-android_beta/bin/classes/com/crashlytics/ +* kit-libs/com-crashlytics-sdk-android_beta/bin/classes/com/crashlytics/android/ +* kit-libs/com-crashlytics-sdk-android_beta/bin/classes/com/crashlytics/android/beta/ +* kit-libs/com-crashlytics-sdk-android_beta/bin/classes/com/crashlytics/android/beta/BuildConfig.class +* kit-libs/com-crashlytics-sdk-android_beta/bin/com-crashlytics-sdk-android_beta.jar +* kit-libs/com-crashlytics-sdk-android_beta/build.gradle +* kit-libs/com-crashlytics-sdk-android_beta/build.xml +* kit-libs/com-crashlytics-sdk-android_beta/com-crashlytics-sdk-android_beta.iml +* kit-libs/com-crashlytics-sdk-android_beta/gen/ +* kit-libs/com-crashlytics-sdk-android_beta/gen/com/ +* kit-libs/com-crashlytics-sdk-android_beta/gen/com/crashlytics/ +* kit-libs/com-crashlytics-sdk-android_beta/gen/com/crashlytics/android/ +* kit-libs/com-crashlytics-sdk-android_beta/gen/com/crashlytics/android/beta/ +* kit-libs/com-crashlytics-sdk-android_beta/gen/com/crashlytics/android/beta/BuildConfig.java +* kit-libs/com-crashlytics-sdk-android_beta/kit-version.properties +* kit-libs/com-crashlytics-sdk-android_beta/libs/ +* kit-libs/com-crashlytics-sdk-android_beta/libs/com-crashlytics-sdk-android_beta-classes.jar +* kit-libs/com-crashlytics-sdk-android_beta/project.properties +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/ +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/AndroidManifest.xml +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/aapt/ +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/aapt/AndroidManifest.xml +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/bin/ +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/bin/AndroidManifest.xml +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/bin/classes/ +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/bin/classes/com/ +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/bin/classes/com/crashlytics/ +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/bin/classes/com/crashlytics/android/ +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/bin/classes/com/crashlytics/android/core/ +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/bin/classes/com/crashlytics/android/core/BuildConfig.class +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/bin/com-crashlytics-sdk-android_crashlytics-core.jar +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/build.xml +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/gen/ +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/gen/com/ +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/gen/com/crashlytics/ +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/gen/com/crashlytics/android/ +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/gen/com/crashlytics/android/core/ +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/gen/com/crashlytics/android/core/BuildConfig.java +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/kit-version.properties +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/libs/ +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/libs/com-crashlytics-sdk-android_crashlytics-core-classes.jar +* kit-libs/com-crashlytics-sdk-android_crashlytics-core/project.properties +* kit-libs/com-crashlytics-sdk-android_crashlytics/ +* kit-libs/com-crashlytics-sdk-android_crashlytics/AndroidManifest.xml +* kit-libs/com-crashlytics-sdk-android_crashlytics/aapt/ +* kit-libs/com-crashlytics-sdk-android_crashlytics/aapt/AndroidManifest.xml +* kit-libs/com-crashlytics-sdk-android_crashlytics/bin/ +* kit-libs/com-crashlytics-sdk-android_crashlytics/bin/AndroidManifest.xml +* kit-libs/com-crashlytics-sdk-android_crashlytics/bin/classes/ +* kit-libs/com-crashlytics-sdk-android_crashlytics/bin/classes/com/ +* kit-libs/com-crashlytics-sdk-android_crashlytics/bin/classes/com/crashlytics/ +* kit-libs/com-crashlytics-sdk-android_crashlytics/bin/classes/com/crashlytics/android/ +* kit-libs/com-crashlytics-sdk-android_crashlytics/bin/classes/com/crashlytics/android/BuildConfig.class +* kit-libs/com-crashlytics-sdk-android_crashlytics/bin/com-crashlytics-sdk-android_crashlytics.jar +* kit-libs/com-crashlytics-sdk-android_crashlytics/build.xml +* kit-libs/com-crashlytics-sdk-android_crashlytics/gen/ +* kit-libs/com-crashlytics-sdk-android_crashlytics/gen/com/ +* kit-libs/com-crashlytics-sdk-android_crashlytics/gen/com/crashlytics/ +* kit-libs/com-crashlytics-sdk-android_crashlytics/gen/com/crashlytics/android/ +* kit-libs/com-crashlytics-sdk-android_crashlytics/gen/com/crashlytics/android/BuildConfig.java +* kit-libs/com-crashlytics-sdk-android_crashlytics/kit-version.properties +* kit-libs/com-crashlytics-sdk-android_crashlytics/libs/ +* kit-libs/com-crashlytics-sdk-android_crashlytics/libs/com-crashlytics-sdk-android_crashlytics-classes.jar +* kit-libs/com-crashlytics-sdk-android_crashlytics/project.properties +* kit-libs/io-fabric-sdk-android_fabric/ +* kit-libs/io-fabric-sdk-android_fabric/AndroidManifest.xml +* kit-libs/io-fabric-sdk-android_fabric/aapt/ +* kit-libs/io-fabric-sdk-android_fabric/aapt/AndroidManifest.xml +* kit-libs/io-fabric-sdk-android_fabric/bin/ +* kit-libs/io-fabric-sdk-android_fabric/bin/AndroidManifest.xml +* kit-libs/io-fabric-sdk-android_fabric/bin/classes/ +* kit-libs/io-fabric-sdk-android_fabric/bin/classes/io/ +* kit-libs/io-fabric-sdk-android_fabric/bin/classes/io/fabric/ +* kit-libs/io-fabric-sdk-android_fabric/bin/classes/io/fabric/sdk/ +* kit-libs/io-fabric-sdk-android_fabric/bin/classes/io/fabric/sdk/android/ +* kit-libs/io-fabric-sdk-android_fabric/bin/classes/io/fabric/sdk/android/BuildConfig.class +* kit-libs/io-fabric-sdk-android_fabric/bin/io-fabric-sdk-android_fabric.jar +* kit-libs/io-fabric-sdk-android_fabric/build.xml +* kit-libs/io-fabric-sdk-android_fabric/gen/ +* kit-libs/io-fabric-sdk-android_fabric/gen/io/ +* kit-libs/io-fabric-sdk-android_fabric/gen/io/fabric/ +* kit-libs/io-fabric-sdk-android_fabric/gen/io/fabric/sdk/ +* kit-libs/io-fabric-sdk-android_fabric/gen/io/fabric/sdk/android/ +* kit-libs/io-fabric-sdk-android_fabric/gen/io/fabric/sdk/android/BuildConfig.java +* kit-libs/io-fabric-sdk-android_fabric/kit-version.properties +* kit-libs/io-fabric-sdk-android_fabric/libs/ +* kit-libs/io-fabric-sdk-android_fabric/libs/io-fabric-sdk-android_fabric-classes.jar +* kit-libs/io-fabric-sdk-android_fabric/project.properties +* kit-libs/kit-libs.iml +* kits.properties +* proceed_btn-web.png +* proguard-project.txt +* sound_icon-web.png +* view_btn-web.png +From com-crashlytics-sdk-android_crashlytics: +* AndroidManifest.xml +* aapt/ +* aapt/AndroidManifest.xml +* build.xml +* kit-version.properties + +Replaced Jars with Dependencies: +-------------------------------- +The importer recognized the following .jar files as third party +libraries and replaced them with Gradle dependencies instead. This has +the advantage that more explicit version information is known, and the +libraries can be updated automatically. However, it is possible that +the .jar file in your project was of an older version than the +dependency we picked, which could render the project not compileable. +You can disable the jar replacement in the import wizard and try again: + +android-support-v4.jar => com.android.support:support-v4:22.2.1 +gson-2.2.4.jar => com.google.code.gson:gson:2.2.4 + +Potentially Missing Dependency: +------------------------------- +When we replaced the following .jar files with a Gradle dependency, we +inferred the dependency version number from the filename. This +specific version may not actually be available from the repository. +If you get a build error stating that the dependency is missing, edit +the version number to for example "+" to pick up the latest version +instead. (This may require you to update your code if the library APIs +have changed.) + +gson-2.2.4.jar => version 2.2.4 in com.google.code.gson:gson:2.2.4 + +Moved Files: +------------ +Android Gradle projects use a different directory structure than ADT +Eclipse projects. Here's how the projects were restructured: + +In com-crashlytics-sdk-android_crashlytics: +* libs/com-crashlytics-sdk-android_crashlytics-classes.jar => comcrashlyticssdkandroid_crashlytics/libs/com-crashlytics-sdk-android_crashlytics-classes.jar +In LabeltheDiagram: +* AndroidManifest.xml => labeltheDiagram/src/main/AndroidManifest.xml +* assets/ => labeltheDiagram/src/main/assets/ +* libs/io-fabric-sdk-android_fabric.jar => labeltheDiagram/libs/io-fabric-sdk-android_fabric.jar +* libs/mpandroidchartlibrary-2-1-3.jar => labeltheDiagram/libs/mpandroidchartlibrary-2-1-3.jar +* libs/sqliteassethelper-2.0.1.jar => labeltheDiagram/libs/sqliteassethelper-2.0.1.jar +* res/ => labeltheDiagram/src/main/res/ +* src/ => labeltheDiagram/src/main/java/ + +Next Steps: +----------- +You can now build the project. The Gradle project needs network +connectivity to download dependencies. + +Bugs: +----- +If for some reason your project does not build, and you determine that +it is due to a bug or limitation of the Eclipse to Gradle importer, +please file a bug at http://b.android.com with category +Component-Tools. + +(This import summary is for your information only, and can be deleted +after import once you are satisfied with the results.) diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/build.gradle b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/build.gradle new file mode 100644 index 00000000..6e512cb7 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/build.gradle @@ -0,0 +1,28 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 22 + buildToolsVersion "22.0.1" + + defaultConfig { + applicationId "com.example.labelthediagram" + minSdkVersion 14 + targetSdkVersion 22 + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' + } + } +} + +dependencies { + compile project(':comcrashlyticssdkandroid_crashlytics') + compile 'com.android.support:support-v4:22.2.1' + compile 'com.google.code.gson:gson:2.2.4' + compile files('libs/io-fabric-sdk-android_fabric.jar') + compile files('libs/mpandroidchartlibrary-2-1-3.jar') + compile files('libs/sqliteassethelper-2.0.1.jar') +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/labeltheDiagram.iml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/labeltheDiagram.iml new file mode 100644 index 00000000..40d9f6fa --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/labeltheDiagram.iml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/libs/io-fabric-sdk-android_fabric.jar b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/libs/io-fabric-sdk-android_fabric.jar new file mode 100644 index 00000000..77bf4f77 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/libs/io-fabric-sdk-android_fabric.jar differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/libs/mpandroidchartlibrary-2-1-3.jar b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/libs/mpandroidchartlibrary-2-1-3.jar new file mode 100644 index 00000000..114ecddd Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/libs/mpandroidchartlibrary-2-1-3.jar differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/libs/sqliteassethelper-2.0.1.jar b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/libs/sqliteassethelper-2.0.1.jar new file mode 100644 index 00000000..ee649de8 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/libs/sqliteassethelper-2.0.1.jar differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/AndroidManifest.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/AndroidManifest.xml new file mode 100644 index 00000000..834b3bb4 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/AndroidManifest.xml @@ -0,0 +1,581 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/crashlytics-build.properties b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/crashlytics-build.properties new file mode 100644 index 00000000..92af4b0e --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/crashlytics-build.properties @@ -0,0 +1,11 @@ +#This file is automatically generated by Crashlytics to uniquely +#identify individual builds of your Android application. +# +#Do NOT modify, delete, or commit to source control! +# +#Sat Aug 08 10:11:06 IST 2015 +version_name=1.0 +package_name=com.example.labelthediagram +build_id=4dca5e7d-eb93-4034-9e15-cb92fdbf7e51 +version_code=1 +app_name=LabeltheDiagram diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/databases/staticdata.db b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/databases/staticdata.db new file mode 100644 index 00000000..b6d3f05d Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/databases/staticdata.db differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/Roboto-Bold.ttf b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/Roboto-Bold.ttf new file mode 100644 index 00000000..63b19d63 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/Roboto-Bold.ttf differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/Roboto-Light.ttf b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/Roboto-Light.ttf new file mode 100644 index 00000000..53751bf3 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/Roboto-Light.ttf differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/Roboto-Regular.ttf b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/Roboto-Regular.ttf new file mode 100644 index 00000000..df05ecea Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/Roboto-Regular.ttf differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/Roboto-Thin.ttf b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/Roboto-Thin.ttf new file mode 100644 index 00000000..0c46ad21 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/Roboto-Thin.ttf differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/RobotoCondensed-Light.ttf b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/RobotoCondensed-Light.ttf new file mode 100644 index 00000000..23b2ed3e Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/RobotoCondensed-Light.ttf differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/RobotoCondensed-LightItalic.ttf b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/RobotoCondensed-LightItalic.ttf new file mode 100644 index 00000000..d6121368 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/RobotoCondensed-LightItalic.ttf differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/RobotoCondensed-Regular.ttf b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/RobotoCondensed-Regular.ttf new file mode 100644 index 00000000..713fd30c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/RobotoCondensed-Regular.ttf differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/materialdesignjim-Regular.ttf b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/materialdesignjim-Regular.ttf new file mode 100644 index 00000000..9aff7523 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/assets/fonts/materialdesignjim-Regular.ttf differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/CategoryViewer.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/CategoryViewer.java new file mode 100644 index 00000000..f7a9f198 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/CategoryViewer.java @@ -0,0 +1,37 @@ +package com.buildmlearn.labeldiagram; + +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.PagerTabStrip; +import android.support.v4.view.ViewPager; + +public class CategoryViewer extends FragmentActivity { + + protected FragmentPagerAdapter adapterViewPager; + protected ViewPager vpPager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + PagerTabStrip strip; + + setContentView(R.layout.diagram_menu); + + // Set ViewPager parameters + vpPager = (ViewPager) findViewById(R.id.diagrampager); + vpPager.setClipToPadding(false); + vpPager.setPageMargin(20); + vpPager.setBackgroundColor(getResources().getColor( + R.color.appBg_color_white)); + strip = (PagerTabStrip) vpPager + .findViewById(R.id.pager_title_strip); + strip.setTabIndicatorColor(getResources().getColor( + R.color.appBg_color_white)); + + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramCategory.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramCategory.java new file mode 100644 index 00000000..5c191514 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramCategory.java @@ -0,0 +1,52 @@ +package com.buildmlearn.labeldiagram; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.resources.DiagramCategoryAdapter; +import com.buildmlearn.labeldiagram.resources.DiagramCategoryRawItem; +import com.example.labelthediagram.R; + +import android.app.ActionBar; +import android.app.ListActivity; +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +public class DiagramCategory extends ListActivity { + + + ArrayList categories = new ArrayList(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + + // Enabling ActionBar + ActionBar actionBar = getActionBar(); + actionBar.setTitle("Diagram Categories"); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.show(); + + createModel(); + + ArrayAdapter categryAdapter = new DiagramCategoryAdapter(this, R.layout.category_row_item, categories); + setListAdapter(categryAdapter); + } + + private void createModel() { + + DiagramCategoryRawItem item1 = new DiagramCategoryRawItem("Human Body", "Diagrams of Human Body", R.drawable.human_body); + DiagramCategoryRawItem item2 = new DiagramCategoryRawItem("Plants", "Diagrams of plants", R.drawable.plants); + DiagramCategoryRawItem item3 = new DiagramCategoryRawItem("Micro-organisams", "Diagrams of microbes", R.drawable.micro); + DiagramCategoryRawItem item4 = new DiagramCategoryRawItem("Natural Cycles", "Diagrams of nature cycles", R.drawable.natural_cycle); + + categories.add(item1); + categories.add(item2); + categories.add(item3); + categories.add(item4); + + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramCategoryViewer.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramCategoryViewer.java new file mode 100644 index 00000000..b600320f --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramCategoryViewer.java @@ -0,0 +1,79 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.BioCategoryFragment; +import com.buildmlearn.labeldiagram.resources.CategoryViewerAdapter; +import com.buildmlearn.labeldiagram.resources.PhysicsCategoryFragment; +import com.buildmlearn.labeldiagram.resources.ScienceCategoryFragment; +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.PagerTabStrip; +import android.support.v4.view.ViewPager; + +public class DiagramCategoryViewer extends CategoryViewer { + + FragmentPagerAdapter adapterViewPager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + adapterViewPager = new DiagramCategoryViewerAdapter( + getSupportFragmentManager()); + + vpPager.setAdapter(adapterViewPager); + + HelperClass.setActionBar("Diagram Categories", this); + + } + + public static class DiagramCategoryViewerAdapter extends + CategoryViewerAdapter { + + private String[] pageTitles = new String[] { "Biology", "Physics", + "Science" }; + public static int NUM_ITEMS = 3; + + public DiagramCategoryViewerAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public Fragment getItem(int position) { + + switch (position) { + case 0: + BioCategoryFragment bioFrag = new BioCategoryFragment(); + return bioFrag; + case 1: + PhysicsCategoryFragment physicsFrag = new PhysicsCategoryFragment(); + return physicsFrag; + case 2: + ScienceCategoryFragment scienceFrag = new ScienceCategoryFragment(); + return scienceFrag; + default: + return null; + } + } + + @Override + public int getCount() { + return NUM_ITEMS; + } + + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + + @Override + public float getPageWidth(int position) { + return 1.0f; + } + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramFragment.java new file mode 100644 index 00000000..a45779c1 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramFragment.java @@ -0,0 +1,68 @@ +package com.buildmlearn.labeldiagram; + +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +public class DiagramFragment extends Fragment { + // Store instance variables + private int id; + private Typeface tfThin; + private Typeface tfLight; + + + // newInstance constructor for creating fragment with arguments + public static Fragment getInstance(int id) { + DiagramFragment frag = new DiagramFragment(); + //insert data to passs + //Bundle args = new Bundle(); + //args.putInt("diagram_id", id); + //frag.setArguments(args); + return frag; + } + + // Store instance variables based on arguments passed + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + //id = getArguments().getInt("diagram_id", 0); + tfLight = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Roboto-Light.ttf"); + tfThin = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Roboto-Thin.ttf"); + + } + + // Inflate the view for the fragment based on layout XML + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.human_eye_view, container, false); + + //Set font-face + TextView diagramTxt=(TextView) view.findViewById(R.id.txt_diagram); + Button startBtn=(Button) view.findViewById(R.id.go_diagram_btn); + diagramTxt.setTypeface(tfThin); + startBtn.setTypeface(tfThin); + + startBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent intent = new Intent(getActivity(), DiagramPlayHumanEye.class); + startActivity(intent); + } + }); + + + return view; + } +} \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuElectricity.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuElectricity.java new file mode 100644 index 00000000..e0ef0f47 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuElectricity.java @@ -0,0 +1,112 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.CircuitFragment; +import com.buildmlearn.labeldiagram.resources.DryCellFragment; +import com.buildmlearn.labeldiagram.resources.HumanEarFragment; +import com.buildmlearn.labeldiagram.resources.HumanEyeFragment; +import com.buildmlearn.labeldiagram.resources.HumanHeartFragment; +import com.buildmlearn.labeldiagram.resources.LensFragment; +import com.buildmlearn.labeldiagram.resources.MotorFragment; +import com.buildmlearn.labeldiagram.resources.PrismFragment; +import com.example.labelthediagram.R; + +import android.app.ActionBar; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.ViewPager; + +public class DiagramMenuElectricity extends FragmentActivity { + + FragmentPagerAdapter adapterViewPager; + static float scoreMotor; + static float scoreDryCell; + static float scoreCircuit; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.diagram_menu); + + ViewPager vpPager = (ViewPager) findViewById(R.id.diagrampager); + adapterViewPager = new HumanBodyPagerAdapter( + getSupportFragmentManager()); + vpPager.setAdapter(adapterViewPager); + vpPager.setClipToPadding(false); + vpPager.setPageMargin(20); + + ActionBar actionBar = getActionBar(); + actionBar.setTitle("Diagram Menu"); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.show(); + + HelperClass.setActionBar("Diagram Menu", this); + + SharedPreferences pref = getApplicationContext().getSharedPreferences( + "com.buildmlearn.labeldiagram.PREFERENCE_FILE_KEY", + Context.MODE_PRIVATE); + scoreMotor = pref.getFloat("Motor", 0); + scoreDryCell = pref.getFloat("DryCell", 0); + scoreCircuit = pref.getFloat("Circuit", 0); + } + + public static class HumanBodyPagerAdapter extends FragmentPagerAdapter { + + private String[] pageTitles = new String[] { "Electric Motor", + "Dry Cell", "Electric Circuit" }; + public static int NUM_ITEMS = 3; + + public HumanBodyPagerAdapter(FragmentManager fragmentManager) { + super(fragmentManager); + + } + + @Override + public int getCount() { + return NUM_ITEMS; + } + + @Override + public Fragment getItem(int position) { + + Bundle bundle=new Bundle(); + + switch (position) { + case 0: + MotorFragment motorFrag = new MotorFragment(); + bundle.putFloat("SCORE_SAVED", scoreMotor); + motorFrag.setArguments(bundle); + return motorFrag; + case 1: + DryCellFragment cellFrag = new DryCellFragment(); + bundle.putFloat("SCORE_SAVED", scoreDryCell); + cellFrag.setArguments(bundle); + return cellFrag; + case 2: + CircuitFragment circuitFrag = new CircuitFragment(); + bundle.putFloat("SCORE_SAVED", scoreCircuit); + circuitFrag.setArguments(bundle); + return circuitFrag; + default: + return null; + } + } + + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + + @Override + public float getPageWidth(int position) { + return 1.0f; + } + + } +} \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuHuman.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuHuman.java new file mode 100644 index 00000000..4b5a83c7 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuHuman.java @@ -0,0 +1,104 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.resources.HumanEarFragment; +import com.buildmlearn.labeldiagram.resources.HumanEyeFragment; +import com.buildmlearn.labeldiagram.resources.HumanHeartFragment; +import com.example.labelthediagram.R; + +import android.app.ActionBar; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.ViewPager; + +public class DiagramMenuHuman extends FragmentActivity { + + FragmentPagerAdapter adapterViewPager; + static float scoreHumanEye; + static float scoreHumanHeart; + static float scoreHumanEar; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.diagram_menu); + + ViewPager vpPager = (ViewPager) findViewById(R.id.diagrampager); + adapterViewPager = new HumanBodyPagerAdapter( + getSupportFragmentManager()); + vpPager.setAdapter(adapterViewPager); + vpPager.setClipToPadding(false); + vpPager.setPageMargin(20); + + ActionBar actionBar = getActionBar(); + actionBar.setTitle("Diagram Menu"); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.show(); + + SharedPreferences pref = getApplicationContext().getSharedPreferences( + "com.buildmlearn.labeldiagram.PREFERENCE_FILE_KEY", + Context.MODE_PRIVATE); + scoreHumanEye = pref.getFloat("HumanEye", 0); + scoreHumanHeart = pref.getFloat("HumanHeart", 0); + scoreHumanEar = pref.getFloat("HumanEar", 0); + } + + public static class HumanBodyPagerAdapter extends FragmentPagerAdapter { + + private String[] pageTitles = new String[] { "Human Eye", + "Human Heart", "Human Ear" }; + public static int NUM_ITEMS = 3; + + public HumanBodyPagerAdapter(FragmentManager fragmentManager) { + super(fragmentManager); + + } + + @Override + public int getCount() { + return NUM_ITEMS; + } + + @Override + public Fragment getItem(int position) { + + Bundle bundle=new Bundle(); + + switch (position) { + case 0: + HumanEyeFragment eyeFrag = new HumanEyeFragment(); + bundle.putFloat("SCORE_SAVED", scoreHumanEye); + eyeFrag.setArguments(bundle); + return eyeFrag; + case 1: + HumanHeartFragment heartFrag = new HumanHeartFragment(); + bundle.putFloat("SCORE_SAVED", scoreHumanHeart); + heartFrag.setArguments(bundle); + return heartFrag; + case 2: + HumanEarFragment earFrag = new HumanEarFragment(); + bundle.putFloat("SCORE_SAVED", scoreHumanEar); + earFrag.setArguments(bundle); + return earFrag; + default: + return null; + } + } + + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + + @Override + public float getPageWidth(int position) { + return 1.0f; + } + + } +} \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuMicroogranisms.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuMicroogranisms.java new file mode 100644 index 00000000..0cad8779 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuMicroogranisms.java @@ -0,0 +1,105 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.resources.BacteriaFragment; +import com.buildmlearn.labeldiagram.resources.VirusFragment; +import com.example.labelthediagram.R; + +import android.app.ActionBar; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.ViewPager; + +public class DiagramMenuMicroogranisms extends FragmentActivity { + + FragmentPagerAdapter adapterViewPager; + static float bacteria=0; + static float virus=0; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.diagram_menu); + + ViewPager vpPager = (ViewPager) findViewById(R.id.diagrampager); + adapterViewPager = new BacteriaAdapter( + getSupportFragmentManager()); + vpPager.setAdapter(adapterViewPager); + vpPager.setClipToPadding(false); + vpPager.setPageMargin(20); + + ActionBar actionBar = getActionBar(); + actionBar.setTitle("Diagram Menu"); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.show(); + + SharedPreferences pref = getApplicationContext().getSharedPreferences( + "com.buildmlearn.labeldiagram.PREFERENCE_FILE_KEY", + Context.MODE_PRIVATE); + bacteria = pref.getFloat("Bacteria", 0); + virus = pref.getFloat("Virus", 0); + + } + + public static class BacteriaAdapter extends FragmentPagerAdapter { + + private String[] pageTitles = new String[] { "Bacteria", + "Virus" }; + + public static int NUM_ITEMS = 2; + + public BacteriaAdapter(FragmentManager fragmentManager) { + super(fragmentManager); + } + + @Override + public int getCount() { + return NUM_ITEMS; + } + + @Override + public Fragment getItem(int position) { + + Bundle bundle = new Bundle(); + + switch (position) { + case 0: + + BacteriaFragment bacteriaFrag = new BacteriaFragment(); + bundle.putFloat("SCORE_SAVED", bacteria); + bacteriaFrag.setArguments(bundle); + return bacteriaFrag; + + case 1: + + VirusFragment virusFrag = new VirusFragment(); + bundle.putFloat("SCORE_SAVED", virus); + virusFrag.setArguments(bundle); + return virusFrag; + + + default: + return null; + } + } + + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + + @Override + public float getPageWidth(int position) { + return 1.0f; + } + + } + + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuNaturalCycles.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuNaturalCycles.java new file mode 100644 index 00000000..bc0da7c7 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuNaturalCycles.java @@ -0,0 +1,106 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.resources.CarbonCycleFragment; +import com.buildmlearn.labeldiagram.resources.WaterCycleFragment; +import com.example.labelthediagram.R; + +import android.app.ActionBar; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.ViewPager; + +public class DiagramMenuNaturalCycles extends FragmentActivity{ + + FragmentPagerAdapter adapterViewPager; + static float waterCycle=0; + static float carbonCycle=0; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.diagram_menu); + + ViewPager vpPager = (ViewPager) findViewById(R.id.diagrampager); + adapterViewPager = new WaterCycleAdapter( + getSupportFragmentManager()); + vpPager.setAdapter(adapterViewPager); + vpPager.setClipToPadding(false); + vpPager.setPageMargin(20); + + ActionBar actionBar = getActionBar(); + actionBar.setTitle("Diagram Menu"); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.show(); + + SharedPreferences pref = getApplicationContext().getSharedPreferences( + "com.buildmlearn.labeldiagram.PREFERENCE_FILE_KEY", + Context.MODE_PRIVATE); + waterCycle = pref.getFloat("WaterCycle", 0); + carbonCycle = pref.getFloat("CarbonCycle", 0); + + } + + public static class WaterCycleAdapter extends FragmentPagerAdapter { + + private String[] pageTitles = new String[] { "Water Cycle", + "Carbon Cycle" }; + + public static int NUM_ITEMS = 2; + + public WaterCycleAdapter(FragmentManager fragmentManager) { + super(fragmentManager); + } + + @Override + public int getCount() { + return NUM_ITEMS; + } + + @Override + public Fragment getItem(int position) { + + Bundle bundle = new Bundle(); + + switch (position) { + case 0: + + WaterCycleFragment watercycFrag = new WaterCycleFragment(); + bundle.putFloat("SCORE_SAVED", waterCycle); + watercycFrag.setArguments(bundle); + return watercycFrag; + + case 1: + + CarbonCycleFragment carboncycFrag = new CarbonCycleFragment(); + bundle.putFloat("SCORE_SAVED", carbonCycle); + carboncycFrag.setArguments(bundle); + return carboncycFrag; + + + default: + return null; + } + } + + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + + @Override + public float getPageWidth(int position) { + return 1.0f; + } + + } + + + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuOptics.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuOptics.java new file mode 100644 index 00000000..00619565 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuOptics.java @@ -0,0 +1,110 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.HumanEarFragment; +import com.buildmlearn.labeldiagram.resources.HumanEyeFragment; +import com.buildmlearn.labeldiagram.resources.HumanHeartFragment; +import com.buildmlearn.labeldiagram.resources.LensFragment; +import com.buildmlearn.labeldiagram.resources.PrismFragment; +import com.buildmlearn.labeldiagram.resources.SpectrumFragment; +import com.example.labelthediagram.R; + +import android.app.ActionBar; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.ViewPager; + +public class DiagramMenuOptics extends FragmentActivity { + + FragmentPagerAdapter adapterViewPager; + static float scorePrism; + static float scoreLens; + static float scoreSpectrum; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.diagram_menu); + + ViewPager vpPager = (ViewPager) findViewById(R.id.diagrampager); + adapterViewPager = new HumanBodyPagerAdapter( + getSupportFragmentManager()); + vpPager.setAdapter(adapterViewPager); + vpPager.setClipToPadding(false); + vpPager.setPageMargin(20); + + ActionBar actionBar = getActionBar(); + actionBar.setTitle("Diagram Menu"); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.show(); + + HelperClass.setActionBar("Diagram Menu", this); + + SharedPreferences pref = getApplicationContext().getSharedPreferences( + "com.buildmlearn.labeldiagram.PREFERENCE_FILE_KEY", + Context.MODE_PRIVATE); + scorePrism = pref.getFloat("Prism", 0); + scoreLens = pref.getFloat("Lens", 0); + scoreSpectrum = pref.getFloat("Spectrum", 0); + } + + public static class HumanBodyPagerAdapter extends FragmentPagerAdapter { + + private String[] pageTitles = new String[] { "Refraction of Prism", + "Refraction of Lens", "Light Spectrum" }; + public static int NUM_ITEMS = 3; + + public HumanBodyPagerAdapter(FragmentManager fragmentManager) { + super(fragmentManager); + + } + + @Override + public int getCount() { + return NUM_ITEMS; + } + + @Override + public Fragment getItem(int position) { + + Bundle bundle=new Bundle(); + + switch (position) { + case 0: + PrismFragment prismFrag = new PrismFragment(); + bundle.putFloat("SCORE_SAVED", scorePrism); + prismFrag.setArguments(bundle); + return prismFrag; + case 1: + LensFragment lensFrag = new LensFragment(); + bundle.putFloat("SCORE_SAVED", scoreLens); + lensFrag.setArguments(bundle); + return lensFrag; + case 2: + SpectrumFragment spectrumFrag = new SpectrumFragment(); + bundle.putFloat("SCORE_SAVED", scoreSpectrum); + spectrumFrag.setArguments(bundle); + return spectrumFrag; + default: + return null; + } + } + + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + + @Override + public float getPageWidth(int position) { + return 1.0f; + } + + } +} \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuPlants.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuPlants.java new file mode 100644 index 00000000..6ec83591 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuPlants.java @@ -0,0 +1,103 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.resources.PlantCellFragment; +import com.buildmlearn.labeldiagram.resources.PlantFlowerFragment; +import com.example.labelthediagram.R; + +import android.app.ActionBar; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.ViewPager; + +public class DiagramMenuPlants extends FragmentActivity { + + FragmentPagerAdapter adapterViewPager; + static float plantCell=0; + static float plantFlower=0; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.diagram_menu); + + ViewPager vpPager = (ViewPager) findViewById(R.id.diagrampager); + adapterViewPager = new PlantPagerAdapter( + getSupportFragmentManager()); + vpPager.setAdapter(adapterViewPager); + vpPager.setClipToPadding(false); + vpPager.setPageMargin(20); + + ActionBar actionBar = getActionBar(); + actionBar.setTitle("Diagram Menu"); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.show(); + + SharedPreferences pref = getApplicationContext().getSharedPreferences( + "com.buildmlearn.labeldiagram.PREFERENCE_FILE_KEY", + Context.MODE_PRIVATE); + plantCell = pref.getFloat("PlantCell", 0); + plantFlower = pref.getFloat("PlantFlower", 0); + + } + + public static class PlantPagerAdapter extends FragmentPagerAdapter { + + private String[] pageTitles = new String[] { "Plant Cell", + "Plant Flower" }; + + public static int NUM_ITEMS = 2; + + public PlantPagerAdapter(FragmentManager fragmentManager) { + super(fragmentManager); + } + + @Override + public int getCount() { + return NUM_ITEMS; + } + + @Override + public Fragment getItem(int position) { + + Bundle bundle = new Bundle(); + + switch (position) { + case 0: + + PlantCellFragment cellFrag = new PlantCellFragment(); + bundle.putFloat("SCORE_SAVED", plantCell); + cellFrag.setArguments(bundle); + return cellFrag; + + case 1: + + PlantFlowerFragment flowerFrag = new PlantFlowerFragment(); + bundle.putFloat("SCORE_SAVED", plantFlower); + flowerFrag.setArguments(bundle); + return flowerFrag; + + + default: + return null; + } + } + + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + + @Override + public float getPageWidth(int position) { + return 1.0f; + } + + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuSky.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuSky.java new file mode 100644 index 00000000..7e0e60b6 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramMenuSky.java @@ -0,0 +1,108 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.CircuitFragment; +import com.buildmlearn.labeldiagram.resources.DryCellFragment; +import com.buildmlearn.labeldiagram.resources.HumanEarFragment; +import com.buildmlearn.labeldiagram.resources.HumanEyeFragment; +import com.buildmlearn.labeldiagram.resources.HumanHeartFragment; +import com.buildmlearn.labeldiagram.resources.LensFragment; +import com.buildmlearn.labeldiagram.resources.MotorFragment; +import com.buildmlearn.labeldiagram.resources.PrismFragment; +import com.buildmlearn.labeldiagram.resources.SolarSystemFragment; +import com.buildmlearn.labeldiagram.resources.StarPatternsFragment; +import com.example.labelthediagram.R; + +import android.app.ActionBar; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.ViewPager; + +public class DiagramMenuSky extends FragmentActivity { + + FragmentPagerAdapter adapterViewPager; + static float scoreSolarSystem; + static float scoreStarPattern; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.diagram_menu); + + ViewPager vpPager = (ViewPager) findViewById(R.id.diagrampager); + adapterViewPager = new SolarSystemPagerAdapter( + getSupportFragmentManager()); + vpPager.setAdapter(adapterViewPager); + vpPager.setClipToPadding(false); + vpPager.setPageMargin(20); + + ActionBar actionBar = getActionBar(); + actionBar.setTitle("Diagram Menu"); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.show(); + + HelperClass.setActionBar("Diagram Menu", this); + + SharedPreferences pref = getApplicationContext().getSharedPreferences( + "com.buildmlearn.labeldiagram.PREFERENCE_FILE_KEY", + Context.MODE_PRIVATE); + scoreSolarSystem = pref.getFloat("SolarSystem", 0); + scoreStarPattern = pref.getFloat("StarPatterns", 0); + + } + + public static class SolarSystemPagerAdapter extends FragmentPagerAdapter { + + private String[] pageTitles = new String[] { "Solar System", + "Star Patterns" }; + public static int NUM_ITEMS = 2; + + public SolarSystemPagerAdapter(FragmentManager fragmentManager) { + super(fragmentManager); + + } + + @Override + public int getCount() { + return NUM_ITEMS; + } + + @Override + public Fragment getItem(int position) { + + Bundle bundle = new Bundle(); + + switch (position) { + case 0: + SolarSystemFragment solarFrag = new SolarSystemFragment(); + bundle.putFloat("SCORE_SAVED", scoreSolarSystem); + solarFrag.setArguments(bundle); + return solarFrag; + case 1: + StarPatternsFragment starFrag = new StarPatternsFragment(); + bundle.putFloat("SCORE_SAVED", scoreStarPattern); + starFrag.setArguments(bundle); + return starFrag; + default: + return null; + } + } + + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + + @Override + public float getPageWidth(int position) { + return 1.0f; + } + + } +} \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlay.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlay.java new file mode 100644 index 00000000..720a4dc5 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlay.java @@ -0,0 +1,493 @@ +package com.buildmlearn.labeldiagram; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.PlaceHolderContainer; +import com.buildmlearn.labeldiagram.helper.TagContainerSingleton; +import com.buildmlearn.labeldiagram.helper.TagPlaceholderMapper; +import com.buildmlearn.labeldiagram.tooltipkit.InfoTooltip; +import com.buildmlearn.labeldiagram.tooltipkit.CustomTooltip.AlignMode; +import com.example.labelthediagram.R; + +import android.app.ActionBar; +import android.app.Activity; +import android.content.ClipData; +import android.content.ClipDescription; +import android.content.Intent; +import android.graphics.Canvas; +import android.graphics.Point; +import android.graphics.Typeface; +import android.os.Bundle; +import android.os.Handler; +import android.util.Log; +import android.util.SparseIntArray; +import android.view.DragEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnDragListener; +import android.view.View.OnLongClickListener; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +/** + * This class is for handle DiagramPlay activity of Human Eye diagram + * + * @author Akilaz + * + */ +public class DiagramPlay extends Activity implements OnDragListener, + OnLongClickListener, OnClickListener { + + private static final String TAG = "InfoTag"; + private static final String TAG_ERROR = "Error"; + private List placeHolderlist = new ArrayList(); + private SparseIntArray tagPlaceHolderMap = new SparseIntArray(); + private List correctTagList = new ArrayList(); + private List incorrectTagList = new ArrayList(); + private int correctLabeledCount = 0; + private int totalLabeledCount = 0; + private int tagListSize = 0; + private TextView compeleteRatio; + private TextView score; + + @Override + protected void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + setContentView(R.layout.diagram_play_eye); + + // Enabling ActionBar + ActionBar actionBar = getActionBar(); + actionBar.setTitle("Human Eye"); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.show(); + + // Score board textViews + TextView completeTxt = (TextView) findViewById(R.id.complatedTxt); + compeleteRatio = (TextView) findViewById(R.id.complete_ratio); + TextView scoreTxt = (TextView) findViewById(R.id.scoreTxt); + score = (TextView) findViewById(R.id.score); + + Typeface tfThin = Typeface.createFromAsset(getAssets(), + "fonts/Roboto-Thin.ttf"); + Typeface.createFromAsset(getAssets(), + "fonts/Roboto-Light.ttf"); + + // Setting up font face to Roboto Light/Thin + completeTxt.setTypeface(tfThin); + scoreTxt.setTypeface(tfThin); + compeleteRatio.setTypeface(tfThin); + score.setTypeface(tfThin); + + // Placeholder imageViews + ImageView irisView = (ImageView) findViewById(R.id.pul_arteryBulb); + ImageView pupilView = (ImageView) findViewById(R.id.pupilBlb); + ImageView lensView = (ImageView) findViewById(R.id.lensBlb); + ImageView corneaView = (ImageView) findViewById(R.id.corneaBlb); + ImageView vitreousView = (ImageView) findViewById(R.id.vitreousBlb); + ImageView ciliaryView = (ImageView) findViewById(R.id.ciliaryBodyBlb); + ImageView nerveView = (ImageView) findViewById(R.id.opticNerveBlb); + ImageView blindspotView = (ImageView) findViewById(R.id.blindSpotBlb); + ImageView foveaView = (ImageView) findViewById(R.id.foveaBlb); + ImageView retinaView = (ImageView) findViewById(R.id.retinaBlb); + + // Draggable Tags imageViews + TextView irisTag = (TextView) findViewById(R.id.irisTag); + TextView pupilTag = (TextView) findViewById(R.id.pupilTag); + TextView lensTag = (TextView) findViewById(R.id.lensTag); + TextView corneaTag = (TextView) findViewById(R.id.corneaTag); + TextView vitreousTag = (TextView) findViewById(R.id.vitreousTag); + TextView ciliaryTag = (TextView) findViewById(R.id.ciliaryTag); + TextView nerveTag = (TextView) findViewById(R.id.nerveTag); + TextView blindspotTag = (TextView) findViewById(R.id.opticdiskTag); + TextView foveaTag = (TextView) findViewById(R.id.foveaTag); + TextView retinaTag = (TextView) findViewById(R.id.retinaTag); + + // Register draggable views to receive drag events + irisView.setOnDragListener(this); + pupilView.setOnDragListener(this); + lensView.setOnDragListener(this); + corneaView.setOnDragListener(this); + vitreousView.setOnDragListener(this); + ciliaryView.setOnDragListener(this); + nerveView.setOnDragListener(this); + blindspotView.setOnDragListener(this); + foveaView.setOnDragListener(this); + retinaView.setOnDragListener(this); + + // Register place holders to receive onLongclick events + irisTag.setOnLongClickListener(this); + pupilTag.setOnLongClickListener(this); + lensTag.setOnLongClickListener(this); + corneaTag.setOnLongClickListener(this); + vitreousTag.setOnLongClickListener(this); + ciliaryTag.setOnLongClickListener(this); + nerveTag.setOnLongClickListener(this); + blindspotTag.setOnLongClickListener(this); + foveaTag.setOnLongClickListener(this); + retinaTag.setOnLongClickListener(this); + + // Register place holders to receive onClick events + irisTag.setOnClickListener(this); + pupilTag.setOnClickListener(this); + lensTag.setOnClickListener(this); + corneaTag.setOnClickListener(this); + vitreousTag.setOnClickListener(this); + ciliaryTag.setOnClickListener(this); + nerveTag.setOnClickListener(this); + blindspotTag.setOnClickListener(this); + foveaTag.setOnClickListener(this); + retinaTag.setOnClickListener(this); + + PlaceHolderContainer container = new PlaceHolderContainer(); + placeHolderlist = container.diagramCaller("HumanEye"); + + TagPlaceholderMapper tagPlaceholdermapper = new TagPlaceholderMapper(); + tagPlaceHolderMap = tagPlaceholdermapper.diagramMapper("HumanEye"); + + tagListSize = tagPlaceHolderMap.size(); + } + + @Override + public boolean onLongClick(View textview) { + ClipData clipData = ClipData.newPlainText("", ""); + + View.DragShadowBuilder shadowBuilder = new TagDragShadowBuilder( + textview); + + // Start the drag - contains the data to be dragged, metadata for this + // data and callback for drawing shadow + + textview.startDrag(clipData, shadowBuilder, textview, 0); + // Dragging the shadow so make the view invisible + textview.setVisibility(View.INVISIBLE); + return true; + } + + @Override + public boolean onDrag(View droppableView, DragEvent event) { + + // Defines a variable to store the action type for the incoming event + final int action = event.getAction(); + final View draggedImageTag = (View) event.getLocalState(); + + // Handles each of the expected events + switch (action) { + + case DragEvent.ACTION_DRAG_STARTED: + + // Determines if the View can accept the dragged data + if (event.getClipDescription().hasMimeType( + ClipDescription.MIMETYPE_TEXT_PLAIN)) { + + Log.i(TAG, "Can accept this data"); + + // returns true to indicate that the View can accept the dragged + // data. + return true; + + } else { + Log.i(TAG, "Can not accept this data"); + + } + + return false; + + case DragEvent.ACTION_DRAG_ENTERED: + + Toast.makeText(getApplicationContext(), "Ready to drop !", + Toast.LENGTH_SHORT).show(); + Log.i(TAG, "drag action entered"); + return true; + + case DragEvent.ACTION_DRAG_LOCATION: + Log.i(TAG, "drag action location"); + // Ignore the event + return true; + + case DragEvent.ACTION_DRAG_EXITED: + Log.i(TAG, "drag action exited"); + // Calls when the Tag exited the place holder imageView + return true; + + case DragEvent.ACTION_DROP: + + boolean side; + Log.i(TAG, "drag action dropped"); + + // Set place holder imageViews invisible + droppableView.setVisibility(View.INVISIBLE); + + // Get the positioning side(within diagram) of the currently entered + // place holder + side = getPlaceHolderSide(droppableView); + + // If placeholder is on left side, set XY coordinates of the + // draggedImageTag to right top corner + if (side == true) { + draggedImageTag + .setX(droppableView.getX() + droppableView.getWidth() + - draggedImageTag.getWidth()); + draggedImageTag.setY(droppableView.getY()); + } + + // If placeholder is on right side, set XY coordinates of the + // draggedImageTag to left top corner + else if (side == false) { + draggedImageTag.setX(droppableView.getX()); + draggedImageTag.setY(droppableView.getY()); + } + + // Obtain the correct Tag id corresponding to place holder id + int desiredTagId = tagPlaceHolderMap.get(droppableView.getId()); + + // Get Tag id of currently moving tag + int currentTagId = draggedImageTag.getId(); + + if (currentTagId != desiredTagId) { + + incorrectTagList.add((TextView) draggedImageTag); + + // If currently moving tag id doesn't match actual tag id + // change the tag color to RED + draggedImageTag + .setBackgroundResource(R.drawable.custom_textview_incorrect); + + totalLabeledCount += 1; + + // Update score and progress + updateProgress(correctLabeledCount, totalLabeledCount); + + } else if (currentTagId == desiredTagId) { + + correctTagList.add((TextView) draggedImageTag); + + // If currently moving tag id does match, actual tag id change + // the tag color to light greenS + draggedImageTag + .setBackgroundResource(R.drawable.custom_textview_correct); + + totalLabeledCount += 1; + correctLabeledCount += 1; + + // Update score and progress + updateProgress(correctLabeledCount, totalLabeledCount); + } + + draggedImageTag.setVisibility(View.VISIBLE); + return true; + + case DragEvent.ACTION_DRAG_ENDED: + + Log.i(TAG, "getResult: " + event.getResult()); + + // if the drop was not successful, set the tag to original place + if (!event.getResult()) { + draggedImageTag.post(new Runnable() { + + @Override + public void run() { + + Log.i(TAG, "setting visible"); + draggedImageTag.setVisibility(View.VISIBLE); + + } + }); + } + + return true; + + // An unknown action type was received. + default: + Log.e("DragDrop Example", + "Unknown action type received by OnDragListener."); + break; + } + + return true; + + } + + /** + * Update score and progress + * + * @param correcTries + * @param totalTries + */ + private void updateProgress(int correcTries, int totalTries) { + + final float progress; + final float totalScore; + final int MAX_PROGRESS = 100; + + totalScore = (float) correcTries / tagListSize * 100; + progress = (float) totalTries / tagListSize * 100; + + score.setText((int) totalScore + "%"); + compeleteRatio.setText((int) progress + "%"); + + if ((int) progress == MAX_PROGRESS) { + + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + + // Initialize singleton class + TagContainerSingleton container = TagContainerSingleton + .getInstance(); + + // set correct and incorrect tag lists + container.setCorrectLabelList(correctTagList); + container.setIncorrectLabelList(incorrectTagList); + + Intent intent = new Intent(getApplicationContext(), + DiagramResult.class); + intent.putExtra("SCORE", totalScore); + startActivity(intent); + + } + }, 3000); + + } + + } + + /** + * Indicate whether the placeholder is on left side or right side of the + * diagram + * + * @param droppableView + * @return + */ + private boolean getPlaceHolderSide(View droppableView) { + + boolean isOnLeftSide = false; + + // Check whether the place holder(droppableView) is in left side + if (Arrays.asList(placeHolderlist.get(0)).contains( + (Integer) droppableView.getId())) { + + isOnLeftSide = true; + + } + // Check whether the place holder(droppableView) is in right side + else if (Arrays.asList(placeHolderlist.get(1)).contains( + droppableView.getId())) { + + isOnLeftSide = false; + + } else { + Log.e(TAG_ERROR, + "Position is undefined of the place holder imageView !"); + } + + return isOnLeftSide; + } + + /** + * Helper class for generating drag shadow + */ + private static class TagDragShadowBuilder extends View.DragShadowBuilder { + + // Defines the constructor for TagDragShadowBuilder + public TagDragShadowBuilder(View v) { + + // Stores the View parameter passed to TagDragShadowBuilder. + super(v); + + } + + /* + * Defines a callback that sends the drag shadow dimensions and touch + * point back to the system. + */ + @Override + public void onProvideShadowMetrics(Point size, Point touch) { + + int width; + int height; + + // Sets the width of the shadow with respect to original View + width = (getView().getWidth()) * 3; + + // Sets the height of the shadow with respect to original View + height = (getView().getHeight()) * 3; + + // Sets the size parameter's width and height values. These get back + // to the system through the size parameter. + size.set(width, height); + + // Sets the touch point's position to the middle point visual + // clarity + touch.set((width / 4), (height / 4)); + } + + /* + * Defines a callback that draws the drag shadow in a Canvas that the + * system constructs from the dimensions passed in + * onProvideShadowMetrics(). + */ + @Override + public void onDrawShadow(Canvas canvas) { + + // Draws the ColorDrawable in the Canvas passed in from the system. + // Scale the canvas 1.5x + canvas.scale(1.5f, 1.5f); + getView().draw(canvas); + } + } + + @Override + public void onClick(View tagView) { + // TODO Extract messages to separate container + switch (tagView.getId()) { + case R.id.irisTag: + InfoTooltip popup = new InfoTooltip(getApplicationContext(), "Iris has spesialized muscles that \n changes the size of the pupil "); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.pupilTag: + InfoTooltip popup1 = new InfoTooltip(getApplicationContext(), "A round opening of the center of the iris."); + popup1.show(tagView, AlignMode.BOTTOM); + break; + case R.id.lensTag: + InfoTooltip popup2 = new InfoTooltip(getApplicationContext(), "Attached to muscles which contract or\n relax inorder to change the lens shape. "); + popup2.show(tagView, AlignMode.BOTTOM); + break; + case R.id.corneaTag: + InfoTooltip popup3 = new InfoTooltip(getApplicationContext(), "Light first passes through cornea \n Let light comes into the eye "); + popup3.show(tagView, AlignMode.BOTTOM); + break; + case R.id.vitreousTag: + InfoTooltip popup4 = new InfoTooltip(getApplicationContext(), "back portion of the eye that is filled\n with a clear, jelly-like substance "); + popup4.show(tagView, AlignMode.BOTTOM); + break; + case R.id.ciliaryTag: + InfoTooltip popup5 = new InfoTooltip(getApplicationContext(), " part of the eye that includes the ciliary muscle,\n which controls the shape of the lens "); + popup5.show(tagView, AlignMode.BOTTOM); + break; + case R.id.nerveTag: + InfoTooltip popup6 = new InfoTooltip(getApplicationContext(), "nerve that transmits visual information \n from the retina to the brain. "); + popup6.show(tagView, AlignMode.BOTTOM); + break; + case R.id.opticdiskTag: + InfoTooltip popup7 = new InfoTooltip(getApplicationContext(), "The most sensitive place of the eye to light rays "); + popup7.show(tagView, AlignMode.BOTTOM); + break; + case R.id.foveaTag: + InfoTooltip popup8 = new InfoTooltip(getApplicationContext(), "The place of the eye that not sensitive to light "); + popup8.show(tagView, AlignMode.BOTTOM); + break; + case R.id.retinaTag: + InfoTooltip popup9 = new InfoTooltip(getApplicationContext(), "The light finally reaches the retina where \n rod and cone cells are stimulated \n converting the light to electrical impulese."); + popup9.show(tagView, AlignMode.BOTTOM); + break; + default: + break; + } + } + +} \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayBacteria.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayBacteria.java new file mode 100644 index 00000000..dc9c7774 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayBacteria.java @@ -0,0 +1,253 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.buildmlearn.labeldiagram.tooltipkit.InfoTooltip; +import com.buildmlearn.labeldiagram.tooltipkit.CustomTooltip.AlignMode; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +public class DiagramPlayBacteria extends DiagramPlayBase { + + @Override + public void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + actionBar.setTitle("Bacteria"); + setDiagramName("Bacteria"); + setDiagramCategory("Biology"); + + // Score board textViews + TextView completeTxt = (TextView) findViewById(R.id.complatedTxt); + compeleteRatio = (TextView) findViewById(R.id.complete_ratio); + TextView scoreTxt = (TextView) findViewById(R.id.scoreTxt); + score = (TextView) findViewById(R.id.score); + + // Setting up font face to Roboto Light/Thin + completeTxt.setTypeface(tfThin); + scoreTxt.setTypeface(tfThin); + compeleteRatio.setTypeface(tfThin); + score.setTypeface(tfThin); + + // Placeholder imageViews + ImageView chromosomeView = (ImageView) findViewById(R.id.chromosomeBlb); + ImageView ribosomeView = (ImageView) findViewById(R.id.ribosomesBlb); + ImageView foodGranuleView = (ImageView) findViewById(R.id.food_granuleBlb); + ImageView piliView = (ImageView) findViewById(R.id.piliBlb); + ImageView flagellumView = (ImageView) findViewById(R.id.flagellumBlb); + ImageView plasmidView = (ImageView) findViewById(R.id.plasmidBlb); + ImageView capsuleView = (ImageView) findViewById(R.id.capsuleBlb); + ImageView cellwallView = (ImageView) findViewById(R.id.cellwallBlb); + ImageView cytoplasmView = (ImageView) findViewById(R.id.cytoplasmBlb); + ImageView plasmaMembraneView = (ImageView) findViewById(R.id.plasma_membraneBlb); + + // Draggable Tags imageViews + TextView chromosomeTag = (TextView) findViewById(R.id.chromosomeTag); + TextView ribosomesTag = (TextView) findViewById(R.id.ribosomesTag); + TextView foodGranuleTag = (TextView) findViewById(R.id.food_granuleTag); + TextView piliTag = (TextView) findViewById(R.id.piliTag); + TextView flagellumTag = (TextView) findViewById(R.id.flagellumTag); + TextView plasmidTag = (TextView) findViewById(R.id.plasmidTag); + TextView capsuleTag = (TextView) findViewById(R.id.capsuleTag); + TextView cellwallTag = (TextView) findViewById(R.id.cellwallTag); + TextView cytoplasmTag = (TextView) findViewById(R.id.cytoplasmTag); + TextView plasmeMembraneTag = (TextView) findViewById(R.id.plasma_membraneTag); + + + // Register draggable views to receive drag events + chromosomeView.setOnDragListener(this); + ribosomeView.setOnDragListener(this); + foodGranuleView.setOnDragListener(this); + piliView.setOnDragListener(this); + flagellumView.setOnDragListener(this); + plasmidView.setOnDragListener(this); + capsuleView.setOnDragListener(this); + cellwallView.setOnDragListener(this); + cytoplasmView.setOnDragListener(this); + plasmaMembraneView.setOnDragListener(this); + + + // Register place holders to receive onLongclick events + chromosomeTag.setOnLongClickListener(this); + ribosomesTag.setOnLongClickListener(this); + foodGranuleTag.setOnLongClickListener(this); + piliTag.setOnLongClickListener(this); + flagellumTag.setOnLongClickListener(this); + plasmidTag.setOnLongClickListener(this); + capsuleTag.setOnLongClickListener(this); + cellwallTag.setOnLongClickListener(this); + cytoplasmTag.setOnLongClickListener(this); + plasmeMembraneTag.setOnLongClickListener(this); + + + // Register place holders to receive onClick events + chromosomeTag.setOnClickListener(this); + ribosomesTag.setOnClickListener(this); + foodGranuleTag.setOnClickListener(this); + piliTag.setOnClickListener(this); + flagellumTag.setOnClickListener(this); + plasmidTag.setOnClickListener(this); + capsuleTag.setOnClickListener(this); + cellwallTag.setOnClickListener(this); + cytoplasmTag.setOnClickListener(this); + plasmeMembraneTag.setOnClickListener(this); + + placeHolderlist = container.diagramCaller("Bacteria"); + tagPlaceHolderMap = tagPlaceholdermapper.diagramMapper("Bacteria"); + incompleteTagList = tagPlaceholdermapper.diagramMapper("Bacteria"); + tagListSize = tagPlaceHolderMap.size(); + + openDB(); + + } + + @Override + public void onClick(View tagView) { + // TODO Extract messages to separate container + switch (tagView.getId()) { + case R.id.chromosomeTag: + InfoTooltip popup = new InfoTooltip(getApplicationContext(), + "This is situated within nucleoid region \n" + + "and contain a circular DNA molecule"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.ribosomesTag: + InfoTooltip popup1 = new InfoTooltip(getApplicationContext(), + "Structures that assemble proteins "); + popup1.show(tagView, AlignMode.BOTTOM); + break; + case R.id.food_granuleTag: + InfoTooltip popup2 = new InfoTooltip(getApplicationContext(), + "They occur as small granules of lipids or glycogen\n" + + " held in sacs formed from lipid membrane"); + popup2.show(tagView, AlignMode.BOTTOM); + break; + case R.id.piliTag: + InfoTooltip popup3 = new InfoTooltip(getApplicationContext(), + "Short, thin, straight, hair like projections form surface "); + popup3.show(tagView, AlignMode.BOTTOM); + break; + case R.id.flagellumTag: + InfoTooltip popup4 = new InfoTooltip(getApplicationContext(), + "This is a lash-like appendage that begins\n" + + " from the cell body which is important for locomotion"); + popup4.show(tagView, AlignMode.BOTTOM); + break; + case R.id.plasmidTag: + InfoTooltip popup5 = new InfoTooltip( + getApplicationContext(), + "Located in cytosol of bacterial cells which\n" + + " contains supplemental genetic information"); + popup5.show(tagView, AlignMode.BOTTOM); + break; + case R.id.capsuleTag: + InfoTooltip popup6 = new InfoTooltip(getApplicationContext(), + "A layer that lies outside the cell envelope\n" + + "of bacteria which can be the cause of \n" + + "various diseases"); + popup6.show(tagView, AlignMode.BOTTOM); + break; + case R.id.cellwallTag: + InfoTooltip popup7 = new InfoTooltip(getApplicationContext(), + "This protects the cell from shock,\n " + + "physical damage,confers rigidity \n" + + "and shape of bacterial cells "); + popup7.show(tagView, AlignMode.BOTTOM); + break; + case R.id.cytoplasmTag: + InfoTooltip popup8 = new InfoTooltip(getApplicationContext(), + "The fluid (cytosol) and all its dissolved\n" + + " particles is called the cytoplasm of the cell"); + + popup8.show(tagView, AlignMode.BOTTOM); + break; + case R.id.plasma_membraneTag: + InfoTooltip popup9 = new InfoTooltip(getApplicationContext(), + "This is a biological membrane that separates\n" + + " the interior of all cells from the outside environment "); + popup9.show(tagView, AlignMode.BOTTOM); + break; + default: + break; + } + } + + + @Override + protected int getResourcesId() { + // TODO Auto-generated method stub + return R.layout.diagram_play_bacteria; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // TODO Auto-generated method stub + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_done: + quitPlay(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private void quitPlay() { + + super.dialogBuilder(DiagramPlayBacteria.this); + + } + + @Override + protected void dispatch(float totalScore, int gameScore) { + Intent intent = new Intent(getBaseContext(), DiagramResult.class); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "Bacteria"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("TRY_CYCLE", tryCycle); + startActivity(intent); + } + + @Override + protected void intentBuilder(String badgeTitle, int badgeId, float totalScore, int gameScore, boolean completed, int tryCycle) { + Intent intent; + intent = new Intent(getBaseContext(), BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeTitle); + intent.putExtra("BADGE_ID", badgeId); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "Bacteria"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("COMPLETED", completed); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayBase.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayBase.java new file mode 100644 index 00000000..bd6e7392 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayBase.java @@ -0,0 +1,989 @@ +package com.buildmlearn.labeldiagram; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; + +import com.buildmlearn.labeldiagram.database.DBAdapter; +import com.buildmlearn.labeldiagram.database.Database; +import com.buildmlearn.labeldiagram.entity.Result; +import com.buildmlearn.labeldiagram.helper.PlaceHolderContainer; +import com.buildmlearn.labeldiagram.helper.TagContainerSingleton; +import com.buildmlearn.labeldiagram.helper.TagPlaceholderMapper; +import com.example.labelthediagram.R; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import android.app.ActionBar; +import android.app.Activity; +import android.app.Dialog; +import android.content.ClipData; +import android.content.ClipDescription; +import android.content.Context; +import android.content.SharedPreferences; +import android.database.Cursor; +import android.graphics.Canvas; +import android.graphics.Point; +import android.graphics.Typeface; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Handler; +import android.support.v4.app.NavUtils; +import android.util.Log; +import android.util.SparseIntArray; +import android.view.Display; +import android.view.DragEvent; +import android.view.MenuItem; +import android.view.View; +import android.view.Window; +import android.view.View.OnClickListener; +import android.view.View.OnDragListener; +import android.view.View.OnLongClickListener; +import android.widget.Button; +import android.widget.TextView; +import android.widget.Toast; + +/** + * @author Akilaz + * + */ +public abstract class DiagramPlayBase extends Activity implements + OnDragListener, OnLongClickListener, OnClickListener { + + static final String TAG = "InfoTag"; + static final String TAG_ERROR = "Error"; + static final String KEY_ACHIEVED = "isAchieved"; + static final String SOUND_SETTING = "sound"; + static final String NOTIFICATION_SETTING = "notification"; + static final int BIO_DIAGRAM_COUNT = 7; + static final int PHYSICS_DIAGRAM_COUNT = 6; + static final int SCIENCE_DIAGRAM_COUNT = 4; + static final int TOTAL_DIAGRAM_COUNT = 17; + static final int TOTAL_CATEGORY_COUNT = 3; + static final int TOTAL_COMPLETE_TRIES_COUNT = 2; + static final int MAX_ROWS_COUNT = 2; + static final int MAX_PREF_UPDATE_CYCLES = 4; + + List placeHolderlist; + SparseIntArray tagPlaceHolderMap; + SparseIntArray incompleteTagList; + List correctTagList; + List incorrectTagList; + PlaceHolderContainer container; + TagPlaceholderMapper tagPlaceholdermapper; + SharedPreferences preferences; + SharedPreferences.Editor editor; + DBAdapter diagramDb; + Database database; + + int correctLabeledCount = 0; + int totalLabeledCount = 0; + int tagListSize = 0; + int tryCycle; + int screenWidth; + int screenHeight; + boolean achievedBestScore = false; + String diagramName; + String diagramCategory; + String source; + TextView compeleteRatio; + TextView score; + ActionBar actionBar; + Typeface tfThin; + Typeface tfLight; + boolean isToDispatch = false; + + @Override + public void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + // Enabling ActionBar + actionBar = getActionBar(); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.show(); + + // Initializing custom fonts + tfThin = Typeface.createFromAsset(getAssets(), "fonts/Roboto-Thin.ttf"); + tfLight = Typeface.createFromAsset(getAssets(), + "fonts/Roboto-Light.ttf"); + + // Initializing object lists and classes + placeHolderlist = new ArrayList(); + tagPlaceHolderMap = new SparseIntArray(); + incompleteTagList = new SparseIntArray(); + correctTagList = new ArrayList(); + incorrectTagList = new ArrayList(); + container = new PlaceHolderContainer(); + tagPlaceholdermapper = new TagPlaceholderMapper(); + + tagListSize = tagPlaceHolderMap.size(); + + // Create SharedPreferences object + initPreferences(); + getIntentData(); + getDisplayDimensions(); + + } + + private void getDisplayDimensions() { + + Display display = getWindowManager().getDefaultDisplay(); + Point size = new Point(); + display.getSize(size); + screenWidth = size.x; + screenHeight = size.y; + + Log.i("Screen Size", "width : " + screenWidth + " height : " + + screenHeight); + + } + + private void getIntentData() { + + source = getIntent().getExtras().getString("SOURCE"); + tryCycle = getIntent().getExtras().getInt("TRY_CYCLE"); + + } + + private void initPreferences() { + preferences = getApplicationContext().getSharedPreferences( + "com.buildmlearn.labeldiagram.PREFERENCE_FILE_KEY", + Context.MODE_PRIVATE); + editor = preferences.edit(); + + } + + @Override + public boolean onLongClick(View textview) { + + ClipData clipData = ClipData.newPlainText("", ""); + + View.DragShadowBuilder shadowBuilder = new TagDragShadowBuilder( + textview); + + // Start the drag - contains the data to be dragged, metadata for this + // data and callback for drawing shadow + + textview.startDrag(clipData, shadowBuilder, textview, 0); + // Dragging the shadow so make the view invisible + textview.setVisibility(View.INVISIBLE); + return true; + } + + @Override + public boolean onDrag(View droppableView, DragEvent event) { + + // Defines a variable to store the action type for the incoming event + final int action = event.getAction(); + final View draggedImageTag = (View) event.getLocalState(); + + // Handles each of the expected events + switch (action) { + + case DragEvent.ACTION_DRAG_STARTED: + + // Determines if the View can accept the dragged data + if (event.getClipDescription().hasMimeType( + ClipDescription.MIMETYPE_TEXT_PLAIN)) { + + Log.i(TAG, "Can accept this data"); + + // returns true to indicate that the View can accept the dragged + // data. + return true; + + } else { + Log.i(TAG, "Can not accept this data"); + + } + + return false; + + case DragEvent.ACTION_DRAG_ENTERED: + + Toast.makeText(getApplicationContext(), "Ready to drop !", 20) + .show(); + Log.i(TAG, "drag action entered"); + return true; + + case DragEvent.ACTION_DRAG_LOCATION: + Log.i(TAG, "drag action location"); + // Ignore the event + return true; + + case DragEvent.ACTION_DRAG_EXITED: + Log.i(TAG, "drag action exited"); + // Calls when the Tag exited the place holder imageView + return true; + + case DragEvent.ACTION_DROP: + + boolean side; + Log.i(TAG, "drag action dropped"); + + // Set place holder imageViews invisible + droppableView.setVisibility(View.INVISIBLE); + + // Get the positioning side(within diagram) of the currently entered + // place holder + side = getPlaceHolderSide(droppableView); + + // If placeholder is on left side, set XY coordinates of the + // draggedImageTag to right top corner + if (side == true) { + + float posX = droppableView.getX() + droppableView.getWidth() + - draggedImageTag.getWidth(); + + // If the draggedImage left margin < 0, align + // the left margin to 0.0f + if (posX < 0.0) { + draggedImageTag.setX(0); + } else { + draggedImageTag.setX(droppableView.getX() + + droppableView.getWidth() + - draggedImageTag.getWidth()); + } + + draggedImageTag.setY(droppableView.getY()); + + } + + // If placeholder is on right side, set XY coordinates of the + // draggedImageTag to left top corner + else if (side == false) { + + float posX = droppableView.getX() + draggedImageTag.getWidth(); + float offset = posX - screenWidth; + + // If the draggedImage right margin > screen-width, + // set align the right margin to screen width + if(posX > screenWidth){ + draggedImageTag.setX(droppableView.getX()- offset); + }else{ + draggedImageTag.setX(droppableView.getX()); + } + + draggedImageTag.setY(droppableView.getY()); + } + + // Obtain the correct Tag id corresponding to place holder id + int desiredTagId = tagPlaceHolderMap.get(droppableView.getId()); + incompleteTagList.delete(droppableView.getId()); + // Get Tag id of currently moving tag + int currentTagId = draggedImageTag.getId(); + + if (currentTagId != desiredTagId) { + + incorrectTagList.add((TextView) draggedImageTag); + + // If currently moving tag id doesn't match actual tag id + // change the tag color to RED + draggedImageTag + .setBackgroundResource(R.drawable.custom_textview_incorrect); + + // Play wrong answer sound + playSound(false); + + // Unregister tag from OnLongClicklistener to avoid + // further dragging after a successful drop + draggedImageTag.setOnLongClickListener(null); + + totalLabeledCount += 1; + + // Update score and progress + updateProgress(correctLabeledCount, totalLabeledCount); + + } else if (currentTagId == desiredTagId) { + + correctTagList.add((TextView) draggedImageTag); + + // If currently moving tag id does match, actual tag id change + // the tag color to light greenS + draggedImageTag + .setBackgroundResource(R.drawable.custom_textview_correct); + + // Play right answer sound + playSound(true); + + // Unregister tag from OnLongClicklistener to avoid + // further dragging after a successful drop + draggedImageTag.setOnLongClickListener(null); + + totalLabeledCount += 1; + correctLabeledCount += 1; + + // Update score and progress + updateProgress(correctLabeledCount, totalLabeledCount); + } + + draggedImageTag.setVisibility(View.VISIBLE); + return true; + + case DragEvent.ACTION_DRAG_ENDED: + + Log.i(TAG, "getResult: " + event.getResult()); + + // if the drop was not successful, set the tag to original place + if (!event.getResult()) { + draggedImageTag.post(new Runnable() { + + @Override + public void run() { + + Log.i(TAG, "setting visible"); + draggedImageTag.setVisibility(View.VISIBLE); + + } + }); + } + + return true; + + // An unknown action type was received. + default: + Log.e("DragDrop Example", + "Unknown action type received by OnDragListener."); + break; + } + + return true; + } + + + /** + * Play sound for correct/incorrect answer + * @param soundOption + */ + private void playSound(boolean soundOption) { + + boolean isEnabled = preferences.getBoolean(SOUND_SETTING, false); + + if (isEnabled) { + + if (soundOption) { + + MediaPlayer correctSound = MediaPlayer.create( + getApplicationContext(), R.raw.correct); + correctSound.start(); + + } else { + + MediaPlayer wrongSound = MediaPlayer.create( + getApplicationContext(), R.raw.wrong); + wrongSound.start(); + + } + + } + } + + /** + * Update score and progress + * + * @param correcTries + * @param totalTries + */ + private void updateProgress(int correcTries, int totalTries) { + + final float progress; + final float totalScore; + final int MAX_PROGRESS = 100; + final int gameScore; + + totalScore = correcTries * 10; + progress = (float) totalTries / tagListSize * 100; + gameScore = tagListSize * 10; + + score.setText((int) totalScore + ""); + compeleteRatio.setText((int) progress + "%"); + + if ((int) progress == MAX_PROGRESS) { + + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + + // Initialize singleton class + TagContainerSingleton container = TagContainerSingleton + .getInstance(); + + // set correct and incorrect tag lists + container.setCorrectLabelList(correctTagList); + container.setIncorrectLabelList(incorrectTagList); + + float previousScore = preferences.getFloat( + getDiagramName(), 0); + if (previousScore <= totalScore) { + SharedPreferences.Editor editor = preferences.edit(); + editor.putFloat(getDiagramName(), totalScore); + editor.commit(); + achievedBestScore = true; + } + + saveResultForBadges(totalScore, gameScore); + + if (isToDispatch == false) { + dispatch(totalScore, gameScore); + } + + } + }, 3000); + + } + + } + + /** + * Update score and progress if quit playing without completing all the tags + * + */ + public void quitPlayUpdataProgress() { + + final float progress; + final float totalScore; + final int gameScore; + + totalScore = correctLabeledCount * 10; + progress = (float) totalLabeledCount / tagListSize * 100; + gameScore = tagListSize * 10; + + score.setText(Integer.toString((int) totalScore)); + compeleteRatio.setText((int) progress + "%"); + + TagContainerSingleton container = TagContainerSingleton.getInstance(); + + for (int i = 0; i < incompleteTagList.size(); i++) { + TextView incompleteView = (TextView) findViewById(incompleteTagList + .valueAt(i)); + incorrectTagList.add(incompleteView); + } + + container.setCorrectLabelList(correctTagList); + container.setIncorrectLabelList(incorrectTagList); + + float previousScore = preferences.getFloat(getDiagramName(), 0); + if (previousScore <= totalScore) { + SharedPreferences.Editor editor = preferences.edit(); + editor.putFloat(getDiagramName(), totalScore); + editor.commit(); + achievedBestScore = true; + } + + saveResultForBadges(totalScore, gameScore); + + if (isToDispatch == false) { + dispatch(totalScore, gameScore); + } + + } + + private void saveResultForBadges(float score, int gameScore) { + + initPreferences(); + generateBadges(score, gameScore); + + } + + private void generateBadges(float score, int gameScore) { + + if ((int) score < gameScore) { + + if (source.equals("Fragment")) { + tryCycle = 0; + } else if (source.equals("Result")) { + tryCycle = tryCycle + 1; + } + + } + + if ((int) score == gameScore) { + + generateGreatStreakBadge(score, gameScore); + + generatePersistanceBadge(score, gameScore); + + generateMasterBadges(score, gameScore); + + } + + } + + private void generateGreatStreakBadge(float score, int gameScore) { + + String key; + String badgeTitle; + int badgeId; + boolean allDiagramsCompleted; + Gson gson = new Gson(); + HashMap recordMap = new HashMap(); + + key = getResources().getString(R.string.fully_completed_tries_count); + + boolean isGreatStreakBadge = preferences.getBoolean(key, false); + + openDB(); + Cursor cursor = diagramDb.getFirstThreeScoreRows(); + + if (cursor.moveToFirst()) { + do { + String name = cursor.getString(DBAdapter.COL_DIAGRAM_NAME); + String result = cursor.getString(DBAdapter.COL_RESULT); + + Type type = new TypeToken() { + }.getType(); + Result resultObj = gson.fromJson(result, type); + + recordMap.put(resultObj.getDiagramName(), + resultObj.getCompleted()); + + } while (cursor.moveToNext()); + + } else { + Log.i("NULL RECORD SET", "No records yet"); + return; + } + + if (!isGreatStreakBadge) { + + if (recordMap.size() == MAX_ROWS_COUNT) { + + if (!recordMap.containsKey(getDiagramName())) { + + Collection val = recordMap.values(); + Boolean[] array = (Boolean[]) (val.toArray(new Boolean[val + .size()])); + int count = 0; + for (int i = 0; i < array.length; i++) { + if (array[i] == true) { + count += 1; + } + } + + if (count == MAX_ROWS_COUNT) { + + isToDispatch = true; + allDiagramsCompleted = false; + updateBoolPreferences(key); + + badgeTitle = getResources().getString( + R.string.badge_streak); + badgeId = R.drawable.streak; + + database.updateBadgeAchievement(badgeTitle, true); + + intentBuilder(badgeTitle, badgeId, score, gameScore, + allDiagramsCompleted, tryCycle); + } + + } + + } else { + return; + } + + } else { + return; + } + + } + + private void generateMasterBadges(float score, int gameScore) { + + String key; + String badgeTitle; + int keyValue; + int badgeId; + String mMasterBioBadge; + String mMasterPhysicsBadge; + String mMasterScienceBadge; + boolean allDiagramsCompleted = false; + + switch (diagramCategory) { + + case "Biology": + + key = getDiagramName().concat("Biology"); + keyValue = updateMasterPreferences(key, diagramCategory); + + mMasterBioBadge = "bioBadge"; + boolean isMasterBioBadge = preferences.getBoolean(mMasterBioBadge, + false); + + if (!isMasterBioBadge) { + + if (keyValue == BIO_DIAGRAM_COUNT) { + + isToDispatch = true; + updateBoolPreferences(mMasterBioBadge); + badgeTitle = getResources().getString( + R.string.badge_biology); + badgeId = R.drawable.bio; + + key = getResources().getString( + R.string.total_category_completed); + keyValue = updatePreferences(key); + + if (keyValue == TOTAL_CATEGORY_COUNT) { + + allDiagramsCompleted = true; + database.updateBadgeAchievement(badgeTitle, true); + intentBuilder(badgeTitle, badgeId, score, gameScore, + allDiagramsCompleted, tryCycle); + + } else { + + database.updateBadgeAchievement(badgeTitle, true); + intentBuilder(badgeTitle, badgeId, score, gameScore, + allDiagramsCompleted, tryCycle); + + } + + } + + } + + break; + + case "Physics": + + key = getDiagramName().concat("Physics"); + keyValue = updateMasterPreferences(key, diagramCategory); + + mMasterPhysicsBadge = "physicsBadge"; + boolean isMasterPhysicsBadge = preferences.getBoolean( + mMasterPhysicsBadge, false); + + if (!isMasterPhysicsBadge) { + + if (keyValue == PHYSICS_DIAGRAM_COUNT) { + + isToDispatch = true; + updateBoolPreferences(mMasterPhysicsBadge); + badgeTitle = getResources().getString( + R.string.badge_physics); + badgeId = R.drawable.physics; + + key = getResources().getString( + R.string.total_category_completed); + keyValue = updatePreferences(key); + + if (keyValue == TOTAL_CATEGORY_COUNT) { + + allDiagramsCompleted = true; + database.updateBadgeAchievement(badgeTitle, true); + intentBuilder(badgeTitle, badgeId, score, gameScore, + allDiagramsCompleted, tryCycle); + + } else { + + database.updateBadgeAchievement(badgeTitle, true); + intentBuilder(badgeTitle, badgeId, score, gameScore, + allDiagramsCompleted, tryCycle); + + } + + } + + } + + break; + + case "Science": + + key = getDiagramName().concat("Science"); + keyValue = updateMasterPreferences(key, diagramCategory); + + mMasterScienceBadge = "scienceBadge"; + boolean isMasterScienceBadge = preferences.getBoolean( + mMasterScienceBadge, false); + + if (!isMasterScienceBadge) { + + if (keyValue == SCIENCE_DIAGRAM_COUNT) { + + isToDispatch = true; + updateBoolPreferences(mMasterScienceBadge); + badgeTitle = getResources().getString( + R.string.badge_science); + badgeId = R.drawable.science; + + key = getResources().getString( + R.string.total_category_completed); + keyValue = updatePreferences(key); + + if (keyValue == TOTAL_CATEGORY_COUNT) { + + allDiagramsCompleted = true; + database.updateBadgeAchievement(badgeTitle, true); + intentBuilder(badgeTitle, badgeId, score, gameScore, + allDiagramsCompleted, tryCycle); + + } else { + + database.updateBadgeAchievement(badgeTitle, true); + intentBuilder(badgeTitle, badgeId, score, gameScore, + allDiagramsCompleted, tryCycle); + + } + + } + + } + + break; + + default: + break; + + } + } + + private void generatePersistanceBadge(float score, int gameScore) { + + String badgeTitle; + int badgeId; + boolean allDiagramsCompleted; + + if (tryCycle == TOTAL_COMPLETE_TRIES_COUNT) { + + isToDispatch = true; + allDiagramsCompleted = false; + + badgeTitle = getResources().getString(R.string.badge_persistence); + badgeId = R.drawable.persistence; + + database.updateBadgeAchievement(badgeTitle, true); + + intentBuilder(badgeTitle, badgeId, score, gameScore, + allDiagramsCompleted, tryCycle); + + } + + } + + private int updateMasterPreferences(String key, String category) { + + boolean value; + int count; + + value = preferences.getBoolean(key, false); + count = preferences.getInt(category, 0); + + if (value == false) { + value = true; + count += 1; + } + + editor.putBoolean(key, value); + editor.putInt(category, count); + editor.commit(); + + return count; + } + + private void updateBoolPreferences(String key) { + + boolean value; + value = preferences.getBoolean(key, false); + value = true; + editor.putBoolean(key, value); + editor.commit(); + + } + + private int updatePreferences(String key) { + + int previousVal; + int updatedVal; + + previousVal = preferences.getInt(key, 0); + updatedVal = previousVal += 1; + editor.putInt(key, updatedVal); + editor.commit(); + // preferences.getBoolean(key, defValue) + return updatedVal; + + } + + protected void dialogBuilder(Context context){ + + final Dialog dialog = new Dialog(context); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(R.layout.custom_dialog_view); + + Button yesBtn = (Button) dialog.findViewById(R.id.yes_btn); + Button noBtn = (Button) dialog.findViewById(R.id.no_btn); + TextView tvTitle = (TextView) dialog.findViewById(R.id.dialog_title); + TextView tvMessage = (TextView) dialog.findViewById(R.id.confirm_txt); + + tvTitle.setText(getResources().getString(R.string.quit_play)); + tvMessage.setText(getResources().getString(R.string.quit_play_msg)); + yesBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + quitPlayUpdataProgress(); + } + }); + + noBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + + dialog.show(); + + } + + protected abstract void intentBuilder(String badgeTitle, int badgeId, + float score, int gameScore, boolean completed, int tryCycle); + + protected abstract void dispatch(float totalScore, int gameScore); + + /** + * Indicate whether the placeholder is on left side or right side of the + * diagram + * + * @param droppableView + * @return + */ + private boolean getPlaceHolderSide(View droppableView) { + + boolean isOnLeftSide = false; + + // Check whether the place holder(droppableView) is in left side + if (Arrays.asList(placeHolderlist.get(0)).contains( + (Integer) droppableView.getId())) { + + isOnLeftSide = true; + + } + // Check whether the place holder(droppableView) is in right side + else if (Arrays.asList(placeHolderlist.get(1)).contains( + droppableView.getId())) { + + isOnLeftSide = false; + + } else { + Log.e(TAG_ERROR, + "Position is undefined of the place holder imageView !"); + } + + return isOnLeftSide; + } + + /** + * Helper class for generating drag shadow + */ + private static class TagDragShadowBuilder extends View.DragShadowBuilder { + + // Defines the constructor for TagDragShadowBuilder + public TagDragShadowBuilder(View v) { + + // Stores the View parameter passed to TagDragShadowBuilder. + super(v); + + } + + /* + * Defines a callback that sends the drag shadow dimensions and touch + * point back to the system. + */ + @Override + public void onProvideShadowMetrics(Point size, Point touch) { + + int width; + int height; + + // Sets the width of the shadow with respect to original View + width = (getView().getWidth()) * 3; + + // Sets the height of the shadow with respect to original View + height = (getView().getHeight()) * 3; + + // Sets the size parameter's width and height values. These get back + // to the system through the size parameter. + size.set(width, height); + + // Sets the touch point's position to the middle point visual + // clarity + touch.set((width / 4), (height / 4)); + } + + /* + * Defines a callback that draws the drag shadow in a Canvas that the + * system constructs from the dimensions passed in + * onProvideShadowMetrics(). + */ + @Override + public void onDrawShadow(Canvas canvas) { + + // Draws the ColorDrawable in the Canvas passed in from the system. + // Scale the canvas 1.5x + canvas.scale(1.5f, 1.5f); + getView().draw(canvas); + } + } + + @Override + public void onClick(View tagView) { + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + // Respond to the action bar's Up/Home button + case android.R.id.home: + NavUtils.navigateUpFromSameTask(this); + return true; + } + return super.onOptionsItemSelected(item); + } + + public String getDiagramName() { + return diagramName; + } + + public void setDiagramName(String diagramName) { + this.diagramName = diagramName; + } + + public String getDiagramCategory() { + return diagramCategory; + } + + public void setDiagramCategory(String diagramCategory) { + this.diagramCategory = diagramCategory; + } + + protected abstract int getResourcesId(); + + protected void openDB() { + diagramDb = new DBAdapter(this); + diagramDb.open(); + database = new Database(this); + } + + protected void closeDB() { + diagramDb.close(); + database.close(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + closeDB(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayCarbonCycle.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayCarbonCycle.java new file mode 100644 index 00000000..89827596 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayCarbonCycle.java @@ -0,0 +1,239 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.buildmlearn.labeldiagram.tooltipkit.InfoTooltip; +import com.buildmlearn.labeldiagram.tooltipkit.CustomTooltip.AlignMode; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +public class DiagramPlayCarbonCycle extends DiagramPlayBase { + + @Override + public void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + + actionBar.setTitle("Carbon Cycle"); + setDiagramName("CarbonCycle"); + setDiagramCategory("Science"); + + // Score board textViews + TextView completeTxt = (TextView) findViewById(R.id.complatedTxt); + compeleteRatio = (TextView) findViewById(R.id.complete_ratio); + TextView scoreTxt = (TextView) findViewById(R.id.scoreTxt); + score = (TextView) findViewById(R.id.score); + + // Setting up font face to Roboto Light/Thin + completeTxt.setTypeface(tfThin); + scoreTxt.setTypeface(tfThin); + compeleteRatio.setTypeface(tfThin); + score.setTypeface(tfThin); + + // Placeholder imageViews + ImageView oceanUptakeView = (ImageView) findViewById(R.id.ocean_uptakeBlb); + ImageView plantRespirationView = (ImageView) findViewById(R.id.plant_respirationBlb); + ImageView animalRespirationView = (ImageView) findViewById(R.id.animal_respirationBlb); + ImageView deadOrganismsView = (ImageView) findViewById(R.id.dead_organismsBlb); + ImageView fossilsView = (ImageView) findViewById(R.id.fossilsBlb); + ImageView sunlightView = (ImageView) findViewById(R.id.sunlightBlb); + ImageView organicCarbonView = (ImageView) findViewById(R.id.organic_carbonBlb); + ImageView vehicleEmissionsView = (ImageView) findViewById(R.id.vehicle_emissionsBlb); + ImageView photosyntesisView = (ImageView) findViewById(R.id.photosynthesisBlb); + + // Draggable Tags imageViews + TextView oceanUptakeTag = (TextView) findViewById(R.id.ocean_uptakeTag); + TextView plantRespirationTag = (TextView) findViewById(R.id.plant_respirationTag); + TextView animalRespirationTag = (TextView) findViewById(R.id.animal_respirationTag); + TextView deadOrganismsTag = (TextView) findViewById(R.id.dead_organismsTag); + TextView fossilsTag = (TextView) findViewById(R.id.fossilsTag); + TextView sunlightTag = (TextView) findViewById(R.id.sunlightTag); + TextView organicCarbonTag = (TextView) findViewById(R.id.organic_carbonTag); + TextView vehicleEmissionsTag = (TextView) findViewById(R.id.vehicle_emissionsTag); + TextView photosyntesisTag = (TextView) findViewById(R.id.photosynthesisTag); + + + // Register draggable views to receive drag events + oceanUptakeView.setOnDragListener(this); + plantRespirationView.setOnDragListener(this); + animalRespirationView.setOnDragListener(this); + deadOrganismsView.setOnDragListener(this); + fossilsView.setOnDragListener(this); + sunlightView.setOnDragListener(this); + organicCarbonView.setOnDragListener(this); + vehicleEmissionsView.setOnDragListener(this); + photosyntesisView.setOnDragListener(this); + + // Register place holders to receive onLongclick events + oceanUptakeTag.setOnLongClickListener(this); + plantRespirationTag.setOnLongClickListener(this); + animalRespirationTag.setOnLongClickListener(this); + deadOrganismsTag.setOnLongClickListener(this); + fossilsTag.setOnLongClickListener(this); + sunlightTag.setOnLongClickListener(this); + organicCarbonTag.setOnLongClickListener(this); + vehicleEmissionsTag.setOnLongClickListener(this); + photosyntesisTag.setOnLongClickListener(this); + + + // Register place holders to receive onClick events + oceanUptakeTag.setOnClickListener(this); + plantRespirationTag.setOnClickListener(this); + animalRespirationTag.setOnClickListener(this); + deadOrganismsTag.setOnClickListener(this); + fossilsTag.setOnClickListener(this); + sunlightTag.setOnClickListener(this); + organicCarbonTag.setOnClickListener(this); + vehicleEmissionsTag.setOnClickListener(this); + photosyntesisTag.setOnClickListener(this); + + placeHolderlist = container.diagramCaller("CarbonCycle"); + tagPlaceHolderMap = tagPlaceholdermapper.diagramMapper("CarbonCycle"); + incompleteTagList = tagPlaceholdermapper.diagramMapper("CarbonCycle"); + tagListSize = tagPlaceHolderMap.size(); + + openDB(); + } + + @Override + public void onClick(View tagView) { + // TODO Extract messages to a separate container + switch (tagView.getId()) { + case R.id.photosynthesisTag: + InfoTooltip popup = new InfoTooltip(getApplicationContext(), + "Carbon dioxide is absorbed by plants\n " + + "by producing their own food \n by photosynthesis"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.organic_carbonTag: + InfoTooltip popup1 = new InfoTooltip(getApplicationContext(), + "Passing the carbon compounds along the \n " + + "food chain since animals feed on plants"); + popup1.show(tagView, AlignMode.BOTTOM); + break; + case R.id.fossilsTag: + InfoTooltip popup2 = new InfoTooltip( + getApplicationContext(), + "Plants and animals that die and are buried \n" + + "turn into fossil fuels made of carbon like \ncoal and oil"); + popup2.show(tagView, AlignMode.BOTTOM); + break; + case R.id.ocean_uptakeTag: + InfoTooltip popup3 = new InfoTooltip(getApplicationContext(), + "Living organisms in ocean absorb Carbon Dioxide \n" + + "to produce energy"); + popup3.show(tagView, AlignMode.BOTTOM); + break; + case R.id.sunlightTag: + InfoTooltip popup4 = new InfoTooltip(getApplicationContext(), + "Provide the energy to contain Carbon Dioxide\n" + + " in palnts in the process of photosynthesis"); + popup4.show(tagView, AlignMode.BOTTOM); + break; + case R.id.dead_organismsTag: + InfoTooltip popup5 = new InfoTooltip( + getApplicationContext(), + "Dead organisms are decomposed in the ground\n" + + "and Carbon Dioxide contained within them \n is returned"); + popup5.show(tagView, AlignMode.BOTTOM); + break; + case R.id.animal_respirationTag: + InfoTooltip popup6 = new InfoTooltip(getApplicationContext(), + "Carbon enters the atmosphere as carbon dioxide \n" + + "from animal respiration (breathing)"); + popup6.show(tagView, AlignMode.BOTTOM); + break; + case R.id.vehicle_emissionsTag: + InfoTooltip popup7 = new InfoTooltip(getApplicationContext(), + "Carbon Dioxide is emitted to the atmosphere \n" + + "when fossil fuels are combusted"); + popup7.show(tagView, AlignMode.BOTTOM); + break; + case R.id.plant_respirationTag: + InfoTooltip popup8 = new InfoTooltip(getApplicationContext(), + "Carbon enters the atmosphere as carbon dioxide\n" + + " from plant respiration (breathing)"); + popup8.show(tagView, AlignMode.BOTTOM); + break; + + default: + break; + } + } + + @Override + protected int getResourcesId() { + + return R.layout.diagram_play_carbon_cycle; + + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_done: + quitPlay(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private void quitPlay() { + + super.dialogBuilder(DiagramPlayCarbonCycle.this); + + } + + @Override + protected void dispatch(float totalScore, int gameScore) { + Intent intent = new Intent(getBaseContext(), DiagramResult.class); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "CarbonCycle"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("TRY_CYCLE", tryCycle); + startActivity(intent); + } + + @Override + protected void intentBuilder(String badgeTitle, int badgeId, float totalScore, int gameScore, boolean completed, int tryCycle) { + Intent intent; + intent = new Intent(getBaseContext(), BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeTitle); + intent.putExtra("BADGE_ID", badgeId); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "CarbonCycle"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("COMPLETED", completed); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayCircuit.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayCircuit.java new file mode 100644 index 00000000..fdc73bbc --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayCircuit.java @@ -0,0 +1,235 @@ +package com.buildmlearn.labeldiagram; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.buildmlearn.labeldiagram.tooltipkit.InfoTooltip; +import com.buildmlearn.labeldiagram.tooltipkit.CustomTooltip.AlignMode; +import com.example.labelthediagram.R; + +public class DiagramPlayCircuit extends DiagramPlayBase { + + @Override + public void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + actionBar.setTitle("Electric Circuit"); + setDiagramName("Circuit"); + setDiagramCategory("Physics"); + + // Score board textViews + compeleteRatio = (TextView) findViewById(R.id.complete_ratio); + score = (TextView) findViewById(R.id.score); + + // Placeholder imageViews + ImageView capacitorView = (ImageView) findViewById(R.id.capacitorBlb); + ImageView batteryView = (ImageView) findViewById(R.id.batteryBlb); + ImageView currentView = (ImageView) findViewById(R.id.currentBlb); + ImageView resisterView = (ImageView) findViewById(R.id.resistorBlb); + ImageView switchView = (ImageView) findViewById(R.id.switchBlb); + ImageView ameterView = (ImageView) findViewById(R.id.ameterBlb); + ImageView loadView = (ImageView) findViewById(R.id.loadBlb); + ImageView voltmeterView = (ImageView) findViewById(R.id.voltmeterBlb); + ImageView bulbView = (ImageView) findViewById(R.id.bulbBlb); + + // Draggable Tags TextViews + TextView capacitorTag = (TextView) findViewById(R.id.capacitorTag); + TextView batteryTag = (TextView) findViewById(R.id.batteryTag); + TextView currentTag = (TextView) findViewById(R.id.currentTag); + TextView resistorTag = (TextView) findViewById(R.id.resistorTag); + TextView switchTag = (TextView) findViewById(R.id.switchTag); + TextView ameterTag = (TextView) findViewById(R.id.ameterTag); + TextView loadTag = (TextView) findViewById(R.id.loadTag); + TextView voltmeterTag = (TextView) findViewById(R.id.voltmeterTag); + TextView bulbTag = (TextView) findViewById(R.id.bulbTag); + + // Register draggable views to receive drag events + capacitorView.setOnDragListener(this); + batteryView.setOnDragListener(this); + currentView.setOnDragListener(this); + resisterView.setOnDragListener(this); + switchView.setOnDragListener(this); + ameterView.setOnDragListener(this); + loadView.setOnDragListener(this); + voltmeterView.setOnDragListener(this); + bulbView.setOnDragListener(this); + + // Register place holders to receive onLongclick events + capacitorTag.setOnLongClickListener(this); + batteryTag.setOnLongClickListener(this); + currentTag.setOnLongClickListener(this); + resistorTag.setOnLongClickListener(this); + switchTag.setOnLongClickListener(this); + ameterTag.setOnLongClickListener(this); + loadTag.setOnLongClickListener(this); + voltmeterTag.setOnLongClickListener(this); + bulbTag.setOnLongClickListener(this); + + // Register place holders to receive onClick events + capacitorTag.setOnClickListener(this); + batteryTag.setOnClickListener(this); + currentTag.setOnClickListener(this); + resistorTag.setOnClickListener(this); + switchTag.setOnClickListener(this); + ameterTag.setOnClickListener(this); + loadTag.setOnClickListener(this); + voltmeterTag.setOnClickListener(this); + bulbTag.setOnClickListener(this); + + placeHolderlist = container.diagramCaller("Circuit"); + tagPlaceHolderMap = tagPlaceholdermapper.diagramMapper("Circuit"); + incompleteTagList = tagPlaceholdermapper.diagramMapper("Circuit"); + tagListSize = tagPlaceHolderMap.size(); + + openDB(); + + } + + @Override + public void onClick(View tagView) { + super.onClick(tagView); + + InfoTooltip popup; + + switch (tagView.getId()) { + case R.id.capacitorTag: + popup = new InfoTooltip(getApplicationContext(), + "This stores energy in the form of \n" + + "an electrostatic field between its plates"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.batteryTag: + popup = new InfoTooltip(getApplicationContext(), + "The source of power fro the electric \n" + + "circuit"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.currentTag: + popup = new InfoTooltip(getApplicationContext(), + "The flow of electricity"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.resistorTag: + popup = new InfoTooltip(getApplicationContext(), + "A device designed to introduce \n" + + "resistance into an electric circuit"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.switchTag: + popup = new InfoTooltip(getApplicationContext(), + "Device for making and breaking \n " + + "the connection in the electric circuit"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.ameterTag: + popup = new InfoTooltip(getApplicationContext(), + "Instrument for measuring electric \n" + + "current in amperes"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.loadTag: + popup = new InfoTooltip(getApplicationContext(), + "Something in the circuit that will draw power"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.voltmeterTag: + popup = new InfoTooltip(getApplicationContext(), + "Instrument for measure electrical \n" + + "potential difference between two \n" + + "points in an electric circuit"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.bulbTag: + popup = new InfoTooltip(getApplicationContext(), + "The glass bulb that provides light \n" + + "by passing an electric current t\n" + + "hrough a filament"); + popup.show(tagView, AlignMode.BOTTOM); + break; + + default: + break; + } + + } + + @Override + protected int getResourcesId() { + // TODO Auto-generated method stub + return R.layout.diagram_play_circuit; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_done: + quitPlay(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private void quitPlay() { + + super.dialogBuilder(DiagramPlayCircuit.this); + + } + + @Override + protected void dispatch(float totalScore, int gameScore) { + Intent intent = new Intent(getBaseContext(), DiagramResult.class); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "Circuit"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("TRY_CYCLE", tryCycle); + startActivity(intent); + } + + @Override + protected void intentBuilder(String badgeTitle, int badgeId, + float totalScore, int gameScore, boolean completed, int tryCycle) { + Intent intent; + intent = new Intent(getBaseContext(), BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeTitle); + intent.putExtra("BADGE_ID", badgeId); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "Circuit"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("COMPLETED", completed); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayDryCell.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayDryCell.java new file mode 100644 index 00000000..88680aea --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayDryCell.java @@ -0,0 +1,234 @@ +package com.buildmlearn.labeldiagram; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.buildmlearn.labeldiagram.tooltipkit.InfoTooltip; +import com.buildmlearn.labeldiagram.tooltipkit.CustomTooltip.AlignMode; +import com.example.labelthediagram.R; + +public class DiagramPlayDryCell extends DiagramPlayBase { + + @Override + public void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + actionBar.setTitle("Dry Cell"); + setDiagramName("DryCell"); + setDiagramCategory("Physics"); + + // Score board textViews + compeleteRatio = (TextView) findViewById(R.id.complete_ratio); + score = (TextView) findViewById(R.id.score); + + // Placeholder imageViews + ImageView posTerminalView = (ImageView) findViewById(R.id.posTerminalBlb); + ImageView negTerminalView = (ImageView) findViewById(R.id.negTerminalBlb); + ImageView chemPasteView = (ImageView) findViewById(R.id.chemPasteBlb); + ImageView anodeView = (ImageView) findViewById(R.id.anodeBlb); + ImageView cathodeView = (ImageView) findViewById(R.id.cathodeBlb); + ImageView airSpaceView = (ImageView) findViewById(R.id.airSpaceBlb); + ImageView sealView = (ImageView) findViewById(R.id.sealBlb); + ImageView mJacketView = (ImageView) findViewById(R.id.mJacketBlb); + ImageView insulatorView = (ImageView) findViewById(R.id.insulatorBlb); + + // Draggable Tags TextViews + TextView posTerminalTag = (TextView) findViewById(R.id.posTerminalTag); + TextView negTerminalTag = (TextView) findViewById(R.id.negTerminalTag); + TextView chemPasteTag = (TextView) findViewById(R.id.chemPasteTag); + TextView anodeTag = (TextView) findViewById(R.id.anodeTag); + TextView cathodeTag = (TextView) findViewById(R.id.cathodeTag); + TextView airSpaceTag = (TextView) findViewById(R.id.airSpaceTag); + TextView sealTag = (TextView) findViewById(R.id.sealTag); + TextView mJacketTag = (TextView) findViewById(R.id.mJacketTag); + TextView insulatorTag = (TextView) findViewById(R.id.insulatorTag); + + // Register draggable views to receive drag events + posTerminalView.setOnDragListener(this); + negTerminalView.setOnDragListener(this); + chemPasteView.setOnDragListener(this); + anodeView.setOnDragListener(this); + cathodeView.setOnDragListener(this); + airSpaceView.setOnDragListener(this); + sealView.setOnDragListener(this); + mJacketView.setOnDragListener(this); + insulatorView.setOnDragListener(this); + + // Register place holders to receive onLongclick events + posTerminalTag.setOnLongClickListener(this); + negTerminalTag.setOnLongClickListener(this); + chemPasteTag.setOnLongClickListener(this); + anodeTag.setOnLongClickListener(this); + cathodeTag.setOnLongClickListener(this); + airSpaceTag.setOnLongClickListener(this); + sealTag.setOnLongClickListener(this); + mJacketTag.setOnLongClickListener(this); + insulatorTag.setOnLongClickListener(this); + + // Register place holders to receive onClick events + posTerminalTag.setOnClickListener(this); + negTerminalTag.setOnClickListener(this); + chemPasteTag.setOnClickListener(this); + anodeTag.setOnClickListener(this); + cathodeTag.setOnClickListener(this); + airSpaceTag.setOnClickListener(this); + sealTag.setOnClickListener(this); + mJacketTag.setOnClickListener(this); + insulatorTag.setOnClickListener(this); + + placeHolderlist = container.diagramCaller("DryCell"); + tagPlaceHolderMap = tagPlaceholdermapper.diagramMapper("DryCell"); + incompleteTagList = tagPlaceholdermapper.diagramMapper("DryCell"); + tagListSize = tagPlaceHolderMap.size(); + + openDB(); + + } + + @Override + public void onClick(View tagView) { + super.onClick(tagView); + + InfoTooltip popup; + + switch (tagView.getId()) { + case R.id.posTerminalTag: + popup = new InfoTooltip(getApplicationContext(), + "Electrons flow to the positive terminal \n" + + "of the battery through the circuit"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.negTerminalTag: + popup = new InfoTooltip(getApplicationContext(), + "Electrons flow from the negative \n" + + "terminal of the battery through the circuit"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.chemPasteTag: + popup = new InfoTooltip(getApplicationContext(), + "A mixture of several substances to hold \n" + + "the cathode rigid in the center of the cell"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.anodeTag: + popup = new InfoTooltip(getApplicationContext(), + "The zinc container serves as the \n" + + "negative electrode of the cell"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.cathodeTag: + popup = new InfoTooltip(getApplicationContext(), + "The carbon electrode located in the center \n" + + "which serves as the positive terminal"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.airSpaceTag: + popup = new InfoTooltip(getApplicationContext(), + "Small space left at the top for \n" + + "expansion of the electrolytic paste"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.sealTag: + popup = new InfoTooltip(getApplicationContext(), + "Provides electrical & chemical insulation \n" + + " and prevents air infiltration"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.mJacketTag: + popup = new InfoTooltip(getApplicationContext(), + "The cell is enclosed with metal jacket \n" + + " to electrically isolate the anode"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.insulatorTag: + popup = new InfoTooltip(getApplicationContext(), + "Non-conducting material to separate \n" + + "the zinc from the paste"); + popup.show(tagView, AlignMode.BOTTOM); + break; + + default: + break; + } + } + + @Override + protected int getResourcesId() { + // TODO Auto-generated method stub + return R.layout.diagram_play_dry_cell; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_done: + quitPlay(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private void quitPlay() { + + super.dialogBuilder(DiagramPlayDryCell.this); + + } + + @Override + protected void dispatch(float totalScore, int gameScore) { + Intent intent = new Intent(getBaseContext(), DiagramResult.class); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "DryCell"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("TRY_CYCLE", tryCycle); + startActivity(intent); + } + + @Override + protected void intentBuilder(String badgeTitle, int badgeId, + float totalScore, int gameScore, boolean completed, int tryCycle) { + Intent intent; + intent = new Intent(getBaseContext(), BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeTitle); + intent.putExtra("BADGE_ID", badgeId); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "DryCell"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("COMPLETED", completed); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayHumanEar.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayHumanEar.java new file mode 100644 index 00000000..f3be70ca --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayHumanEar.java @@ -0,0 +1,244 @@ +package com.buildmlearn.labeldiagram; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.buildmlearn.labeldiagram.tooltipkit.InfoTooltip; +import com.buildmlearn.labeldiagram.tooltipkit.CustomTooltip.AlignMode; +import com.example.labelthediagram.R; + +public class DiagramPlayHumanEar extends DiagramPlayBase { + + @Override + public void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + actionBar.setTitle("Human Ear"); + setDiagramName("HumanEar"); + setDiagramCategory("Biology"); + + // Score board textViews + TextView completeTxt = (TextView) findViewById(R.id.complatedTxt); + compeleteRatio = (TextView) findViewById(R.id.complete_ratio); + TextView scoreTxt = (TextView) findViewById(R.id.scoreTxt); + score = (TextView) findViewById(R.id.score); + + // Setting up font face to Roboto Light/Thin + completeTxt.setTypeface(tfThin); + scoreTxt.setTypeface(tfThin); + compeleteRatio.setTypeface(tfThin); + score.setTypeface(tfThin); + + // Placeholder imageViews + ImageView pinnaView = (ImageView) findViewById(R.id.pinnaBlb); + ImageView earcanalView = (ImageView) findViewById(R.id.earcanalBlb); + ImageView eardrumView = (ImageView) findViewById(R.id.eardrumBlb); + ImageView cochleaView = (ImageView) findViewById(R.id.cochleaBlb); + ImageView earnerveView = (ImageView) findViewById(R.id.earnerveBlb); + ImageView malleusView = (ImageView) findViewById(R.id.malleusBlb); + ImageView incusView = (ImageView) findViewById(R.id.incusBlb); + ImageView outerearView = (ImageView) findViewById(R.id.outerearBlb); + ImageView stapesView = (ImageView) findViewById(R.id.stapesBlb); + ImageView canalsView = (ImageView) findViewById(R.id.canalsBlb); + + // Draggable Tags imageViews + TextView pinnaTag = (TextView) findViewById(R.id.pinnaTag); + TextView earcanalTag = (TextView) findViewById(R.id.ear_canalTag); + TextView eardrumTag = (TextView) findViewById(R.id.eardrumTag); + TextView cochleaTag = (TextView) findViewById(R.id.cochleaTag); + TextView earnerveTag = (TextView) findViewById(R.id.earnerveTag); + TextView malleusTag = (TextView) findViewById(R.id.malleusTag); + TextView incusTag = (TextView) findViewById(R.id.incusTag); + TextView outerearTag = (TextView) findViewById(R.id.outerearTag); + TextView stapesTag = (TextView) findViewById(R.id.stapesTag); + TextView canalsTag = (TextView) findViewById(R.id.canalsTag); + + // Register draggable views to receive drag events + pinnaView.setOnDragListener(this); + earcanalView.setOnDragListener(this); + eardrumView.setOnDragListener(this); + cochleaView.setOnDragListener(this); + earnerveView.setOnDragListener(this); + malleusView.setOnDragListener(this); + incusView.setOnDragListener(this); + outerearView.setOnDragListener(this); + stapesView.setOnDragListener(this); + canalsView.setOnDragListener(this); + + // Register place holders to receive onLongclick events + pinnaTag.setOnLongClickListener(this); + earcanalTag.setOnLongClickListener(this); + eardrumTag.setOnLongClickListener(this); + cochleaTag.setOnLongClickListener(this); + earnerveTag.setOnLongClickListener(this); + malleusTag.setOnLongClickListener(this); + incusTag.setOnLongClickListener(this); + outerearTag.setOnLongClickListener(this); + stapesTag.setOnLongClickListener(this); + canalsTag.setOnLongClickListener(this); + + // Register place holders to receive onClick events + pinnaTag.setOnClickListener(this); + earcanalTag.setOnClickListener(this); + eardrumTag.setOnClickListener(this); + cochleaTag.setOnClickListener(this); + earnerveTag.setOnClickListener(this); + malleusTag.setOnClickListener(this); + incusTag.setOnClickListener(this); + outerearTag.setOnClickListener(this); + stapesTag.setOnClickListener(this); + canalsTag.setOnClickListener(this); + + placeHolderlist = container.diagramCaller("HumanEar"); + tagPlaceHolderMap = tagPlaceholdermapper.diagramMapper("HumanEar"); + incompleteTagList = tagPlaceholdermapper.diagramMapper("HumanEar"); + tagListSize = tagPlaceHolderMap.size(); + + openDB(); + + } + + @Override + public void onClick(View tagView) { + // TODO Extract messages to separate container + switch (tagView.getId()) { + case R.id.pinnaTag: + InfoTooltip popup = new InfoTooltip(getApplicationContext(), + " This is the entrance for the sound waves "); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.ear_canalTag: + InfoTooltip popup1 = new InfoTooltip(getApplicationContext(), + "2 cm and it guides the sound towards the inner ear"); + popup1.show(tagView, AlignMode.BOTTOM); + break; + case R.id.eardrumTag: + InfoTooltip popup2 = new InfoTooltip(getApplicationContext(), + "It is a delicate membrane which separates \n" + + "the outer ear from the middle ear "); + popup2.show(tagView, AlignMode.BOTTOM); + break; + case R.id.cochleaTag: + InfoTooltip popup3 = new InfoTooltip(getApplicationContext(), + "It is a spiral shaped tube "); + popup3.show(tagView, AlignMode.BOTTOM); + break; + case R.id.earnerveTag: + InfoTooltip popup4 = new InfoTooltip(getApplicationContext(), + "Picks up electric impulses from the nerve cells\n" + + " on the cochlea and sends them to the brain "); + popup4.show(tagView, AlignMode.BOTTOM); + break; + case R.id.malleusTag: + InfoTooltip popup5 = new InfoTooltip( + getApplicationContext(), + "It is one of the three bones \nlocated next to the ear drum \n" + + "vibrates when sound reaches it"); + popup5.show(tagView, AlignMode.BOTTOM); + break; + case R.id.incusTag: + InfoTooltip popup6 = new InfoTooltip(getApplicationContext(), + "It is another tiny bone which vibrates \n" + + "in response to the previous vibration "); + popup6.show(tagView, AlignMode.BOTTOM); + break; + case R.id.outerearTag: + InfoTooltip popup7 = new InfoTooltip(getApplicationContext(), + "It is the part of the ear which can be seen "); + popup7.show(tagView, AlignMode.BOTTOM); + break; + case R.id.stapesTag: + InfoTooltip popup8 = new InfoTooltip(getApplicationContext(), + " It is the last bone which receives \n" + + "the vibration from the other two \n" + + "and sends it into the inner ear "); + popup8.show(tagView, AlignMode.BOTTOM); + break; + case R.id.canalsTag: + InfoTooltip popup9 = new InfoTooltip(getApplicationContext(), + "They are connected with the cochlea \n and are filled with fluid "); + popup9.show(tagView, AlignMode.BOTTOM); + break; + default: + break; + } + } + + @Override + protected int getResourcesId() { + // TODO Auto-generated method stub + return R.layout.diagram_play_ear; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // TODO Auto-generated method stub + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_done: + quitPlay(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private void quitPlay() { + + super.dialogBuilder(DiagramPlayHumanEar.this); + + } + + @Override + protected void dispatch(float totalScore, int gameScore) { + Intent intent = new Intent(getBaseContext(), DiagramResult.class); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "HumanEar"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("TRY_CYCLE", tryCycle); + startActivity(intent); + } + + @Override + protected void intentBuilder(String badgeTitle, int badgeId, float totalScore, int gameScore, boolean completed, int tryCycle) { + Intent intent; + intent = new Intent(getBaseContext(), BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeTitle); + intent.putExtra("BADGE_ID", badgeId); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "HumanEar"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("COMPLETED", completed); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayHumanEye.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayHumanEye.java new file mode 100644 index 00000000..cad6a371 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayHumanEye.java @@ -0,0 +1,244 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.buildmlearn.labeldiagram.tooltipkit.InfoTooltip; +import com.buildmlearn.labeldiagram.tooltipkit.CustomTooltip.AlignMode; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +public class DiagramPlayHumanEye extends DiagramPlayBase { + + @Override + public void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + actionBar.setTitle("Human Eye"); + setDiagramName("HumanEye"); + setDiagramCategory("Biology"); + + // Score board textViews + TextView completeTxt = (TextView) findViewById(R.id.complatedTxt); + compeleteRatio = (TextView) findViewById(R.id.complete_ratio); + TextView scoreTxt = (TextView) findViewById(R.id.scoreTxt); + score = (TextView) findViewById(R.id.score); + + // Setting up font face to Roboto Light/Thin + completeTxt.setTypeface(tfThin); + scoreTxt.setTypeface(tfThin); + compeleteRatio.setTypeface(tfThin); + score.setTypeface(tfThin); + + // Placeholder imageViews + ImageView irisView = (ImageView) findViewById(R.id.irisBlb); + ImageView pupilView = (ImageView) findViewById(R.id.pupilBlb); + ImageView lensView = (ImageView) findViewById(R.id.lensBlb); + ImageView corneaView = (ImageView) findViewById(R.id.corneaBlb); + ImageView vitreousView = (ImageView) findViewById(R.id.vitreousBlb); + ImageView ciliaryView = (ImageView) findViewById(R.id.ciliaryBodyBlb); + ImageView nerveView = (ImageView) findViewById(R.id.opticNerveBlb); + ImageView blindspotView = (ImageView) findViewById(R.id.blindSpotBlb); + ImageView foveaView = (ImageView) findViewById(R.id.foveaBlb); + ImageView retinaView = (ImageView) findViewById(R.id.retinaBlb); + + // Draggable Tags imageViews + TextView irisTag = (TextView) findViewById(R.id.irisTag); + TextView pupilTag = (TextView) findViewById(R.id.pupilTag); + TextView lensTag = (TextView) findViewById(R.id.lensTag); + TextView corneaTag = (TextView) findViewById(R.id.corneaTag); + TextView vitreousTag = (TextView) findViewById(R.id.vitreousTag); + TextView ciliaryTag = (TextView) findViewById(R.id.ciliaryTag); + TextView nerveTag = (TextView) findViewById(R.id.nerveTag); + TextView blindspotTag = (TextView) findViewById(R.id.opticdiskTag); + TextView foveaTag = (TextView) findViewById(R.id.foveaTag); + TextView retinaTag = (TextView) findViewById(R.id.retinaTag); + + // Register draggable views to receive drag events + irisView.setOnDragListener(this); + pupilView.setOnDragListener(this); + lensView.setOnDragListener(this); + corneaView.setOnDragListener(this); + vitreousView.setOnDragListener(this); + ciliaryView.setOnDragListener(this); + nerveView.setOnDragListener(this); + blindspotView.setOnDragListener(this); + foveaView.setOnDragListener(this); + retinaView.setOnDragListener(this); + + // Register place holders to receive onLongclick events + irisTag.setOnLongClickListener(this); + pupilTag.setOnLongClickListener(this); + lensTag.setOnLongClickListener(this); + corneaTag.setOnLongClickListener(this); + vitreousTag.setOnLongClickListener(this); + ciliaryTag.setOnLongClickListener(this); + nerveTag.setOnLongClickListener(this); + blindspotTag.setOnLongClickListener(this); + foveaTag.setOnLongClickListener(this); + retinaTag.setOnLongClickListener(this); + + // Register place holders to receive onClick events + irisTag.setOnClickListener(this); + pupilTag.setOnClickListener(this); + lensTag.setOnClickListener(this); + corneaTag.setOnClickListener(this); + vitreousTag.setOnClickListener(this); + ciliaryTag.setOnClickListener(this); + nerveTag.setOnClickListener(this); + blindspotTag.setOnClickListener(this); + foveaTag.setOnClickListener(this); + retinaTag.setOnClickListener(this); + + placeHolderlist = container.diagramCaller("HumanEye"); + tagPlaceHolderMap = tagPlaceholdermapper.diagramMapper("HumanEye"); + incompleteTagList = tagPlaceholdermapper.diagramMapper("HumanEye"); + tagListSize = tagPlaceHolderMap.size(); + + openDB(); + + } + + /* + * private int getRsourceId() { // TODO Auto-generated method stub return + * null; } + */ + + @Override + public void onClick(View tagView) { + // TODO Extract messages to separate container + switch (tagView.getId()) { + case R.id.irisTag: + InfoTooltip popup = new InfoTooltip(getApplicationContext(), + "Iris has spesialized muscles that \n changes the size of the pupil "); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.pupilTag: + InfoTooltip popup1 = new InfoTooltip(getApplicationContext(), + "A round opening of the center of the iris."); + popup1.show(tagView, AlignMode.BOTTOM); + break; + case R.id.lensTag: + InfoTooltip popup2 = new InfoTooltip( + getApplicationContext(), + "Attached to muscles which contract or\n relax inorder to change the lens shape. "); + popup2.show(tagView, AlignMode.BOTTOM); + break; + case R.id.corneaTag: + InfoTooltip popup3 = new InfoTooltip(getApplicationContext(), + "Light first passes through cornea \n Let light comes into the eye "); + popup3.show(tagView, AlignMode.BOTTOM); + break; + case R.id.vitreousTag: + InfoTooltip popup4 = new InfoTooltip(getApplicationContext(), + "back portion of the eye that is filled\n with a clear, jelly-like substance "); + popup4.show(tagView, AlignMode.BOTTOM); + break; + case R.id.ciliaryTag: + InfoTooltip popup5 = new InfoTooltip( + getApplicationContext(), + " part of the eye that includes the ciliary muscle,\n which controls the shape of the lens "); + popup5.show(tagView, AlignMode.BOTTOM); + break; + case R.id.nerveTag: + InfoTooltip popup6 = new InfoTooltip(getApplicationContext(), + "nerve that transmits visual information \n from the retina to the brain. "); + popup6.show(tagView, AlignMode.BOTTOM); + break; + case R.id.opticdiskTag: + InfoTooltip popup7 = new InfoTooltip(getApplicationContext(), + "The place of the eye that is not sensitive to light "); + popup7.show(tagView, AlignMode.BOTTOM); + break; + case R.id.foveaTag: + InfoTooltip popup8 = new InfoTooltip(getApplicationContext(), + "The most sensitive place of the eye to light rays "); + popup8.show(tagView, AlignMode.BOTTOM); + break; + case R.id.retinaTag: + InfoTooltip popup9 = new InfoTooltip( + getApplicationContext(), + "The light finally reaches the retina where \n rod and cone cells are stimulated \n converting the light to electrical impulese."); + popup9.show(tagView, AlignMode.BOTTOM); + break; + default: + break; + } + } + + @Override + protected int getResourcesId() { + + return R.layout.diagram_play_eye; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // TODO Auto-generated method stub + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_done: + quitPlay(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private void quitPlay() { + + super.dialogBuilder(DiagramPlayHumanEye.this); + + } + + @Override + protected void dispatch(float totalScore, int gameScore) { + Intent intent = new Intent(getBaseContext(), DiagramResult.class); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "HumanEye"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("TRY_CYCLE", tryCycle); + startActivity(intent); + } + + @Override + protected void intentBuilder(String badgeTitle, int badgeId, float totalScore, int gameScore, boolean completed, int tryCycle) { + Intent intent; + intent = new Intent(getBaseContext(), BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeTitle); + intent.putExtra("BADGE_ID", badgeId); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "HumanEye"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("COMPLETED", completed); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayHumanHeart.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayHumanHeart.java new file mode 100644 index 00000000..6de23f5a --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayHumanHeart.java @@ -0,0 +1,240 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.buildmlearn.labeldiagram.tooltipkit.InfoTooltip; +import com.buildmlearn.labeldiagram.tooltipkit.CustomTooltip.AlignMode; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +public class DiagramPlayHumanHeart extends DiagramPlayBase { + + @Override + public void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + actionBar.setTitle("Human Heart"); + setDiagramName("HumanHeart"); + setDiagramCategory("Biology"); + + // Score board textViews + TextView completeTxt = (TextView) findViewById(R.id.complatedTxt); + compeleteRatio = (TextView) findViewById(R.id.complete_ratio); + TextView scoreTxt = (TextView) findViewById(R.id.scoreTxt); + score = (TextView) findViewById(R.id.score); + + // Setting up font face to Roboto Light/Thin + completeTxt.setTypeface(tfThin); + scoreTxt.setTypeface(tfThin); + compeleteRatio.setTypeface(tfThin); + score.setTypeface(tfThin); + + // Placeholder imageViews + ImageView aortaView = (ImageView) findViewById(R.id.pul_arteryBulb); + ImageView supVenaCavaView = (ImageView) findViewById(R.id.sup_vena_cavaBlb); + ImageView infVenaCavaView = (ImageView) findViewById(R.id.inf_vena_cavaBlb); + ImageView leftAtriumView = (ImageView) findViewById(R.id.left_atriumBlb); + ImageView leftVentricleView = (ImageView) findViewById(R.id.left_ventricleBlb); + ImageView rightAtriumView = (ImageView) findViewById(R.id.right_atriumBlb); + ImageView rightVentricleView = (ImageView) findViewById(R.id.right_ventricleBlb); + ImageView pulArteryView = (ImageView) findViewById(R.id.aortaBlb); + ImageView pulVeinView = (ImageView) findViewById(R.id.pul_veinBlb); + + // Draggable Tags imageViews + TextView aortaTag = (TextView) findViewById(R.id.aortaTag); + TextView supVenaCavaTag = (TextView) findViewById(R.id.sup_vena_cavaTag); + TextView infVenaCavaTag = (TextView) findViewById(R.id.inf_vena_cavaTag); + TextView leftAtriumTag = (TextView) findViewById(R.id.left_atriumTag); + TextView leftVentricleTag = (TextView) findViewById(R.id.left_ventricleTag); + TextView rightAtriumTag = (TextView) findViewById(R.id.right_atriunTag); + TextView rightVentricleTag = (TextView) findViewById(R.id.right_ventricleTag); + TextView pulArteryTag = (TextView) findViewById(R.id.pul_arteryTag); + TextView pulVeinTag = (TextView) findViewById(R.id.pul_veinTag); + + // Register draggable views to receive drag events + aortaView.setOnDragListener(this); + supVenaCavaView.setOnDragListener(this); + infVenaCavaView.setOnDragListener(this); + leftAtriumView.setOnDragListener(this); + leftVentricleView.setOnDragListener(this); + rightAtriumView.setOnDragListener(this); + rightVentricleView.setOnDragListener(this); + pulArteryView.setOnDragListener(this); + pulVeinView.setOnDragListener(this); + + // Register place holders to receive onLongclick events + aortaTag.setOnLongClickListener(this); + supVenaCavaTag.setOnLongClickListener(this); + infVenaCavaTag.setOnLongClickListener(this); + leftAtriumTag.setOnLongClickListener(this); + leftVentricleTag.setOnLongClickListener(this); + rightAtriumTag.setOnLongClickListener(this); + rightVentricleTag.setOnLongClickListener(this); + pulArteryTag.setOnLongClickListener(this); + pulVeinTag.setOnLongClickListener(this); + + // Register place holders to receive onClick events + aortaTag.setOnClickListener(this); + supVenaCavaTag.setOnClickListener(this); + infVenaCavaTag.setOnClickListener(this); + leftAtriumTag.setOnClickListener(this); + leftVentricleTag.setOnClickListener(this); + rightAtriumTag.setOnClickListener(this); + rightVentricleTag.setOnClickListener(this); + pulArteryTag.setOnClickListener(this); + pulVeinTag.setOnClickListener(this); + + placeHolderlist = container.diagramCaller("HumanHeart"); + tagPlaceHolderMap = tagPlaceholdermapper.diagramMapper("HumanHeart"); + incompleteTagList = tagPlaceholdermapper.diagramMapper("HumanHeart"); + tagListSize = tagPlaceHolderMap.size(); + + openDB(); + + } + + @Override + public void onClick(View tagView) { + // TODO Extract messages to separate container + switch (tagView.getId()) { + case R.id.aortaTag: + InfoTooltip popup = new InfoTooltip(getApplicationContext(), + "Main artery which distributes oxygenated blood\n" + + " to all parts of the human body "); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.sup_vena_cavaTag: + InfoTooltip popup1 = new InfoTooltip(getApplicationContext(), + "Vein that carries deoxygenated blood \n" + + "from the upper half of the body \n" + + "to the heart's right atrium"); + popup1.show(tagView, AlignMode.BOTTOM); + break; + case R.id.inf_vena_cavaTag: + InfoTooltip popup2 = new InfoTooltip( + getApplicationContext(), + "This is a large vein that carries de-oxygenated\n" + + " blood from the lower body to the heart "); + popup2.show(tagView, AlignMode.BOTTOM); + break; + case R.id.left_atriumTag: + InfoTooltip popup3 = new InfoTooltip(getApplicationContext(), + "This is one of the four chambers of the heart,\n" + + " located on the left posterior side "); + popup3.show(tagView, AlignMode.BOTTOM); + break; + case R.id.left_ventricleTag: + InfoTooltip popup4 = new InfoTooltip(getApplicationContext(), + "One of four chambers of the heart which is located\n" + + " in the bottom left portion of the heart "); + popup4.show(tagView, AlignMode.BOTTOM); + break; + case R.id.right_atriunTag: + InfoTooltip popup5 = new InfoTooltip( + getApplicationContext(), + "This is located in the upper portion of right side \n" + + "of heart consisting of the right atrial appendage "); + popup5.show(tagView, AlignMode.BOTTOM); + break; + case R.id.right_ventricleTag: + InfoTooltip popup6 = new InfoTooltip(getApplicationContext(), + "This is the chamber within the heart that is\n" + + "responsible for pumping oxygen-depleted blood \n" + + "to the lungs "); + popup6.show(tagView, AlignMode.BOTTOM); + break; + case R.id.pul_arteryTag: + InfoTooltip popup7 = new InfoTooltip(getApplicationContext(), + "The artery carrying blood from the right ventricle\n" + + " of the heart to the lungs for oxygenation"); + popup7.show(tagView, AlignMode.BOTTOM); + break; + case R.id.pul_veinTag: + InfoTooltip popup8 = new InfoTooltip(getApplicationContext(), + "Large blood vessels that receive oxygenated blood\n" + + " from the lungs and drain into the left atrium\n" + + " of the heart "); + popup8.show(tagView, AlignMode.BOTTOM); + break; + default: + break; + } + } + + @Override + protected int getResourcesId() { + + return R.layout.diagram_play_heart; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // TODO Auto-generated method stub + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_done: + quitPlay(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private void quitPlay() { + + super.dialogBuilder(DiagramPlayHumanHeart.this); + + } + + @Override + protected void dispatch(float totalScore, int gameScore) { + Intent intent = new Intent(getBaseContext(), DiagramResult.class); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "HumanHeart"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("TRY_CYCLE", tryCycle); + startActivity(intent); + } + + @Override + protected void intentBuilder(String badgeTitle, int badgeId, float totalScore, int gameScore, boolean completed, int tryCycle) { + Intent intent; + intent = new Intent(getBaseContext(), BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeTitle); + intent.putExtra("BADGE_ID", badgeId); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "HumanHeart"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("COMPLETED", completed); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayLens.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayLens.java new file mode 100644 index 00000000..51c9c84e --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayLens.java @@ -0,0 +1,220 @@ +package com.buildmlearn.labeldiagram; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.buildmlearn.labeldiagram.tooltipkit.InfoTooltip; +import com.buildmlearn.labeldiagram.tooltipkit.CustomTooltip.AlignMode; +import com.example.labelthediagram.R; + +public class DiagramPlayLens extends DiagramPlayBase { + + @Override + public void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + actionBar.setTitle("Lens"); + setDiagramName("Lens"); + setDiagramCategory("Physics"); + + // Score board textViews + compeleteRatio = (TextView) findViewById(R.id.complete_ratio); + score = (TextView) findViewById(R.id.score); + + // Placeholder imageViews + ImageView principalRayView = (ImageView) findViewById(R.id.principalRayBlb); + ImageView centralRayView = (ImageView) findViewById(R.id.centralRayBlb); + ImageView focalRayView = (ImageView) findViewById(R.id.focalRayBlb); + ImageView focusView = (ImageView) findViewById(R.id.focusBlb); + ImageView objectView = (ImageView) findViewById(R.id.objectBlb); + ImageView imageView = (ImageView) findViewById(R.id.imageBlb); + ImageView lensView = (ImageView) findViewById(R.id.lensBlb); + ImageView lensAxisView = (ImageView) findViewById(R.id.lensAxisBlb); + + // Draggable Tags imageViews + TextView principalRayTag = (TextView) findViewById(R.id.principalRayTag); + TextView centralRayTag = (TextView) findViewById(R.id.centralRayTag); + TextView focalRayTag = (TextView) findViewById(R.id.focalRayTag); + TextView focusTag = (TextView) findViewById(R.id.focusTag); + TextView objectTag = (TextView) findViewById(R.id.objectTag); + TextView imageTag = (TextView) findViewById(R.id.imageTag); + TextView lensTag = (TextView) findViewById(R.id.lensTag); + TextView lensAxisTag = (TextView) findViewById(R.id.lensAxisTag); + + // Register draggable views to receive drag events + principalRayView.setOnDragListener(this); + centralRayView.setOnDragListener(this); + focalRayView.setOnDragListener(this); + focusView.setOnDragListener(this); + objectView.setOnDragListener(this); + imageView.setOnDragListener(this); + lensView.setOnDragListener(this); + lensAxisView.setOnDragListener(this); + + // Register place holders to receive onLongclick events + principalRayTag.setOnLongClickListener(this); + centralRayTag.setOnLongClickListener(this); + focalRayTag.setOnLongClickListener(this); + focusTag.setOnLongClickListener(this); + objectTag.setOnLongClickListener(this); + imageTag.setOnLongClickListener(this); + lensTag.setOnLongClickListener(this); + lensAxisTag.setOnLongClickListener(this); + + // Register place holders to receive onClick events + principalRayTag.setOnClickListener(this); + centralRayTag.setOnClickListener(this); + focalRayTag.setOnClickListener(this); + focusTag.setOnClickListener(this); + objectTag.setOnClickListener(this); + imageTag.setOnClickListener(this); + lensTag.setOnClickListener(this); + lensAxisTag.setOnClickListener(this); + + placeHolderlist = container.diagramCaller("Lens"); + tagPlaceHolderMap = tagPlaceholdermapper.diagramMapper("Lens"); + incompleteTagList = tagPlaceholdermapper.diagramMapper("Lens"); + tagListSize = tagPlaceHolderMap.size(); + + openDB(); + + } + + @Override + public void onClick(View tagView) { + super.onClick(tagView); + + InfoTooltip popup; + + switch (tagView.getId()) { + case R.id.principalRayTag: + popup = new InfoTooltip(getApplicationContext(), + "This ray is initially parallel to the axis \n" + + "then passes through the focal point"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.centralRayTag: + popup = new InfoTooltip(getApplicationContext(), + "The ray that passes straight through the center \n" + + "of the lens and is not deflected"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.focalRayTag: + popup = new InfoTooltip(getApplicationContext(), + "This ray is directed through the other focal point,\n" + + "after passing the lens it goes parallel to the axis"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.focusTag: + popup = new InfoTooltip(getApplicationContext(), + "A point at which rays of light"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.objectTag: + popup = new InfoTooltip(getApplicationContext(), + "The material thing that can be seen"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.imageTag: + popup = new InfoTooltip(getApplicationContext(), + "The representation of the external form \n" + + "of the object may be in different size"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.lensTag: + popup = new InfoTooltip(getApplicationContext(), + "the lens having convex surface"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.lensAxisTag: + popup = new InfoTooltip(getApplicationContext(), + "An imaginary axis that passing through \n" + + "the center of the lens"); + popup.show(tagView, AlignMode.BOTTOM); + break; + + default: + break; + } + } + + @Override + protected int getResourcesId() { + // TODO Auto-generated method stub + return R.layout.diagram_play_lens; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_done: + quitPlay(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private void quitPlay() { + + super.dialogBuilder(DiagramPlayLens.this); + + } + + @Override + protected void dispatch(float totalScore, int gameScore) { + Intent intent = new Intent(getBaseContext(), DiagramResult.class); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "Lens"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("TRY_CYCLE", tryCycle); + startActivity(intent); + } + + @Override + protected void intentBuilder(String badgeTitle, int badgeId, + float totalScore, int gameScore, boolean completed, int tryCycle) { + Intent intent; + intent = new Intent(getBaseContext(), BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeTitle); + intent.putExtra("BADGE_ID", badgeId); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "Lens"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("COMPLETED", completed); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayMotor.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayMotor.java new file mode 100644 index 00000000..ebebca2f --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayMotor.java @@ -0,0 +1,229 @@ +package com.buildmlearn.labeldiagram; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.buildmlearn.labeldiagram.tooltipkit.InfoTooltip; +import com.buildmlearn.labeldiagram.tooltipkit.CustomTooltip.AlignMode; +import com.example.labelthediagram.R; + +public class DiagramPlayMotor extends DiagramPlayBase { + + @Override + public void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + actionBar.setTitle("Motor"); + setDiagramName("Motor"); + setDiagramCategory("Physics"); + + // Score board textViews + compeleteRatio = (TextView) findViewById(R.id.complete_ratio); + score = (TextView) findViewById(R.id.score); + + // Placeholder imageViews + ImageView northPoleView = (ImageView) findViewById(R.id.northPoleBlb); + ImageView southPoleView = (ImageView) findViewById(R.id.southPoleBlb); + ImageView magFieldView = (ImageView) findViewById(R.id.magFieldBlb); + ImageView forceView = (ImageView) findViewById(R.id.forceBlb); + ImageView axelView = (ImageView) findViewById(R.id.axelBlb); + ImageView batteryView = (ImageView) findViewById(R.id.batteryBlb); + ImageView commutatorView = (ImageView) findViewById(R.id.commutatorBlb); + ImageView brushView = (ImageView) findViewById(R.id.brushBlb); + ImageView armatureView = (ImageView) findViewById(R.id.armatureBlb); + + // Draggable Tags TextViews + TextView northPoleTag = (TextView) findViewById(R.id.northPoleTag); + TextView southPoleTag = (TextView) findViewById(R.id.southPoleTag); + TextView magFieldTag = (TextView) findViewById(R.id.magFieldTag); + TextView forceTag = (TextView) findViewById(R.id.forceTag); + TextView axelTag = (TextView) findViewById(R.id.axelTag); + TextView batteryTag = (TextView) findViewById(R.id.batteryTag); + TextView commutatorTag = (TextView) findViewById(R.id.commutatorTag); + TextView brushTag = (TextView) findViewById(R.id.brushTag); + TextView armatureTag = (TextView) findViewById(R.id.armatureTag); + + // Register draggable views to receive drag events + northPoleView.setOnDragListener(this); + southPoleView.setOnDragListener(this); + magFieldView.setOnDragListener(this); + forceView.setOnDragListener(this); + axelView.setOnDragListener(this); + batteryView.setOnDragListener(this); + commutatorView.setOnDragListener(this); + brushView.setOnDragListener(this); + armatureView.setOnDragListener(this); + + // Register place holders to receive onLongclick events + northPoleTag.setOnLongClickListener(this); + southPoleTag.setOnLongClickListener(this); + magFieldTag.setOnLongClickListener(this); + forceTag.setOnLongClickListener(this); + axelTag.setOnLongClickListener(this); + batteryTag.setOnLongClickListener(this); + commutatorTag.setOnLongClickListener(this); + brushTag.setOnLongClickListener(this); + armatureTag.setOnLongClickListener(this); + + // Register place holders to receive onClick events + northPoleTag.setOnClickListener(this); + southPoleTag.setOnClickListener(this); + magFieldTag.setOnClickListener(this); + forceTag.setOnClickListener(this); + axelTag.setOnClickListener(this); + batteryTag.setOnClickListener(this); + commutatorTag.setOnClickListener(this); + brushTag.setOnClickListener(this); + armatureTag.setOnClickListener(this); + + placeHolderlist = container.diagramCaller("Motor"); + tagPlaceHolderMap = tagPlaceholdermapper.diagramMapper("Motor"); + incompleteTagList = tagPlaceholdermapper.diagramMapper("Motor"); + tagListSize = tagPlaceHolderMap.size(); + + openDB(); + + } + + @Override + public void onClick(View tagView) { + super.onClick(tagView); + + InfoTooltip popup; + + switch (tagView.getId()) { + case R.id.northPoleTag: + popup = new InfoTooltip(getApplicationContext(), + "Northern end of the magnet"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.southPoleTag: + popup = new InfoTooltip(getApplicationContext(), + "Southern end of the magnet"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.magFieldTag: + popup = new InfoTooltip(getApplicationContext(), + "The region around a moving electric charge\n" + + " within which the force of magnetism acts"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.forceTag: + popup = new InfoTooltip(getApplicationContext(), + "Energy as an attribute of rotation of motor"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.axelTag: + popup = new InfoTooltip(getApplicationContext(), + "The metal rod of the motor"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.batteryTag: + popup = new InfoTooltip(getApplicationContext(), + "The power source which supplies current to amature"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.commutatorTag: + popup = new InfoTooltip(getApplicationContext(), + "A metal ring divided into two separate halves, \n" + + "which reverse the electric current in the coil"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.brushTag: + popup = new InfoTooltip(getApplicationContext(), + "Loose connectors made from pieces of graphite \n" + + "or springy metals which brush against \n" + + "the commutator"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.armatureTag: + popup = new InfoTooltip(getApplicationContext(), + "The rotating coil of the electric motor"); + popup.show(tagView, AlignMode.BOTTOM); + break; + + default: + break; + } + + } + + @Override + protected int getResourcesId() { + // TODO Auto-generated method stub + return R.layout.diagram_play_motor; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_done: + quitPlay(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private void quitPlay() { + + super.dialogBuilder(DiagramPlayMotor.this); + + } + + @Override + protected void dispatch(float totalScore, int gameScore) { + Intent intent = new Intent(getBaseContext(), DiagramResult.class); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "Motor"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("TRY_CYCLE", tryCycle); + startActivity(intent); + } + + @Override + protected void intentBuilder(String badgeTitle, int badgeId, float totalScore, int gameScore, boolean completed, int tryCycle) { + Intent intent; + intent = new Intent(getBaseContext(), BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeTitle); + intent.putExtra("BADGE_ID", badgeId); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "Motor"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("COMPLETED", completed); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayPlantCell.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayPlantCell.java new file mode 100644 index 00000000..f03777fb --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayPlantCell.java @@ -0,0 +1,246 @@ +package com.buildmlearn.labeldiagram; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.buildmlearn.labeldiagram.tooltipkit.InfoTooltip; +import com.buildmlearn.labeldiagram.tooltipkit.CustomTooltip.AlignMode; +import com.example.labelthediagram.R; + +public class DiagramPlayPlantCell extends DiagramPlayBase{ + + @Override + public void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + actionBar.setTitle("Plant Cell"); + setDiagramName("PlantCell"); + setDiagramCategory("Biology"); + + // Score board textViews + TextView completeTxt = (TextView) findViewById(R.id.complatedTxt); + compeleteRatio = (TextView) findViewById(R.id.complete_ratio); + TextView scoreTxt = (TextView) findViewById(R.id.scoreTxt); + score = (TextView) findViewById(R.id.score); + + // Setting up font face to Roboto Light/Thin + completeTxt.setTypeface(tfThin); + scoreTxt.setTypeface(tfThin); + compeleteRatio.setTypeface(tfThin); + score.setTypeface(tfThin); + + // Placeholder imageViews + ImageView ribosomeView = (ImageView) findViewById(R.id.ribosomesBlb); + ImageView smootherView = (ImageView) findViewById(R.id.smootherBlb); + ImageView rougherView = (ImageView) findViewById(R.id.rougherBlb); + ImageView nucleusView = (ImageView) findViewById(R.id.nucleusBlb); + ImageView vacuoleView = (ImageView) findViewById(R.id.vacuoleBlb); + ImageView cellwallView = (ImageView) findViewById(R.id.cellwallBlb); + ImageView cellMembranwView = (ImageView) findViewById(R.id.cell_membraneBlb); + ImageView mitichondriunView = (ImageView) findViewById(R.id.mitochondriumBlb); + ImageView choloroplatView = (ImageView) findViewById(R.id.chloroplastBlb); + ImageView golgiView = (ImageView) findViewById(R.id.golgi_complexBlb); + + // Draggable Tags TextViews + TextView ribosomeTag = (TextView) findViewById(R.id.ribosomeTag); + TextView smootherTag = (TextView) findViewById(R.id.smootherTag); + TextView rougherTag = (TextView) findViewById(R.id.rougherTag); + TextView nucleusTag = (TextView) findViewById(R.id.nucleusTag); + TextView vacuoleTag = (TextView) findViewById(R.id.vacuoleTag); + TextView cellwallTag = (TextView) findViewById(R.id.cellwallTag); + TextView cellMembraneTag = (TextView) findViewById(R.id.cell_membraneTag); + TextView mitochondiunTag = (TextView) findViewById(R.id.mitochondiumTag); + TextView chloroplastTag = (TextView) findViewById(R.id.chloroplastTag); + TextView golgiTag = (TextView) findViewById(R.id.golgi_complexTag); + + // Register draggable views to receive drag events + ribosomeView.setOnDragListener(this); + smootherView.setOnDragListener(this); + rougherView.setOnDragListener(this); + nucleusView.setOnDragListener(this); + vacuoleView.setOnDragListener(this); + cellwallView.setOnDragListener(this); + cellMembranwView.setOnDragListener(this); + mitichondriunView.setOnDragListener(this); + choloroplatView.setOnDragListener(this); + golgiView.setOnDragListener(this); + + + // Register place holders to receive onLongclick events + ribosomeTag.setOnLongClickListener(this); + smootherTag.setOnLongClickListener(this); + rougherTag.setOnLongClickListener(this); + nucleusTag.setOnLongClickListener(this); + vacuoleTag.setOnLongClickListener(this); + cellwallTag.setOnLongClickListener(this); + cellMembraneTag.setOnLongClickListener(this); + mitochondiunTag.setOnLongClickListener(this); + chloroplastTag.setOnLongClickListener(this); + golgiTag.setOnLongClickListener(this); + + // Register place holders to receive onClick events + ribosomeTag.setOnClickListener(this); + smootherTag.setOnClickListener(this); + rougherTag.setOnClickListener(this); + nucleusTag.setOnClickListener(this); + vacuoleTag.setOnClickListener(this); + cellwallTag.setOnClickListener(this); + cellMembraneTag.setOnClickListener(this); + mitochondiunTag.setOnClickListener(this); + chloroplastTag.setOnClickListener(this); + golgiTag.setOnClickListener(this); + + placeHolderlist = container.diagramCaller("PlantCell"); + tagPlaceHolderMap = tagPlaceholdermapper.diagramMapper("PlantCell"); + incompleteTagList = tagPlaceholdermapper.diagramMapper("PlantCell"); + tagListSize = tagPlaceHolderMap.size(); + + openDB(); + + } + + + @Override + public void onClick(View tagView) { + // TODO Extract messages to separate container + switch (tagView.getId()) { + case R.id.ribosomeTag: + InfoTooltip popup = new InfoTooltip(getApplicationContext(), + " Structures that assemble proteins. "); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.smootherTag: + InfoTooltip popup1 = new InfoTooltip(getApplicationContext(), + "Carries substances, like proteins,\n" + + " to various parts of the cell"); + popup1.show(tagView, AlignMode.BOTTOM); + break; + case R.id.rougherTag: + InfoTooltip popup2 = new InfoTooltip( + getApplicationContext(), + "Carries substances. Attached with ribosones"); + popup2.show(tagView, AlignMode.BOTTOM); + break; + case R.id.nucleusTag: + InfoTooltip popup3 = new InfoTooltip(getApplicationContext(), + "Control center of the cell.\n Makes Ribosomes"); + popup3.show(tagView, AlignMode.BOTTOM); + break; + case R.id.vacuoleTag: + InfoTooltip popup4 = new InfoTooltip(getApplicationContext(), + "Stores water, food, waste and more \n" + + "for a plant cell"); + popup4.show(tagView, AlignMode.BOTTOM); + break; + case R.id.cellwallTag: + InfoTooltip popup5 = new InfoTooltip( + getApplicationContext(), + " Helps protect and support the cell.\n" + + " Gives a plant cell a shape"); + popup5.show(tagView, AlignMode.BOTTOM); + break; + case R.id.cell_membraneTag: + InfoTooltip popup6 = new InfoTooltip(getApplicationContext(), + "Controls what goes in and out of the cell"); + popup6.show(tagView, AlignMode.BOTTOM); + break; + case R.id.mitochondiumTag: + InfoTooltip popup7 = new InfoTooltip(getApplicationContext(), + "Organelle that produce \n" + + "most of the cells energy"); + popup7.show(tagView, AlignMode.BOTTOM); + break; + case R.id.chloroplastTag: + InfoTooltip popup8 = new InfoTooltip(getApplicationContext(), + "Captures energy from sunlight.\n" + + " Uses energy to produce cell food"); + popup8.show(tagView, AlignMode.BOTTOM); + break; + case R.id.golgi_complexTag: + InfoTooltip popup9 = new InfoTooltip(getApplicationContext(), + "The unit where proteins are \nsorted and packed"); + popup9.show(tagView, AlignMode.BOTTOM); + break; + default: + break; + } + } + + + @Override + protected int getResourcesId() { + // TODO Auto-generated method stub + return R.layout.diagram_play_plantcell; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // TODO Auto-generated method stub + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_done: + quitPlay(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private void quitPlay() { + + super.dialogBuilder(DiagramPlayPlantCell.this); + + } + + @Override + protected void dispatch(float totalScore, int gameScore) { + Intent intent = new Intent(getBaseContext(), DiagramResult.class); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "PlantCell"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("TRY_CYCLE", tryCycle); + startActivity(intent); + } + + @Override + protected void intentBuilder(String badgeTitle, int badgeId, float totalScore, int gameScore, boolean completed, int tryCycle) { + Intent intent; + intent = new Intent(getBaseContext(), BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeTitle); + intent.putExtra("BADGE_ID", badgeId); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "PlantCell"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("COMPLETED", completed); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayPlantFlower.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayPlantFlower.java new file mode 100644 index 00000000..6834fedc --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayPlantFlower.java @@ -0,0 +1,265 @@ +package com.buildmlearn.labeldiagram; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.buildmlearn.labeldiagram.tooltipkit.InfoTooltip; +import com.buildmlearn.labeldiagram.tooltipkit.CustomTooltip.AlignMode; +import com.example.labelthediagram.R; + +public class DiagramPlayPlantFlower extends DiagramPlayBase { + + @Override + public void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + actionBar.setTitle("Plant Flower"); + setDiagramName("PlantFlower"); + setDiagramCategory("Biology"); + + // Score board textViews + TextView completeTxt = (TextView) findViewById(R.id.complatedTxt); + compeleteRatio = (TextView) findViewById(R.id.complete_ratio); + TextView scoreTxt = (TextView) findViewById(R.id.scoreTxt); + score = (TextView) findViewById(R.id.score); + + // Setting up font face to Roboto Light/Thin + completeTxt.setTypeface(tfThin); + scoreTxt.setTypeface(tfThin); + compeleteRatio.setTypeface(tfThin); + score.setTypeface(tfThin); + + // Placeholder imageViews + ImageView antherView = (ImageView) findViewById(R.id.antherBlb); + ImageView petalView = (ImageView) findViewById(R.id.petalBlb); + ImageView receptacleView = (ImageView) findViewById(R.id.receptacleBlb); + ImageView pedicelView = (ImageView) findViewById(R.id.pedicelBlb); + ImageView stigmaView = (ImageView) findViewById(R.id.stigmaBlb); + ImageView styleView = (ImageView) findViewById(R.id.styleBlb); + ImageView overyView = (ImageView) findViewById(R.id.overyBlb); + ImageView filamentView = (ImageView) findViewById(R.id.filamentBlb); + ImageView sepalView = (ImageView) findViewById(R.id.sepalBlb); + ImageView ovuleView = (ImageView) findViewById(R.id.ovuleBlb); + + // Draggable Tags TextViews + TextView antherTag = (TextView) findViewById(R.id.antherTag); + TextView petalTag = (TextView) findViewById(R.id.petalTag); + TextView receptacleTag = (TextView) findViewById(R.id.receptacleTag); + TextView pedicelTag = (TextView) findViewById(R.id.pedicelTag); + TextView stigmaTag = (TextView) findViewById(R.id.stigmaTag); + TextView styleTag = (TextView) findViewById(R.id.styleTag); + TextView overyTag = (TextView) findViewById(R.id.overyTag); + TextView filamentTag = (TextView) findViewById(R.id.filamentTag); + TextView sepalTag = (TextView) findViewById(R.id.sepalTag); + TextView ovuleTag = (TextView) findViewById(R.id.ovuleTag); + + // Register draggable views to receive drag events + antherView.setOnDragListener(this); + petalView.setOnDragListener(this); + receptacleView.setOnDragListener(this); + pedicelView.setOnDragListener(this); + stigmaView.setOnDragListener(this); + styleView.setOnDragListener(this); + overyView.setOnDragListener(this); + filamentView.setOnDragListener(this); + sepalView.setOnDragListener(this); + ovuleView.setOnDragListener(this); + + // Register place holders to receive onLongclick events + antherTag.setOnLongClickListener(this); + petalTag.setOnLongClickListener(this); + receptacleTag.setOnLongClickListener(this); + pedicelTag.setOnLongClickListener(this); + stigmaTag.setOnLongClickListener(this); + styleTag.setOnLongClickListener(this); + overyTag.setOnLongClickListener(this); + filamentTag.setOnLongClickListener(this); + sepalTag.setOnLongClickListener(this); + ovuleTag.setOnLongClickListener(this); + + // Register place holders to receive onLongclick events + antherTag.setOnClickListener(this); + petalTag.setOnClickListener(this); + receptacleTag.setOnClickListener(this); + pedicelTag.setOnClickListener(this); + stigmaTag.setOnClickListener(this); + styleTag.setOnClickListener(this); + overyTag.setOnClickListener(this); + filamentTag.setOnClickListener(this); + sepalTag.setOnClickListener(this); + ovuleTag.setOnClickListener(this); + + placeHolderlist = container.diagramCaller("PlantFlower"); + tagPlaceHolderMap = tagPlaceholdermapper.diagramMapper("PlantFlower"); + incompleteTagList = tagPlaceholdermapper.diagramMapper("PlantFlower"); + tagListSize = tagPlaceHolderMap.size(); + + openDB(); + + } + + /*@Override + public void onWindowFocusChanged(boolean hasFocus) { + // TODO Auto-generated method stub + super.onWindowFocusChanged(hasFocus); + // Here you can get the size! + + RelativeLayout scorePos = (RelativeLayout) findViewById(R.id.scoreTab); + ImageView holderPos = (ImageView) findViewById(R.id.tagHolder); + RelativeLayout container = (RelativeLayout) findViewById(R.id.imageContainer); + + + container.getLayoutParams().height= holderPos.getTop()-scorePos.getBottom(); + + int conTop = scorePos.getTop(); + int conBot = scorePos.getBottom(); + + int mainTop = holderPos.getTop(); + int mainBot = holderPos.getBottom(); + addition = (conTop-mainTop)+(mainBot-conBot); + + Log.i("Height", mainTop + " " + conTop + ""); + }*/ + + @Override + public void onClick(View tagView) { + // TODO Extract messages to separate container + switch (tagView.getId()) { + case R.id.antherTag: + InfoTooltip popup = new InfoTooltip(getApplicationContext(), + " Produces male gametes - pollen "); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.petalTag: + InfoTooltip popup1 = new InfoTooltip(getApplicationContext(), + "Brightly coloured, attract insects"); + popup1.show(tagView, AlignMode.BOTTOM); + break; + case R.id.receptacleTag: + InfoTooltip popup2 = new InfoTooltip(getApplicationContext(), + " Base of the flower "); + popup2.show(tagView, AlignMode.BOTTOM); + break; + case R.id.pedicelTag: + InfoTooltip popup3 = new InfoTooltip(getApplicationContext(), + "Flower stalk of an individual \nflower in an inflorescence "); + popup3.show(tagView, AlignMode.BOTTOM); + break; + case R.id.stigmaTag: + InfoTooltip popup4 = new InfoTooltip(getApplicationContext(), + "Sticky portion at the top of the style\n" + + " where pollen grains usually land "); + popup4.show(tagView, AlignMode.BOTTOM); + break; + case R.id.styleTag: + InfoTooltip popup5 = new InfoTooltip( + getApplicationContext(), + "The narrow elongated part of the pistil\n" + + " between the ovary and the stigma,\n grows pollen tube "); + popup5.show(tagView, AlignMode.BOTTOM); + break; + case R.id.overyTag: + InfoTooltip popup6 = new InfoTooltip(getApplicationContext(), + "Contains ovules. After fetilisation,\n" + + " the ovary swells to produce fruit"); + popup6.show(tagView, AlignMode.BOTTOM); + break; + case R.id.filamentTag: + InfoTooltip popup7 = new InfoTooltip(getApplicationContext(), + "Supports anther to make it accessible to insects"); + popup7.show(tagView, AlignMode.BOTTOM); + break; + case R.id.sepalTag: + InfoTooltip popup8 = new InfoTooltip(getApplicationContext(), + "External covering of flower bud"); + popup8.show(tagView, AlignMode.BOTTOM); + break; + case R.id.ovuleTag: + InfoTooltip popup9 = new InfoTooltip(getApplicationContext(), + "In seed plants, the female reproductive\n" + + " part that produces the gamete - egg"); + popup9.show(tagView, AlignMode.BOTTOM); + break; + default: + break; + } + } + + @Override + protected int getResourcesId() { + // TODO Auto-generated method stub + return R.layout.diagram_play_plantflower; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // TODO Auto-generated method stub + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_done: + quitPlay(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private void quitPlay() { + + super.dialogBuilder(DiagramPlayPlantFlower.this); + + } + + @Override + protected void dispatch(float totalScore, int gameScore) { + Intent intent = new Intent(getBaseContext(), DiagramResult.class); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "PlantFlower"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("TRY_CYCLE", tryCycle); + startActivity(intent); + } + + @Override + protected void intentBuilder(String badgeTitle, int badgeId, float totalScore, int gameScore, boolean completed, int tryCycle) { + Intent intent; + intent = new Intent(getApplicationContext(), BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeTitle); + intent.putExtra("BADGE_ID", badgeId); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "PlantFlower"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("COMPLETED", completed); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayPrism.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayPrism.java new file mode 100644 index 00000000..4a85b2d1 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayPrism.java @@ -0,0 +1,220 @@ +package com.buildmlearn.labeldiagram; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.buildmlearn.labeldiagram.tooltipkit.InfoTooltip; +import com.buildmlearn.labeldiagram.tooltipkit.CustomTooltip.AlignMode; +import com.example.labelthediagram.R; + +public class DiagramPlayPrism extends DiagramPlayBase { + + @Override + public void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + actionBar.setTitle("Prism"); + setDiagramName("Prism"); + setDiagramCategory("Physics"); + + // Score board textViews + compeleteRatio = (TextView) findViewById(R.id.complete_ratio); + score = (TextView) findViewById(R.id.score); + + // Placeholder imageViews + ImageView prismAngleView = (ImageView) findViewById(R.id.prismAngleBlb); + ImageView refAngleView = (ImageView) findViewById(R.id.refAngleBlb); + ImageView incAngleView = (ImageView) findViewById(R.id.incAngleBlb); + ImageView incRayView = (ImageView) findViewById(R.id.incRayBlb); + ImageView devAngleView = (ImageView) findViewById(R.id.devAngleBlb); + ImageView refRayView = (ImageView) findViewById(R.id.refRayBlb); + ImageView emergeAngleView = (ImageView) findViewById(R.id.emergeAngleBlb); + ImageView emergeRayView = (ImageView) findViewById(R.id.emergeRayBlb); + + // Draggable Tags imageViews + TextView prismAngleTag = (TextView) findViewById(R.id.prismAngleTag); + TextView refAngleTag = (TextView) findViewById(R.id.refAngleTag); + TextView incAngleTag = (TextView) findViewById(R.id.incAngleTag); + TextView incRayTag = (TextView) findViewById(R.id.incRayTag); + TextView devAngleTag = (TextView) findViewById(R.id.devAngleTag); + TextView refRayTag = (TextView) findViewById(R.id.refRayTag); + TextView emergeAngleTag = (TextView) findViewById(R.id.emergeAngleTag); + TextView emergeRayTag = (TextView) findViewById(R.id.emergeRayTag); + + // Register draggable views to receive drag events + prismAngleView.setOnDragListener(this); + refAngleView.setOnDragListener(this); + incAngleView.setOnDragListener(this); + incRayView.setOnDragListener(this); + devAngleView.setOnDragListener(this); + refRayView.setOnDragListener(this); + emergeAngleView.setOnDragListener(this); + emergeRayView.setOnDragListener(this); + + // Register place holders to receive onLongclick events + prismAngleTag.setOnLongClickListener(this); + refAngleTag.setOnLongClickListener(this); + incAngleTag.setOnLongClickListener(this); + incRayTag.setOnLongClickListener(this); + devAngleTag.setOnLongClickListener(this); + refRayTag.setOnLongClickListener(this); + emergeAngleTag.setOnLongClickListener(this); + emergeRayTag.setOnLongClickListener(this); + + // Register place holders to receive onClick events + prismAngleTag.setOnClickListener(this); + refAngleTag.setOnClickListener(this); + incAngleTag.setOnClickListener(this); + incRayTag.setOnClickListener(this); + devAngleTag.setOnClickListener(this); + refRayTag.setOnClickListener(this); + emergeAngleTag.setOnClickListener(this); + emergeRayTag.setOnClickListener(this); + + placeHolderlist = container.diagramCaller("Prism"); + tagPlaceHolderMap = tagPlaceholdermapper.diagramMapper("Prism"); + incompleteTagList = tagPlaceholdermapper.diagramMapper("Prism"); + tagListSize = tagPlaceHolderMap.size(); + + openDB(); + + } + + @Override + public void onClick(View tagView) { + super.onClick(tagView); + + InfoTooltip popup; + + switch (tagView.getId()) { + case R.id.prismAngleTag: + popup = new InfoTooltip(getApplicationContext(), + "The apex angle of the prism"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.refAngleTag: + popup = new InfoTooltip(getApplicationContext(), + "The angle with which the light ray \n" + + "enters the glass slab"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.incAngleTag: + popup = new InfoTooltip(getApplicationContext(), + "The angle formed by a ray incident on prism surface" + + "\n and a line perpendicular to the prism surface" + + "\n at the point of incidence"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.incRayTag: + popup = new InfoTooltip(getApplicationContext(), + "The ray of light that pointing towards the prism"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.devAngleTag: + popup = new InfoTooltip(getApplicationContext(), + "The angle between the original incident beam \n" + + "and the final transmitted beam"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.refRayTag: + popup = new InfoTooltip(getApplicationContext(), + "The ray that undergoes a change of velocity \n" + + "and direction"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.emergeAngleTag: + popup = new InfoTooltip(getApplicationContext(), + "The angle with which the light ray leaves the glass slab"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.emergeRayTag: + popup = new InfoTooltip(getApplicationContext(), + "The ray of light which passes through \n" + + "the denser medium to the rarer medium"); + popup.show(tagView, AlignMode.BOTTOM); + break; + default: + break; + } + + } + + @Override + protected int getResourcesId() { + return R.layout.diagram_play_prism; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_done: + quitPlay(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private void quitPlay() { + + super.dialogBuilder(DiagramPlayPrism.this); + + } + + @Override + protected void dispatch(float totalScore, int gameScore) { + Intent intent = new Intent(getBaseContext(), DiagramResult.class); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "Prism"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("TRY_CYCLE", tryCycle); + startActivity(intent); + } + + @Override + protected void intentBuilder(String badgeTitle, int badgeId, + float totalScore, int gameScore, boolean completed, int tryCycle) { + Intent intent; + intent = new Intent(getApplicationContext(), BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeTitle); + intent.putExtra("BADGE_ID", badgeId); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "Prism"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("COMPLETED", completed); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlaySolarSystem.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlaySolarSystem.java new file mode 100644 index 00000000..140785ed --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlaySolarSystem.java @@ -0,0 +1,234 @@ +package com.buildmlearn.labeldiagram; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.buildmlearn.labeldiagram.tooltipkit.InfoTooltip; +import com.buildmlearn.labeldiagram.tooltipkit.CustomTooltip.AlignMode; +import com.example.labelthediagram.R; + +public class DiagramPlaySolarSystem extends DiagramPlayBase { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + actionBar.setTitle("Solar System"); + setDiagramName("SolarSystem"); + setDiagramCategory("Science"); + + // Score board textViews + compeleteRatio = (TextView) findViewById(R.id.complete_ratio); + score = (TextView) findViewById(R.id.score); + + // Placeholder imageViews + ImageView sunView = (ImageView) findViewById(R.id.sunBlb); + ImageView mercuryView = (ImageView) findViewById(R.id.mercuryBlb); + ImageView venusView = (ImageView) findViewById(R.id.venusBlb); + ImageView earthView = (ImageView) findViewById(R.id.earthBlb); + ImageView marsView = (ImageView) findViewById(R.id.marsBlb); + ImageView jupiterView = (ImageView) findViewById(R.id.jupiterBlb); + ImageView saturnView = (ImageView) findViewById(R.id.saturnBlb); + ImageView uranusView = (ImageView) findViewById(R.id.uranusBlb); + ImageView neptuneView = (ImageView) findViewById(R.id.neptuneBlb); + + // Draggable Tags TextViews + TextView sunTag = (TextView) findViewById(R.id.sunTag); + TextView mercuryTag = (TextView) findViewById(R.id.mercuryTag); + TextView venusTag = (TextView) findViewById(R.id.venusTag); + TextView earthTag = (TextView) findViewById(R.id.earthTag); + TextView marsTag = (TextView) findViewById(R.id.marsTag); + TextView jupiterTag = (TextView) findViewById(R.id.jupiterTag); + TextView saturnTag = (TextView) findViewById(R.id.saturnTag); + TextView uranusTag = (TextView) findViewById(R.id.uranusTag); + TextView neptuneTag = (TextView) findViewById(R.id.neptuneTag); + + // Register draggable views to receive drag events + sunView.setOnDragListener(this); + mercuryView.setOnDragListener(this); + venusView.setOnDragListener(this); + earthView.setOnDragListener(this); + marsView.setOnDragListener(this); + jupiterView.setOnDragListener(this); + saturnView.setOnDragListener(this); + uranusView.setOnDragListener(this); + neptuneView.setOnDragListener(this); + + // Register place holders to receive onLongclick events + sunTag.setOnLongClickListener(this); + mercuryTag.setOnLongClickListener(this); + venusTag.setOnLongClickListener(this); + earthTag.setOnLongClickListener(this); + marsTag.setOnLongClickListener(this); + jupiterTag.setOnLongClickListener(this); + saturnTag.setOnLongClickListener(this); + uranusTag.setOnLongClickListener(this); + neptuneTag.setOnLongClickListener(this); + + // Register place holders to receive onClick events + sunTag.setOnClickListener(this); + mercuryTag.setOnClickListener(this); + venusTag.setOnClickListener(this); + earthTag.setOnClickListener(this); + marsTag.setOnClickListener(this); + jupiterTag.setOnClickListener(this); + saturnTag.setOnClickListener(this); + uranusTag.setOnClickListener(this); + neptuneTag.setOnClickListener(this); + + placeHolderlist = container.diagramCaller("SolarSystem"); + tagPlaceHolderMap = tagPlaceholdermapper.diagramMapper("SolarSystem"); + incompleteTagList = tagPlaceholdermapper.diagramMapper("SolarSystem"); + tagListSize = tagPlaceHolderMap.size(); + + openDB(); + + } + + @Override + public void onClick(View tagView) { + super.onClick(tagView); + + InfoTooltip popup; + + switch (tagView.getId()) { + case R.id.sunTag: + popup = new InfoTooltip(getApplicationContext(), + "The star at the center of the Solar System \n" + + "and the most important source of energy \n" + + "for life on"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.mercuryTag: + popup = new InfoTooltip(getApplicationContext(), + "Fastest planet and has the greatest \n" + + "temperature variation of the planets \n" + + "in the Solar System"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.venusTag: + popup = new InfoTooltip(getApplicationContext(), + "After the Moon, this is the brightest \n" + + "natural object in the night sky"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.earthTag: + popup = new InfoTooltip(getApplicationContext(), + "The only astronomical object \n" + + "known to accommodate life"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.marsTag: + popup = new InfoTooltip(getApplicationContext(), + "Second smallest planet in solar system"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.jupiterTag: + popup = new InfoTooltip(getApplicationContext(), + "The largest planet in the Solar System \n" + + "with a mass one-thousandth that of the Sun"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.saturnTag: + popup = new InfoTooltip(getApplicationContext(), + "The second largest in the Solar System \n" + + "and has a prominent ring system"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.uranusTag: + popup = new InfoTooltip(getApplicationContext(), + "Has the third-largest planetary radius \n" + + "and fourth-largest planetary mass"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.neptuneTag: + popup = new InfoTooltip(getApplicationContext(), + "The most far away planet from the sun \n" + + "in the Solar System"); + popup.show(tagView, AlignMode.BOTTOM); + break; + + default: + break; + } + + } + + @Override + protected int getResourcesId() { + return R.layout.diagram_play_solar_system; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_done: + quitPlay(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private void quitPlay() { + + super.dialogBuilder(DiagramPlaySolarSystem.this); + + } + + @Override + protected void dispatch(float totalScore, int gameScore) { + Intent intent = new Intent(getBaseContext(), DiagramResult.class); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "SolarSystem"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("TRY_CYCLE", tryCycle); + startActivity(intent); + } + + @Override + protected void intentBuilder(String badgeTitle, int badgeId, + float totalScore, int gameScore, boolean completed, int tryCycle) { + Intent intent; + intent = new Intent(getApplicationContext(), BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeTitle); + intent.putExtra("BADGE_ID", badgeId); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "SolarSystem"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("COMPLETED", completed); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlaySpectrum.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlaySpectrum.java new file mode 100644 index 00000000..f15fc2c4 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlaySpectrum.java @@ -0,0 +1,239 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.buildmlearn.labeldiagram.tooltipkit.InfoTooltip; +import com.buildmlearn.labeldiagram.tooltipkit.CustomTooltip.AlignMode; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +public class DiagramPlaySpectrum extends DiagramPlayBase { + + @Override + public void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + actionBar.setTitle("Spectrum"); + setDiagramName("Spectrum"); + setDiagramCategory("Physics"); + + // Score board textViews + compeleteRatio = (TextView) findViewById(R.id.complete_ratio); + score = (TextView) findViewById(R.id.score); + + // Placeholder imageViews + ImageView amView = (ImageView) findViewById(R.id.amBlb); + ImageView fmView = (ImageView) findViewById(R.id.fmBlb); + ImageView microwaveView = (ImageView) findViewById(R.id.microwaveBlb); + ImageView visibleLightView = (ImageView) findViewById(R.id.visibleLightBlb); + ImageView radio_wavesView = (ImageView) findViewById(R.id.radio_wavesBlb); + ImageView irView = (ImageView) findViewById(R.id.irBlb); + ImageView uvView = (ImageView) findViewById(R.id.uvBlb); + ImageView xrayView = (ImageView) findViewById(R.id.xrayBlb); + ImageView gammaView = (ImageView) findViewById(R.id.gammaBlb); + + // Draggable Tags TextViews + TextView amTag = (TextView) findViewById(R.id.amTag); + TextView fmTag = (TextView) findViewById(R.id.fmTag); + TextView microwaveTag = (TextView) findViewById(R.id.microwaveTag); + TextView visibleLightTag = (TextView) findViewById(R.id.visibleLightTag); + TextView radio_wavesTag = (TextView) findViewById(R.id.radio_wavesTag); + TextView irTag = (TextView) findViewById(R.id.irTag); + TextView uvTag = (TextView) findViewById(R.id.uvTag); + TextView xrayTag = (TextView) findViewById(R.id.xrayTag); + TextView gammaTag = (TextView) findViewById(R.id.gammaTag); + + // Register draggable views to receive drag events + amView.setOnDragListener(this); + fmView.setOnDragListener(this); + microwaveView.setOnDragListener(this); + visibleLightView.setOnDragListener(this); + radio_wavesView.setOnDragListener(this); + irView.setOnDragListener(this); + uvView.setOnDragListener(this); + xrayView.setOnDragListener(this); + gammaView.setOnDragListener(this); + + // Register place holders to receive onLongclick events + amTag.setOnLongClickListener(this); + fmTag.setOnLongClickListener(this); + microwaveTag.setOnLongClickListener(this); + visibleLightTag.setOnLongClickListener(this); + radio_wavesTag.setOnLongClickListener(this); + irTag.setOnLongClickListener(this); + uvTag.setOnLongClickListener(this); + xrayTag.setOnLongClickListener(this); + gammaTag.setOnLongClickListener(this); + + // Register place holders to receive onClick events + amTag.setOnClickListener(this); + fmTag.setOnClickListener(this); + microwaveTag.setOnClickListener(this); + visibleLightTag.setOnClickListener(this); + radio_wavesTag.setOnClickListener(this); + irTag.setOnClickListener(this); + uvTag.setOnClickListener(this); + xrayTag.setOnClickListener(this); + gammaTag.setOnClickListener(this); + + placeHolderlist = container.diagramCaller("Spectrum"); + tagPlaceHolderMap = tagPlaceholdermapper.diagramMapper("Spectrum"); + incompleteTagList = tagPlaceholdermapper.diagramMapper("Spectrum"); + tagListSize = tagPlaceHolderMap.size(); + + openDB(); + + } + + @Override + public void onClick(View tagView) { + super.onClick(tagView); + + InfoTooltip popup; + + switch (tagView.getId()) { + case R.id.amTag: + popup = new InfoTooltip( + getApplicationContext(), + "The Amplitude Modulation are ways of \n " + + "broadcasting radio signals, which ranges\n " + + "from 535 to 1605 kHz"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.fmTag: + popup = new InfoTooltip(getApplicationContext(), + "The Frequency Modulation radio ranges from 88 to 108 MHz"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.microwaveTag: + popup = new InfoTooltip(getApplicationContext(), + "Having a wavelength (in the range 0.001–0.3 m)" + + "\n shorter than that of a normal radio wave" + + "\n but longer than those of infrared radiation"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.visibleLightTag: + popup = new InfoTooltip(getApplicationContext(), + "The wavelengths that are visible to most human eyes"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.radio_wavesTag: + popup = new InfoTooltip(getApplicationContext(), + "EM radiation which has frequencies from \n" + + "300 GHz to 3 kHz. Two frequency ranges,\n AM and FM"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.irTag: + popup = new InfoTooltip( + getApplicationContext(), + "Having a wavelength just greater than " + + "that of the red end of the visible light spectrum"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.uvTag: + popup = new InfoTooltip(getApplicationContext(), + "Having a wavelength shorter than that of the" + + "\n violet end of the visible spectrum " + + "\n but longer than that of X-rays"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.xrayTag: + popup = new InfoTooltip( + getApplicationContext(), + "Have a wavelength ranging from 0.01 to 10 nm, \n" + + "corresponding to frequencies in the range \n" + + "3×10^16 Hz to 3×10^19 Hz"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.gammaTag: + popup = new InfoTooltip( + getApplicationContext(), + "Have the smallest wavelengths and the most energy \n" + + "of any wave in the EM spectrum"); + popup.show(tagView, AlignMode.BOTTOM); + break; + + default: + break; + } + } + + @Override + protected int getResourcesId() { + // TODO Auto-generated method stub + return R.layout.diagram_play_spectrum; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_done: + quitPlay(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private void quitPlay() { + + super.dialogBuilder(DiagramPlaySpectrum.this); + + } + + @Override + protected void dispatch(float totalScore, int gameScore) { + Intent intent = new Intent(getBaseContext(), DiagramResult.class); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "Spectrum"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("TRY_CYCLE", tryCycle); + startActivity(intent); + } + + @Override + protected void intentBuilder(String badgeTitle, int badgeId, + float totalScore, int gameScore, boolean completed, int tryCycle) { + Intent intent; + intent = new Intent(getApplicationContext(), BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeTitle); + intent.putExtra("BADGE_ID", badgeId); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "Spectrum"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("COMPLETED", completed); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayStarPatterns.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayStarPatterns.java new file mode 100644 index 00000000..b0aadf82 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayStarPatterns.java @@ -0,0 +1,222 @@ +package com.buildmlearn.labeldiagram; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.buildmlearn.labeldiagram.tooltipkit.InfoTooltip; +import com.buildmlearn.labeldiagram.tooltipkit.CustomTooltip.AlignMode; +import com.example.labelthediagram.R; + +public class DiagramPlayStarPatterns extends DiagramPlayBase { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + actionBar.setTitle("Star Patterns"); + setDiagramName("StarPatterns"); + setDiagramCategory("Science"); + + // Score board textViews + compeleteRatio = (TextView) findViewById(R.id.complete_ratio); + score = (TextView) findViewById(R.id.score); + + // Placeholder imageViews + ImageView libraView = (ImageView) findViewById(R.id.libraBlb); + ImageView little_dripperView = (ImageView) findViewById(R.id.little_dripperBlb); + ImageView big_dripperView = (ImageView) findViewById(R.id.big_dripperBlb); + ImageView scorpioView = (ImageView) findViewById(R.id.scorpioBlb); + ImageView orianView = (ImageView) findViewById(R.id.orianBlb); + ImageView leoView = (ImageView) findViewById(R.id.leoBlb); + ImageView geminiView = (ImageView) findViewById(R.id.geminiBlb); + ImageView dracoView = (ImageView) findViewById(R.id.dracoBlb); + + // Draggable Tags TextViews + TextView libraTag = (TextView) findViewById(R.id.libraTag); + TextView little_dripperTag = (TextView) findViewById(R.id.little_dripperTag); + TextView big_dripperTag = (TextView) findViewById(R.id.big_dripperTag); + TextView scorpioTag = (TextView) findViewById(R.id.scorpioTag); + TextView orianTag = (TextView) findViewById(R.id.orianTag); + TextView leoTag = (TextView) findViewById(R.id.leoTag); + TextView geminiTag = (TextView) findViewById(R.id.geminiTag); + TextView dracoTag = (TextView) findViewById(R.id.dracoTag); + + // Register draggable views to receive drag events + libraView.setOnDragListener(this); + little_dripperView.setOnDragListener(this); + big_dripperView.setOnDragListener(this); + scorpioView.setOnDragListener(this); + orianView.setOnDragListener(this); + leoView.setOnDragListener(this); + geminiView.setOnDragListener(this); + dracoView.setOnDragListener(this); + + // Register place holders to receive onLongclick events + libraTag.setOnLongClickListener(this); + little_dripperTag.setOnLongClickListener(this); + big_dripperTag.setOnLongClickListener(this); + scorpioTag.setOnLongClickListener(this); + orianTag.setOnLongClickListener(this); + leoTag.setOnLongClickListener(this); + geminiTag.setOnLongClickListener(this); + dracoTag.setOnLongClickListener(this); + + // Register place holders to receive onClick events + libraTag.setOnClickListener(this); + little_dripperTag.setOnClickListener(this); + big_dripperTag.setOnClickListener(this); + scorpioTag.setOnClickListener(this); + orianTag.setOnClickListener(this); + leoTag.setOnClickListener(this); + geminiTag.setOnClickListener(this); + dracoTag.setOnClickListener(this); + + placeHolderlist = container.diagramCaller("StarPatterns"); + tagPlaceHolderMap = tagPlaceholdermapper.diagramMapper("StarPatterns"); + incompleteTagList = tagPlaceholdermapper.diagramMapper("StarPatterns"); + tagListSize = tagPlaceHolderMap.size(); + + openDB(); + + } + + @Override + public void onClick(View tagView) { + super.onClick(tagView); + + InfoTooltip popup; + + switch (tagView.getId()) { + case R.id.libraTag: + popup = new InfoTooltip(getApplicationContext(), + "Libra is Latin for weighing scales, \n" + + "only constellation of the Zodiac \n" + + "representing an inanimate object"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.little_dripperTag: + popup = new InfoTooltip(getApplicationContext(), + "Ursa Minor, also known as the Little Bear, \n" + + " is a constellation in the northern sky"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.big_dripperTag: + popup = new InfoTooltip(getApplicationContext(), + "The Big Dipper is an asterism of seven stars \n" + + "recognized as a distinct grouping \n" + + "in many cultures"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.scorpioTag: + popup = new InfoTooltip(getApplicationContext(), + "Eighth astrological sign in the Zodiac"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.orianTag: + popup = new InfoTooltip(getApplicationContext(), + "A constellation which named after a hunter, \n" + + "Orian in Greek mythology"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.leoTag: + popup = new InfoTooltip(getApplicationContext(), + "Fifth astrological sign of the zodiac, \n" + + "originating from the constellation of Leo"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.geminiTag: + popup = new InfoTooltip(getApplicationContext(), + "Third astrological sign in the Zodiac, \n" + + "originating from the constellation of Gemini"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.dracoTag: + popup = new InfoTooltip(getApplicationContext(), + "Draco is latin for dragon, \n" + + "a constellation in the far northern sky"); + popup.show(tagView, AlignMode.BOTTOM); + break; + + + default: + break; + } + + } + + @Override + protected int getResourcesId() { + return R.layout.diagram_play_star_patterns; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_done: + quitPlay(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private void quitPlay() { + + super.dialogBuilder(DiagramPlayStarPatterns.this); + + } + + @Override + protected void dispatch(float totalScore, int gameScore) { + Intent intent = new Intent(getBaseContext(), DiagramResult.class); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "StarPatterns"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("TRY_CYCLE", tryCycle); + startActivity(intent); + } + + @Override + protected void intentBuilder(String badgeTitle, int badgeId, float totalScore, int gameScore, boolean completed, int tryCycle) { + Intent intent; + intent = new Intent(getApplicationContext(), BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeTitle); + intent.putExtra("BADGE_ID", badgeId); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "StarPatterns"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("COMPLETED", completed); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayVirus.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayVirus.java new file mode 100644 index 00000000..b5c76f62 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayVirus.java @@ -0,0 +1,227 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.buildmlearn.labeldiagram.tooltipkit.InfoTooltip; +import com.buildmlearn.labeldiagram.tooltipkit.CustomTooltip.AlignMode; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +public class DiagramPlayVirus extends DiagramPlayBase { + + @Override + public void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + + actionBar.setTitle("Virus"); + setDiagramName("Virus"); + setDiagramCategory("Biology"); + + // Score board textViews + TextView completeTxt = (TextView) findViewById(R.id.complatedTxt); + compeleteRatio = (TextView) findViewById(R.id.complete_ratio); + TextView scoreTxt = (TextView) findViewById(R.id.scoreTxt); + score = (TextView) findViewById(R.id.score); + + // Setting up font face to Roboto Light/Thin + completeTxt.setTypeface(tfThin); + scoreTxt.setTypeface(tfThin); + compeleteRatio.setTypeface(tfThin); + score.setTypeface(tfThin); + + // Placeholder imageViews + ImageView headView = (ImageView) findViewById(R.id.headBlb); + ImageView collarView = (ImageView) findViewById(R.id.collarBlb); + ImageView neckView = (ImageView) findViewById(R.id.neckBlb); + ImageView sheathView = (ImageView) findViewById(R.id.sheathBlb); + ImageView tailpinsView = (ImageView) findViewById(R.id.tailpinsBlb); + ImageView tailfibreView = (ImageView) findViewById(R.id.tailfibreBlb); + ImageView danView = (ImageView) findViewById(R.id.dnaBlb); + ImageView baseplateView = (ImageView) findViewById(R.id.baseplateBlb); + + // Draggable Tags imageViews + TextView headTag = (TextView) findViewById(R.id.headTag); + TextView collarTag = (TextView) findViewById(R.id.collarTag); + TextView neckTag = (TextView) findViewById(R.id.neckTag); + TextView sheathTag = (TextView) findViewById(R.id.sheathTag); + TextView tailfibreTag = (TextView) findViewById(R.id.tailfibreTag); + TextView tailpinsTag = (TextView) findViewById(R.id.tailpinsTag); + TextView dnaTag = (TextView) findViewById(R.id.dnaTag); + TextView baseplateTag = (TextView) findViewById(R.id.baseplateTag); + + // Register draggable views to receive drag events + headView.setOnDragListener(this); + collarView.setOnDragListener(this); + neckView.setOnDragListener(this); + sheathView.setOnDragListener(this); + tailpinsView.setOnDragListener(this); + tailfibreView.setOnDragListener(this); + danView.setOnDragListener(this); + baseplateView.setOnDragListener(this); + + // Register place holders to receive onLongclick events + headTag.setOnLongClickListener(this); + collarTag.setOnLongClickListener(this); + neckTag.setOnLongClickListener(this); + sheathTag.setOnLongClickListener(this); + tailfibreTag.setOnLongClickListener(this); + tailpinsTag.setOnLongClickListener(this); + dnaTag.setOnLongClickListener(this); + baseplateTag.setOnLongClickListener(this); + + // Register place holders to receive onClick events + headTag.setOnClickListener(this); + collarTag.setOnClickListener(this); + neckTag.setOnClickListener(this); + sheathTag.setOnClickListener(this); + tailfibreTag.setOnClickListener(this); + tailpinsTag.setOnClickListener(this); + dnaTag.setOnClickListener(this); + baseplateTag.setOnClickListener(this); + + placeHolderlist = container.diagramCaller("Virus"); + tagPlaceHolderMap = tagPlaceholdermapper.diagramMapper("Virus"); + incompleteTagList = tagPlaceholdermapper.diagramMapper("Virus"); + tagListSize = tagPlaceHolderMap.size(); + + openDB(); + + } + + @Override + public void onClick(View tagView) { + super.onClick(tagView); + + // TODO Extract messages to separate container + switch (tagView.getId()) { + case R.id.headTag: + InfoTooltip popup = new InfoTooltip(getApplicationContext(), + "This is situated within nucleoid region \n" + + "and contain a circular DNA molecule"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.collarTag: + InfoTooltip popup1 = new InfoTooltip(getApplicationContext(), + "Structures that assemble proteins "); + popup1.show(tagView, AlignMode.BOTTOM); + break; + case R.id.neckTag: + InfoTooltip popup2 = new InfoTooltip(getApplicationContext(), + "They occur as small granules of lipids or glycogen\n" + + " held in sacs formed from lipid membrane"); + popup2.show(tagView, AlignMode.BOTTOM); + break; + case R.id.sheathTag: + InfoTooltip popup3 = new InfoTooltip(getApplicationContext(), + "Short, thin, straight, hair like projections form surface "); + popup3.show(tagView, AlignMode.BOTTOM); + break; + case R.id.tailfibreTag: + InfoTooltip popup4 = new InfoTooltip( + getApplicationContext(), + "This is a lash-like appendage that begins\n" + + " from the cell body which is important for locomotion"); + popup4.show(tagView, AlignMode.BOTTOM); + break; + case R.id.tailpinsTag: + InfoTooltip popup5 = new InfoTooltip(getApplicationContext(), + "Located in cytosol of bacterial cells which\n" + + " contains supplemental genetic information"); + popup5.show(tagView, AlignMode.BOTTOM); + break; + case R.id.dnaTag: + InfoTooltip popup6 = new InfoTooltip(getApplicationContext(), + "A layer that lies outside the cell envelope\n" + + "of bacteria which can be the cause of \n" + + "various diseases"); + popup6.show(tagView, AlignMode.BOTTOM); + break; + case R.id.baseplateTag: + InfoTooltip popup7 = new InfoTooltip(getApplicationContext(), + "This protects the cell from shock,\n " + + "physical damage,confers rigidity \n" + + "and shape of bacterial cells "); + popup7.show(tagView, AlignMode.BOTTOM); + break; + default: + break; + } + } + + @Override + protected int getResourcesId() { + + return R.layout.diagram_play_virus; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // TODO Auto-generated method stub + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_done: + quitPlay(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private void quitPlay() { + + super.dialogBuilder(DiagramPlayVirus.this); + + } + + @Override + protected void dispatch(float totalScore, int gameScore) { + Intent intent = new Intent(getBaseContext(), DiagramResult.class); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "Virus"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("TRY_CYCLE", tryCycle); + startActivity(intent); + } + + @Override + protected void intentBuilder(String badgeTitle, int badgeId, + float totalScore, int gameScore, boolean completed, int tryCycle) { + Intent intent; + intent = new Intent(getApplicationContext(), BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeTitle); + intent.putExtra("BADGE_ID", badgeId); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "Virus"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("COMPLETED", completed); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayWaterCycle.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayWaterCycle.java new file mode 100644 index 00000000..bb4815d9 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramPlayWaterCycle.java @@ -0,0 +1,232 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.buildmlearn.labeldiagram.tooltipkit.InfoTooltip; +import com.buildmlearn.labeldiagram.tooltipkit.CustomTooltip.AlignMode; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +public class DiagramPlayWaterCycle extends DiagramPlayBase { + + @Override + public void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + + actionBar.setTitle("Water Cycle"); + setDiagramName("WaterCycle"); + setDiagramCategory("Science"); + + // Score board textViews + TextView completeTxt = (TextView) findViewById(R.id.complatedTxt); + compeleteRatio = (TextView) findViewById(R.id.complete_ratio); + TextView scoreTxt = (TextView) findViewById(R.id.scoreTxt); + score = (TextView) findViewById(R.id.score); + + // Setting up font face to Roboto Light/Thin + completeTxt.setTypeface(tfThin); + scoreTxt.setTypeface(tfThin); + compeleteRatio.setTypeface(tfThin); + score.setTypeface(tfThin); + + // Placeholder imageViews + ImageView oceanView = (ImageView) findViewById(R.id.oceanBlb); + ImageView precipitationView = (ImageView) findViewById(R.id.precipitationBlb); + ImageView infiltraionView = (ImageView) findViewById(R.id.infiltrationBlb); + ImageView condensationView = (ImageView) findViewById(R.id.condensationBlb); + ImageView eveporaionView = (ImageView) findViewById(R.id.eveporationBlb); + ImageView transpirationView = (ImageView) findViewById(R.id.transpirationBlb); + ImageView undergroundwaterView = (ImageView) findViewById(R.id.underground_waterBlb); + ImageView surfacerunView = (ImageView) findViewById(R.id.surface_runBlb); + + + // Draggable Tags imageViews + TextView oceanTag = (TextView) findViewById(R.id.oceanTag); + TextView preciptationTag = (TextView) findViewById(R.id.preciptationTag); + TextView infiltratoinTag = (TextView) findViewById(R.id.infiltratoinTag); + TextView condensationTag = (TextView) findViewById(R.id.condensationTag); + TextView eveporationTag = (TextView) findViewById(R.id.eveporationTag); + TextView transpirationTag = (TextView) findViewById(R.id.transpirationTag); + TextView undergroundWaterTag = (TextView) findViewById(R.id.underground_waterTag); + TextView surfaceRunTag = (TextView) findViewById(R.id.surface_runTag); + + + // Register draggable views to receive drag events + oceanView.setOnDragListener(this); + precipitationView.setOnDragListener(this); + infiltraionView.setOnDragListener(this); + condensationView.setOnDragListener(this); + eveporaionView.setOnDragListener(this); + transpirationView.setOnDragListener(this); + undergroundwaterView.setOnDragListener(this); + surfacerunView.setOnDragListener(this); + + + // Register place holders to receive onLongclick events + oceanTag.setOnLongClickListener(this); + preciptationTag.setOnLongClickListener(this); + infiltratoinTag.setOnLongClickListener(this); + condensationTag.setOnLongClickListener(this); + eveporationTag.setOnLongClickListener(this); + transpirationTag.setOnLongClickListener(this); + undergroundWaterTag.setOnLongClickListener(this); + surfaceRunTag.setOnLongClickListener(this); + + + // Register place holders to receive onClick events + oceanTag.setOnClickListener(this); + preciptationTag.setOnClickListener(this); + infiltratoinTag.setOnClickListener(this); + condensationTag.setOnClickListener(this); + eveporationTag.setOnClickListener(this); + transpirationTag.setOnClickListener(this); + undergroundWaterTag.setOnClickListener(this); + surfaceRunTag.setOnClickListener(this); + + placeHolderlist = container.diagramCaller("WaterCycle"); + tagPlaceHolderMap = tagPlaceholdermapper.diagramMapper("WaterCycle"); + incompleteTagList = tagPlaceholdermapper.diagramMapper("WaterCycle"); + tagListSize = tagPlaceHolderMap.size(); + + openDB(); + + } + + @Override + public void onClick(View tagView) { + super.onClick(tagView); + + InfoTooltip popup; + + switch (tagView.getId()) { + case R.id.oceanTag: + popup = new InfoTooltip(getApplicationContext(), + "The sea, main source for evoporation"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.preciptationTag: + popup = new InfoTooltip(getApplicationContext(), + "Rain, snow, sleet, or hail that falls \n" + + "to or condenses on the ground"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.infiltratoinTag: + popup = new InfoTooltip(getApplicationContext(), + "The process by which water on the \n" + + "ground surface enters the soil"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.condensationTag: + popup = new InfoTooltip(getApplicationContext(), + "The conversion of a vapour or gas to a liquid"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.eveporationTag: + popup = new InfoTooltip(getApplicationContext(), + "The process of a substance in a \n" + + "liquid state changing to a gaseous state"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.transpirationTag: + popup = new InfoTooltip(getApplicationContext(), + "The process which evaporation \n" + + "of water from plant leaves"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.underground_waterTag: + popup = new InfoTooltip(getApplicationContext(), + "The water found underground \n" + + "in the cracks and spaces in soil, \n" + + "sand and rock"); + popup.show(tagView, AlignMode.BOTTOM); + break; + case R.id.surface_runTag: + popup = new InfoTooltip(getApplicationContext(), + "Surface runoff is water, from rain, \n" + + " snowmelt, or other sources, \n" + + "that flows over the land surface"); + popup.show(tagView, AlignMode.BOTTOM); + break; + + default: + break; + } + + } + + @Override + protected int getResourcesId() { + // TODO Auto-generated method stub + return R.layout.diagram_play_water_cycle; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // TODO Auto-generated method stub + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_done: + quitPlay(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private void quitPlay() { + + super.dialogBuilder(DiagramPlayWaterCycle.this); + + } + + @Override + protected void dispatch(float totalScore, int gameScore) { + Intent intent = new Intent(getBaseContext(), DiagramResult.class); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "WaterCycle"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("TRY_CYCLE", tryCycle); + startActivity(intent); + } + + @Override + protected void intentBuilder(String badgeTitle, int badgeId, float totalScore, int gameScore, boolean completed, int tryCycle) { + Intent intent; + intent = new Intent(getBaseContext(), BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeTitle); + intent.putExtra("BADGE_ID", badgeId); + intent.putExtra("SCORE", totalScore); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", "WaterCycle"); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("COMPLETED", completed); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramResult.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramResult.java new file mode 100644 index 00000000..99bb6a05 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/DiagramResult.java @@ -0,0 +1,300 @@ +package com.buildmlearn.labeldiagram; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import org.json.JSONObject; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.buildmlearn.labeldiagram.database.DBAdapter; +import com.buildmlearn.labeldiagram.entity.Result; +import com.buildmlearn.labeldiagram.helper.ClassMapper; +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.helper.TagContainerSingleton; +import com.buildmlearn.labeldiagram.resources.DiagramResultAdapter; +import com.buildmlearn.labeldiagram.resources.DiagramResultRawItem; +import com.example.labelthediagram.R; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.database.Cursor; +import android.graphics.Typeface; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.ListView; +import android.widget.RatingBar; +import android.widget.TextView; +import android.widget.Toast; + +/** + * @author Akilaz + * + */ +public class DiagramResult extends Activity implements OnClickListener { + + ArrayList resultList = new ArrayList(); + List correctTagList = new ArrayList(); + List incorrectTagList = new ArrayList(); + List correctTagTextList = new ArrayList(); + List incorrectTagTextList = new ArrayList(); + + boolean isBestScore; + int gameScore; + float score; + int tryCycle; + String source; + String category; + DBAdapter diagramDb; + SharedPreferences preferences; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.diagram_result); + + // Enabling ActionBar + HelperClass.setActionBar("Result", this); + + // Get the correctly and incorrectly labeled tag-list + correctTagList = TagContainerSingleton.getInstance() + .getCorrectLabelList(); + incorrectTagList = TagContainerSingleton.getInstance() + .getIncorrectLabelList(); + + // Capture intent values passed by DiagramPlay activity + score = getIntent().getExtras().getFloat("SCORE"); + source = getIntent().getExtras().getString("SOURCE"); + isBestScore = getIntent().getExtras().getBoolean("BEST_SCORE"); + gameScore = getIntent().getExtras().getInt("GAME_SCORE"); + tryCycle = getIntent().getExtras().getInt("TRY_CYCLE"); + + // Set the score on the rating bar + RatingBar scoreRater = (RatingBar) findViewById(R.id.resultBar); + scoreRater.setRating((score / gameScore) * 5); + + // Set score on the score TextView + TextView scoreTxt = (TextView) findViewById(R.id.scoreboardScore); + scoreTxt.setText((int) score + "/" + gameScore); + + // Referencing action buttons and register for onClick event + Button tryAgain = (Button) findViewById(R.id.againButton); + Button nextButton = (Button) findViewById(R.id.nextButton); + + tryAgain.setOnClickListener(this); + nextButton.setOnClickListener(this); + + // Save diagram result for viewing on the ScoreBoard + saveDiagramScore(); + + // Call for populating data for adapter + fillDataModel(); + + ListView list = (ListView) findViewById(R.id.mylistview); + + // Set DiagramResult adapter + ArrayAdapter resultAdapter = new DiagramResultAdapter( + this, R.layout.diagram_result_row_item, resultList); + list.setAdapter(resultAdapter); + } + + /** + * save score for the diagram play action + */ + private void saveDiagramScore() { + + openDB(); + + extractTags(correctTagList, incorrectTagList); + + boolean completed = checkCompleted(); + + Result resultObj = new Result(source); + resultObj.setScore(score); + resultObj.setCorrectTagList(correctTagTextList); + resultObj.setIncorrectTagList(incorrectTagTextList); + resultObj.setGameScore(gameScore); + resultObj.setCompleted(completed); + + Gson gson = new Gson(); + String resultData = gson.toJson(resultObj); + + if (isBestScore == true) { + + long id1 = diagramDb.insertScore(source, resultData); + long id2 = diagramDb.insertBestScore(source, resultData); + Log.i("Database Status", "record id : " + id1 + " " + id2 + + "source :" + source); + + Cursor cursor = diagramDb.getRowScore(source); + displayRecordSet(cursor, gson); + + Cursor cursor1 = diagramDb.getRowBestScore(source); + displayRecordSet(cursor1, gson); + + } else { + + long id1 = diagramDb.insertScore(source, resultData); + Log.i("Database Status", "record id : " + id1 + " source :" + + source); + + Cursor cursor = diagramDb.getRowScore(source); + displayRecordSet(cursor, gson); + + } + + } + + private boolean checkCompleted() { + + if((int)score == gameScore){ + return true; + } + return false; + } + + /** + * Extract text from tags to save + * + * @param correctTagList + * @param incorrectTagList + */ + private void extractTags(List correctTagList, + List incorrectTagList) { + + for (int i = 0; i < correctTagList.size(); i++) { + correctTagTextList.add(correctTagList.get(i).getText().toString()); + } + + for (int j = 0; j < incorrectTagList.size(); j++) { + incorrectTagTextList.add(incorrectTagList.get(j).getText() + .toString()); + } + } + + /** + * Populate data for the use of Array adapter + */ + private void fillDataModel() { + + List combinedList = new ArrayList(correctTagList); + combinedList.addAll(incorrectTagList); + + for (int i = 0; i < combinedList.size(); i++) { + + TextView labeledTag = combinedList.get(i); + Log.i("Text", labeledTag.getText().toString()); + DiagramResultRawItem item = new DiagramResultRawItem(labeledTag, + R.drawable.incorrect_btn); + + resultList.add(item); + + } + + } + + private void displayRecordSet(Cursor cursor, Gson gson) { + + String message = ""; + String testObj = ""; + + // Reset cursor to start, checking to see if there's data: + if (cursor.moveToFirst()) { + do { + // Process the data: + String name = cursor.getString(DBAdapter.COL_DIAGRAM_NAME); + String result = cursor.getString(DBAdapter.COL_RESULT); + + Type type = new TypeToken() { + }.getType(); + Result finalResult = gson.fromJson(result, type); + // Append data to the message: + message += "name=" + name + ", result=" + result + "\n"; + String outputDiagram = finalResult.getDiagramName(); + float score = finalResult.getScore(); + + testObj += "outputDiagram" + outputDiagram + "score" + score; + } while (cursor.moveToNext()); + + } + + // Close the cursor to avoid a resource leak. + cursor.close(); + + Log.i("Retrieved Data", message + " +++ obj +++" + testObj); + } + + private void openDB() { + diagramDb = new DBAdapter(this); + diagramDb.open(); + } + + private void closeDB() { + diagramDb.close(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + closeDB(); + } + + @Override + public void onClick(View view) { + + switch (view.getId()) { + case R.id.againButton: + + getDispatcingClass(source); + + break; + + case R.id.nextButton: + + Intent intent = new Intent(getApplicationContext(), + DiagramCategoryViewer.class); + intentBuilder(intent); + + break; + default: + break; + } + + } + + // Populate intent and start activity + private void intentBuilder(Intent intent) { + + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + startActivity(intent); + + } + + private void getDispatcingClass(String source) { + + HashMap> destMap = ClassMapper.getInstance().getMap(); + Class destinationClass = destMap.get(source); + Intent intent = new Intent(getApplicationContext(), destinationClass); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.putExtra("SOURCE", "Result"); + intentBuilder(intent); + + } + + @Override + public void onBackPressed() { + + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/HelpMenu.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/HelpMenu.java new file mode 100644 index 00000000..16bb9c5a --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/HelpMenu.java @@ -0,0 +1,101 @@ +package com.buildmlearn.labeldiagram; + +import com.example.labelthediagram.R; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Parcelable; +import android.support.v4.view.PagerAdapter; +import android.support.v4.view.ViewPager; +import android.view.LayoutInflater; +import android.view.View; + +public class HelpMenu extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.help_tutorial_view); + + CustomPagerAdapter adapter = new CustomPagerAdapter(); + ViewPager myPager = (ViewPager) findViewById(R.id.tutorialpager); + myPager.setAdapter(adapter); + myPager.setCurrentItem(0); + } + + class CustomPagerAdapter extends PagerAdapter { + + public Object instantiateItem(View collection, int position) { + getApplicationContext(); + + LayoutInflater inflater = (LayoutInflater) collection.getContext() + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + int resId = 0; + switch (position) { + case 0: + resId = R.layout.help_screen1; + break; + case 1: + resId = R.layout.help_screen2; + break; + case 2: + resId = R.layout.help_screen3; + break; + case 3: + resId = R.layout.help_screen4; + break; + case 4: + resId = R.layout.help_screen5; + break; + case 5: + resId = R.layout.help_screen6; + break; + case 6: + resId = R.layout.help_screen7; + break; + case 7: + resId = R.layout.help_screen8; + break; + case 8: + resId = R.layout.help_screen9; + break; + case 9: + resId = R.layout.help_screen10; + Intent intent = new Intent(getApplicationContext(),MainMenuGrid.class); + startActivity(intent); + finish(); + break; + } + View view = inflater.inflate(resId, null); + + ((ViewPager) collection).addView(view, 0); + return view; + } + + @Override + public int getCount() { + return 10; + } + + @Override + public boolean isViewFromObject(View arg0, Object arg1) { + return arg0 == ((View) arg1); + } + + @Override + public void destroyItem(View arg0, int arg1, Object arg2) { + ((ViewPager) arg0).removeView((View) arg2); + + } + + @Override + public Parcelable saveState() { + return null; + } + + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/MainMenu.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/MainMenu.java new file mode 100644 index 00000000..ae9e06c6 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/MainMenu.java @@ -0,0 +1,159 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.badges.BadgesViewer; +import com.buildmlearn.labeldiagram.lessons.LessonCategoryViewer; +import com.buildmlearn.labeldiagram.lessons.LessonHumanEar; +import com.example.labelthediagram.R; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.TextView; +import android.widget.Toast; + +public class MainMenu extends Activity implements OnClickListener { + + TextView diagramView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.main_menu); + + diagramView = (TextView) findViewById(R.id.title_diagram); + TextView startDigrm = (TextView) findViewById(R.id.start_diagram); + TextView scoreboardView = (TextView) findViewById(R.id.title_scoreboard); + TextView startScore = (TextView) findViewById(R.id.start_screboard); + TextView lessonView = (TextView) findViewById(R.id.title_lesson); + TextView startLesson = (TextView) findViewById(R.id.start_lesson); + TextView badgeView = (TextView) findViewById(R.id.title_badge); + TextView startbadges = (TextView) findViewById(R.id.start_badge); + TextView settingsView = (TextView) findViewById(R.id.title_settings); + TextView startSettings = (TextView) findViewById(R.id.start_settings); + TextView helpView = (TextView) findViewById(R.id.title_help); + TextView startHelp = (TextView) findViewById(R.id.start_help); + + Typeface tfThin = Typeface.createFromAsset(getAssets(), + "fonts/Roboto-Thin.ttf"); + Typeface tfLight = Typeface.createFromAsset(getAssets(), + "fonts/Roboto-Light.ttf"); + + diagramView.setTypeface(tfThin); + startDigrm.setTypeface(tfLight); + scoreboardView.setTypeface(tfThin); + startScore.setTypeface(tfLight); + lessonView.setTypeface(tfThin); + startLesson.setTypeface(tfLight); + badgeView.setTypeface(tfThin); + startbadges.setTypeface(tfLight); + settingsView.setTypeface(tfThin); + startSettings.setTypeface(tfLight); + helpView.setTypeface(tfThin); + startHelp.setTypeface(tfLight); + + startDigrm.setOnClickListener(this); + startScore.setOnClickListener(this); + startLesson.setOnClickListener(this); + startbadges.setOnClickListener(this); + startSettings.setOnClickListener(this); + startHelp.setOnClickListener(this); + + } + + @Override + public void onBackPressed() { + + // Disable back button behavior and exit the app + /*new AlertDialog.Builder(this) + .setIcon(android.R.drawable.ic_dialog_alert) + .setTitle("Exit") + .setMessage("Are you sure?") + .setPositiveButton("Yes", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_HOME); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + System.exit(0); + + // finish(); // finish activity + + } + }).setNegativeButton("No", null).show();*/ + + final Dialog dialog = new Dialog(this); + dialog.setContentView(R.layout.custom_dialog_view); + + Button yesBtn = (Button) dialog.findViewById(R.id.yes_btn); + yesBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + System.exit(0); + + } + }); + Button noBtn = (Button) dialog.findViewById(R.id.no_btn); + noBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + + dialog.show(); + } + + @Override + public void onClick(View v) { + + // Declare action to be fired according to the textView tapped + + switch (v.getId()) { + case R.id.start_diagram: + Intent diagramIntent = new Intent(v.getContext(), DiagramCategoryViewer.class); + startActivity(diagramIntent); + break; + case R.id.start_screboard: + Intent scoreboardIntent = new Intent(getApplicationContext(), ScoreboardViewer.class); + startActivity(scoreboardIntent); + break; + case R.id.start_lesson: + Intent lessonIntent = new Intent(getApplicationContext(), LessonCategoryViewer.class); + startActivity(lessonIntent); + break; + case R.id.start_badge: + Intent badgesIntent = new Intent(getApplicationContext(), BadgesViewer.class); + startActivity(badgesIntent); + break; + case R.id.start_settings: + Intent settingsIntent = new Intent(getApplicationContext(), Settings.class); + startActivity(settingsIntent); + break; + case R.id.start_help: + /*Toast.makeText(getApplication(), "Comming soon...", 2000) + .show();*/ + Intent helpIntent = new Intent(getApplicationContext(), HelpMenu.class); + startActivity(helpIntent); + break; + } + + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/MainMenuGrid.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/MainMenuGrid.java new file mode 100644 index 00000000..63b1f162 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/MainMenuGrid.java @@ -0,0 +1,96 @@ +package com.buildmlearn.labeldiagram; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.SplashScreen.NavigationHandler; +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.MenuGridRowItem; +import com.buildmlearn.labeldiagram.resources.MenuGridViewAdapter; +import com.example.labelthediagram.R; + +import android.app.Activity; +import android.app.Dialog; +import android.content.DialogInterface; +import android.content.DialogInterface.OnDismissListener; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.Window; +import android.widget.Button; +import android.widget.GridView; + +public class MainMenuGrid extends Activity implements OnClickListener{ + + List gridArray = new ArrayList(); + GridView gridView; + MenuGridViewAdapter adapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.main_menu_grid); + + HelperClass.setActionBar("Main Menu", this); + + gridArray.add(new MenuGridRowItem(R.layout.main_menu_item_view)); + gridArray.add(new MenuGridRowItem(R.layout.main_menu_item_view)); + gridArray.add(new MenuGridRowItem(R.layout.main_menu_item_view)); + gridArray.add(new MenuGridRowItem(R.layout.main_menu_item_view)); + gridArray.add(new MenuGridRowItem(R.layout.main_menu_item_view)); + gridArray.add(new MenuGridRowItem(R.layout.main_menu_item_view)); + + adapter = new MenuGridViewAdapter(this, R.layout.menu_grid_row_item, gridArray); + + gridView = (GridView)findViewById(R.id.mainMenuGrid); + gridView.setAdapter(adapter); + + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onBackPressed() { + + // Disable back button behavior and exit the app + final Dialog dialog = new Dialog(this); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(R.layout.custom_dialog_view); + + Button yesBtn = (Button) dialog.findViewById(R.id.yes_btn); + yesBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + dialog.dismiss(); + /*Intent intent = new Intent(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_HOME); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish();*/ + + Intent intent = new Intent(MainMenuGrid.this,Navigator.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + }); + Button noBtn = (Button) dialog.findViewById(R.id.no_btn); + noBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + + dialog.show(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/Navigator.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/Navigator.java new file mode 100644 index 00000000..8ef916d4 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/Navigator.java @@ -0,0 +1,22 @@ +package com.buildmlearn.labeldiagram; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; + +public class Navigator extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_HOME); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + + + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/ScoreboardResult.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/ScoreboardResult.java new file mode 100644 index 00000000..24d36847 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/ScoreboardResult.java @@ -0,0 +1,69 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.ScoreboardBestScoreFragment; +import com.buildmlearn.labeldiagram.resources.ScoreboardScoreFragment; +import com.example.labelthediagram.R; + +import android.content.Context; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTabHost; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +public class ScoreboardResult extends FragmentActivity { + + private FragmentTabHost mTabHost; + FragmentManager fm = getSupportFragmentManager(); + Typeface tfThin; + String source; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.scoreboard_result); + + HelperClass.setActionBar("Scoreboard", this); + + source = getIntent().getExtras().getString("SOURCE"); + + mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); + mTabHost.setup(this, getSupportFragmentManager(), + android.R.id.tabcontent); + + mTabHost.addTab( + mTabHost.newTabSpec("tab1").setIndicator( + getTabIndicator(mTabHost.getContext(), "LAST ATTEMPT")), + ScoreboardScoreFragment.class, setArgumentstoPass(source)); + mTabHost.addTab( + mTabHost.newTabSpec("tab2").setIndicator( + getTabIndicator(mTabHost.getContext(), "BEST SCORE")), + ScoreboardBestScoreFragment.class, setArgumentstoPass(source)); + + } + + private Bundle setArgumentstoPass(String source) { + Bundle arguments = new Bundle(); + arguments.putString("SOURCE", source); + return arguments; + } + + private View getTabIndicator(Context context, String title) { + View view = LayoutInflater.from(context).inflate( + R.layout.scoreboard_tab, null); + TextView tv = (TextView) view.findViewById(R.id.textView); + tfThin = Typeface.createFromAsset(getAssets(), "fonts/Roboto-Thin.ttf"); + tv.setText(title); + tv.setTypeface(tfThin); + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/ScoreboardViewer.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/ScoreboardViewer.java new file mode 100644 index 00000000..236487c6 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/ScoreboardViewer.java @@ -0,0 +1,81 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.ScoreboardBioFragment; +import com.buildmlearn.labeldiagram.resources.ScoreboardPhysicsFragment; +import com.buildmlearn.labeldiagram.resources.ScoreboardScienceFragment; +import com.example.labelthediagram.R; + +import android.app.ActionBar; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.ViewPager; + +public class ScoreboardViewer extends FragmentActivity{ + + FragmentPagerAdapter adapterViewPager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.scoreboard_view); + + HelperClass.setActionBar("Scoreboard", this); + + ViewPager vpPager = (ViewPager) findViewById(R.id.scoreboard_pager); + adapterViewPager = new ScoreboardPagerAdapter( + getSupportFragmentManager()); + vpPager.setAdapter(adapterViewPager); + vpPager.setClipToPadding(false); + vpPager.setPageMargin(20); + + } + + public static class ScoreboardPagerAdapter extends FragmentPagerAdapter{ + + private String[] pageTitles = new String[] { "Biology", + "Physics", "Science" }; + public static final int NUM_ITEMS = 3; + + public ScoreboardPagerAdapter(FragmentManager fm) { + super(fm); + // TODO Auto-generated constructor stub + } + + @Override + public Fragment getItem(int position) { + switch (position) { + case 0: + ScoreboardBioFragment bioFrag = new ScoreboardBioFragment(); + return bioFrag; + case 1: + ScoreboardPhysicsFragment phyFrag = new ScoreboardPhysicsFragment(); + return phyFrag; + case 2: + ScoreboardScienceFragment chemFrag = new ScoreboardScienceFragment(); + return chemFrag; + default: + return null; + } + } + + @Override + public int getCount() { + return NUM_ITEMS; + } + + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + + @Override + public float getPageWidth(int position) { + return 1.0f; + } + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/Settings.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/Settings.java new file mode 100644 index 00000000..41e0b35b --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/Settings.java @@ -0,0 +1,90 @@ +package com.buildmlearn.labeldiagram; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.example.labelthediagram.R; + +import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.CheckBox; +import android.widget.RelativeLayout; +import android.widget.Toast; + +public class Settings extends Activity implements OnClickListener { + + private static final String SOUND_SETTING = "sound"; + private CheckBox soundCheckBox; + private SharedPreferences preferences; + private RelativeLayout rateLayout; + private boolean sound_pref; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.settings); + initPreferences(); + initViews(); + + } + + private void initPreferences() { + + preferences = getApplicationContext().getSharedPreferences( + "com.buildmlearn.labeldiagram.PREFERENCE_FILE_KEY", + Context.MODE_PRIVATE); + + sound_pref = preferences.getBoolean(SOUND_SETTING, false); + + } + + private void initViews() { + + HelperClass.setActionBar("Settings", this); + + soundCheckBox = (CheckBox) findViewById(R.id.soundCheckBox); + rateLayout = (RelativeLayout) findViewById(R.id.rateLayout); + + soundCheckBox.setOnClickListener(this); + rateLayout.setOnClickListener(this); + + soundCheckBox.setChecked(sound_pref); + } + + @Override + public void onClick(View view) { + + SharedPreferences.Editor editor = preferences.edit(); + boolean isChecked; + + switch (view.getId()) { + + case R.id.soundCheckBox: + + isChecked = soundCheckBox.isChecked(); + + if (isChecked) { + editor.putBoolean(SOUND_SETTING, true); + editor.commit(); + } else { + editor.putBoolean(SOUND_SETTING, false); + editor.commit(); + } + + break; + + case R.id.rateLayout: + + Toast.makeText(this, "Comming soon...", Toast.LENGTH_SHORT).show(); + + break; + + default: + break; + } + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/SplashScreen.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/SplashScreen.java new file mode 100644 index 00000000..847b3a36 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/SplashScreen.java @@ -0,0 +1,67 @@ +package com.buildmlearn.labeldiagram; + +import io.fabric.sdk.android.Fabric; + +import com.crashlytics.android.Crashlytics; +import com.example.labelthediagram.R; + +import android.app.ActionBar; +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.view.Menu; +import android.view.MenuItem; + + + +public class SplashScreen extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + //Fabric.with(this, new Crashlytics()); + setContentView(R.layout.splash_screen); + + // Calling NavigationHandler to wait and dispatch to MainMenu + Handler handler=new Handler(); + handler.postDelayed(new NavigationHandler(),3000); + + } + + class NavigationHandler implements Runnable{ + + @Override + public void run() { + + /*startActivity(new Intent(getApplication(),MainMenuGrid.class));*/ + Intent launchNextActivity; + launchNextActivity = new Intent(getApplication(), MainMenuGrid.class); + launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(launchNextActivity); + finish(); + + } + + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + if (id == R.id.action_settings) { + return true; + } + return super.onOptionsItemSelected(item); + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/badges/BadgePopUpWindow.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/badges/BadgePopUpWindow.java new file mode 100644 index 00000000..d08257d5 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/badges/BadgePopUpWindow.java @@ -0,0 +1,169 @@ +package com.buildmlearn.labeldiagram.badges; + +import com.buildmlearn.labeldiagram.DiagramResult; +import com.buildmlearn.labeldiagram.database.Database; +import com.buildmlearn.labeldiagram.entity.Badge; +import com.example.labelthediagram.R; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.TextView; + +public class BadgePopUpWindow extends Activity implements OnClickListener { + + Database database; + ImageView cancelView; + ImageView badgeIcon; + TextView badgeTitle; + TextView badgeDescription; + Badge badgeObj; + String badgeName; + String source; + boolean achievedBestScore; + boolean isCompleted; + boolean isMasterBadge; + float score; + int gameScore; + int badgeId; + int tryCycle; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + + init(savedInstanceState); + initViews(); + loadDatabase(); + getBadgeData(); + processBadgeData(); + + } + + private void init(Bundle savedInstanceState) { + + getIntentData(); + setCustomTheme(); + super.onCreate(savedInstanceState); + setContentView(R.layout.popup_window_view); + adjustDimOpacity(); + + } + + private void setCustomTheme() { + if(!source.equals("Adapter")){ + setTheme(R.style.DialogWithDimmedBack); + } + } + + private void adjustDimOpacity() { + WindowManager.LayoutParams lp = getWindow().getAttributes(); + lp.dimAmount = 0.8f; + getWindow().setAttributes(lp); + } + + private void getIntentData() { + badgeName = getIntent().getExtras().getString("BADGE_TITLE"); + badgeId = getIntent().getExtras().getInt("BADGE_ID"); + source = getIntent().getExtras().getString("SOURCE"); + score = getIntent().getExtras().getFloat("SCORE"); + gameScore = getIntent().getExtras().getInt("GAME_SCORE"); + achievedBestScore = getIntent().getExtras().getBoolean("BEST_SCORE"); + isCompleted = getIntent().getExtras().getBoolean("COMPLETED"); + isMasterBadge = getIntent().getExtras().getBoolean("MASTER_BADGE"); + tryCycle = getIntent().getExtras().getInt("TRY_CYCLE"); + } + + private void initViews() { + cancelView = (ImageView) findViewById(R.id.cancel_btn); + badgeTitle = (TextView) findViewById(R.id.badge_txt); + badgeDescription = (TextView) findViewById(R.id.badge_desc); + badgeIcon = (ImageView) findViewById(R.id.badge_icon); + cancelView.setOnClickListener(this); + } + + private void loadDatabase() { + database = new Database(this); + } + + private Badge getBadgeData() { + + badgeObj = new Badge(); + badgeObj = database.getBadge(badgeName); + return badgeObj; + + } + + private void processBadgeData(){ + + if(badgeObj != null){ + badgeTitle.setText(badgeObj.getTitle()); + badgeDescription.setText(badgeObj.getDescription()); + badgeIcon.setImageResource(badgeId); + } + + } + + @Override + public void onClick(View v) { + + switch (v.getId()) { + case R.id.cancel_btn: + + if(!source.equals("Adapter")){ + + if(isCompleted == true){ + + boolean completed = false; + badgeName = getResources().getString(R.string.badge_champion); + badgeId = R.drawable.champion; + + database.updateBadgeAchievement(badgeName, true); + + Intent intent = new Intent(getBaseContext(), BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeName); + intent.putExtra("BADGE_ID", badgeId); + intent.putExtra("SCORE", score); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", source); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("COMPLETED", completed); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + + }else{ + Intent intent = new Intent(getBaseContext(), DiagramResult.class); + intent.putExtra("SCORE", score); + intent.putExtra("GAME_SCORE", gameScore); + intent.putExtra("SOURCE", source); + intent.putExtra("BEST_SCORE", achievedBestScore); + intent.putExtra("TRY_CYCLE", tryCycle); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + }else{ + finish(); + } + + + break; + default: + break; + } + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + database.close(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/badges/BadgesViewer.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/badges/BadgesViewer.java new file mode 100644 index 00000000..db140ed8 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/badges/BadgesViewer.java @@ -0,0 +1,69 @@ +package com.buildmlearn.labeldiagram.badges; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.BadgesAll; +import com.buildmlearn.labeldiagram.resources.ScoreboardBestScoreFragment; +import com.buildmlearn.labeldiagram.resources.ScoreboardScoreFragment; +import com.buildmlearn.labeldiagram.resources.YourBadges; +import com.example.labelthediagram.R; + +import android.content.Context; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTabHost; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; + +public class BadgesViewer extends FragmentActivity { + + private FragmentTabHost mTabHost; + FragmentManager fm = getSupportFragmentManager(); + Typeface tfThin; + String source; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.scoreboard_result); + + HelperClass.setActionBar("Badges", this); + + // source = getIntent().getExtras().getString("SOURCE"); + + mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); + mTabHost.setup(this, getSupportFragmentManager(), + android.R.id.tabcontent); + + mTabHost.addTab( + mTabHost.newTabSpec("tab1").setIndicator( + getTabIndicator(mTabHost.getContext(), "ALL BADGES")), + BadgesAll.class, null); + mTabHost.addTab( + mTabHost.newTabSpec("tab2").setIndicator( + getTabIndicator(mTabHost.getContext(), "YOUR BADGES")), + YourBadges.class, null); + + findViewById(android.R.id.tabcontent).setBackgroundColor( + getResources().getColor(R.color.appBg_color_white)); + + } + + private View getTabIndicator(Context context, String title) { + View view = LayoutInflater.from(context).inflate(R.layout.badges_tab, + null); + TextView tv = (TextView) view.findViewById(R.id.textView); + tfThin = Typeface.createFromAsset(getAssets(), "fonts/Roboto-Thin.ttf"); + tv.setText(title); + tv.setTypeface(tfThin); + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/database/DBAdapter.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/database/DBAdapter.java new file mode 100644 index 00000000..71997284 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/database/DBAdapter.java @@ -0,0 +1,207 @@ +package com.buildmlearn.labeldiagram.database; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.util.Log; + +public class DBAdapter { + + // /////////////////////////////////////////////////////////////////// + // Constants & Data + // /////////////////////////////////////////////////////////////////// + + // For logging: + private static final String TAG = "DBAdapter"; + + // DB Fields + public static final String KEY_DIAGRAM_NAME = "name"; + public static final String KEY_RESULT = "result"; + //public static final String KEY_CREATED_AT = "created_at"; + + // Field numbers + public static final int COL_DIAGRAM_NAME = 0; + public static final int COL_RESULT = 1; + + public static final String[] ALL_KEYS = new String[] { KEY_DIAGRAM_NAME, + KEY_RESULT }; + + // DB info: database name, and the table list . + public static final String DATABASE_NAME = "DiagramsInfo.db"; + public static final String TABLE_DIAGRAM_SCORE = "score"; + public static final String TABLE_DIAGRAM_BEST_SCORE = "best_score"; + + // DB version if a new version of the application changes the format. + public static final int DATABASE_VERSION = 4; + + + // SQL create statements + private static final String SQL_CREATE_DIAGRAM_SCORE = "create table if not exists " + + TABLE_DIAGRAM_SCORE + " (" + KEY_DIAGRAM_NAME + " text primary key, " + + KEY_RESULT + " text not null, " + "unique (" + KEY_DIAGRAM_NAME + + ") on conflict replace" + ");"; + + private static final String SQL_CREATE_DIAGRAM_BESTSCORE = "create table if not exists " + + TABLE_DIAGRAM_BEST_SCORE + " (" + KEY_DIAGRAM_NAME + " text primary key, " + + KEY_RESULT + " text not null, " + "unique (" + KEY_DIAGRAM_NAME + + ") on conflict replace" + ");"; + + // Context of application who uses us. + private final Context context; + + private DatabaseHelper diagramsDBHelper; + private SQLiteDatabase db; + + // /////////////////////////////////////////////////////////////////// + // Public methods: + // /////////////////////////////////////////////////////////////////// + + public DBAdapter(Context ctx) { + this.context = ctx; + diagramsDBHelper = new DatabaseHelper(context); + } + + // Open the database connection. + public DBAdapter open() { + db = diagramsDBHelper.getWritableDatabase(); + return this; + } + + // Close the database connection. + public void close() { + diagramsDBHelper.close(); + } + + // Add a new record of score details + public long insertScore(String diagramName, String result) { + + ContentValues initialValues = new ContentValues(); + initialValues.put(KEY_DIAGRAM_NAME, diagramName); + initialValues.put(KEY_RESULT, result); + + Log.i("Json result", result); + + return db.insert(TABLE_DIAGRAM_SCORE, null, initialValues); + + } + + // Add a new record of best score details + public long insertBestScore(String diagramName, String result) { + + ContentValues initialValues = new ContentValues(); + initialValues.put(KEY_DIAGRAM_NAME, diagramName); + initialValues.put(KEY_RESULT, result); + + Log.i("Json result", result); + + return db.insert(TABLE_DIAGRAM_BEST_SCORE, null, initialValues); + + } + + // Return all score details + public Cursor getAllScores() { + + String where = null; + Cursor c = db.query(true, TABLE_DIAGRAM_SCORE, ALL_KEYS, where, null, null, + null, null, null); + if (c != null) { + c.moveToFirst(); + } + return c; + + } + + // Return all best score details + public Cursor getAllBestScores() { + + String where = null; + Cursor c = db.query(true, TABLE_DIAGRAM_BEST_SCORE, ALL_KEYS, where, null, null, + null, null, null); + if (c != null) { + c.moveToFirst(); + } + return c; + + } + + // Get a specific row from score (by diagramName) + public Cursor getRowScore(String name) { + + Cursor c = db.rawQuery("SELECT * FROM '" + TABLE_DIAGRAM_SCORE.trim() + + "' WHERE name ='" + name.trim() + "'", + null); + if (c != null) { + c.moveToFirst(); + } + return c; + } + + // Get a specific row from best_score (by diagramName) + public Cursor getRowBestScore(String name) { + + Cursor c = db.rawQuery("SELECT * FROM '" + TABLE_DIAGRAM_BEST_SCORE.trim() + + "' WHERE name ='" + name.trim() + "'", + null); + if (c != null) { + c.moveToFirst(); + } + return c; + } + + public Cursor getFirstThreeScoreRows() { + + Cursor c = db.rawQuery("SELECT * FROM '" + TABLE_DIAGRAM_SCORE.trim()+"'ORDER BY rowid DESC LIMIT 2",null); + if (c != null) { + c.moveToFirst(); + } + return c; + } + + // Change an existing row to be equal to new data. + public boolean updateScore(String diagramName, String result) { + + String where = KEY_DIAGRAM_NAME + "=" + diagramName; + + ContentValues newValues = new ContentValues(); + newValues.put(KEY_DIAGRAM_NAME, diagramName); + newValues.put(KEY_RESULT, result); + + return db.update(TABLE_DIAGRAM_SCORE, newValues, where, null) != 0; + + } + + // /////////////////////////////////////////////////////////////////// + // Private Helper Classes: + // /////////////////////////////////////////////////////////////////// + + /** + * Private class which handles database creation and upgrading. Used to + * handle low-level database access. + */ + private static class DatabaseHelper extends SQLiteOpenHelper { + DatabaseHelper(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + } + + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL(SQL_CREATE_DIAGRAM_SCORE); + db.execSQL(SQL_CREATE_DIAGRAM_BESTSCORE); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + Log.w(TAG, "Upgrading application's database from version " + + oldVersion + " to " + newVersion + + ", which will destroy all old data!"); + + // Destroy old database: + db.execSQL("DROP TABLE IF EXISTS " + TABLE_DIAGRAM_SCORE); + + // Recreate new database: + onCreate(db); + } + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/database/Database.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/database/Database.java new file mode 100644 index 00000000..f68b26af --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/database/Database.java @@ -0,0 +1,86 @@ +package com.buildmlearn.labeldiagram.database; + +import java.util.ArrayList; +import java.util.List; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; + +import com.buildmlearn.labeldiagram.entity.Badge; +import com.readystatesoftware.sqliteasset.SQLiteAssetHelper; + +public class Database extends SQLiteAssetHelper{ + + private static final String DATABASE_NAME = "staticdata.db"; + private static final String KEY_ACHIEVED = "isAchieved"; + private static final String KEY_NAME = "name"; + private static final String TABLE_BADGE = "Badge"; + private static final int DATABASE_VERSION = 1; + private SQLiteDatabase db; + + public Database(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + db = getReadableDatabase(); + } + + public String getLesson(String diagramTitle){ + + db = getReadableDatabase(); + String query = "SELECT * FROM Lesson where diagram_name='" + diagramTitle + "'"; + String result = null; + Cursor cursor = db.rawQuery(query, null); + + if(cursor.moveToFirst()){ + result = cursor.getString(1); + } + cursor.close(); + return result; + } + + public Badge getBadge(String badgeTitle){ + + db = getReadableDatabase(); + String query = "SELECT * FROM Badge where name='" + badgeTitle + "'"; + Badge badge = new Badge(); + Cursor cursor = db.rawQuery(query, null); + + if(cursor.moveToFirst()){ + badge.setTitle(cursor.getString(0)); + badge.setDescription(cursor.getString(1)); + //badge.setIconId(Integer.parseInt(cursor.getString(3))); + } + cursor.close(); + return badge; + } + + public List getAchievedBadge(boolean value){ + db = getReadableDatabase(); + String query = "SELECT * FROM Badge where isAchieved='" + 1 + "'"; + + List badgeList = new ArrayList(); + Cursor cursor = db.rawQuery(query, null); + + if(cursor.moveToFirst()){ + do { + Badge badge = new Badge(); + badge.setTitle(cursor.getString(0)); + badge.setDescription(cursor.getString(1)); + badgeList.add(badge); + } while (cursor.moveToNext()); + + //badge.setIconId(Integer.parseInt(cursor.getString(3))); + } + cursor.close(); + return badgeList; + } + + public boolean updateBadgeAchievement(String badgeTitle, boolean result){ + + ContentValues values = new ContentValues(); + values.put(KEY_ACHIEVED, result); + return db.update(TABLE_BADGE, values, KEY_NAME + " = ?", new String[]{ badgeTitle }) > 0; + + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/entity/Badge.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/entity/Badge.java new file mode 100644 index 00000000..5650e603 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/entity/Badge.java @@ -0,0 +1,55 @@ +package com.buildmlearn.labeldiagram.entity; + +public class Badge { + + // Fields + private String title; + private String description; + private int iconId; + + // Constructors + public Badge() { + super(); + } + + public Badge(String title, String description) { + super(); + this.title = title; + this.description = description; + } + + public Badge(String title, String description, int iconId) { + super(); + this.title = title; + this.description = description; + this.iconId = iconId; + } + + // Getters and Setters + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public int getIconId() { + return iconId; + } + + public void setIconId(int iconId) { + this.iconId = iconId; + } + + + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/entity/Diagram.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/entity/Diagram.java new file mode 100644 index 00000000..01f67f9a --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/entity/Diagram.java @@ -0,0 +1,34 @@ +package com.buildmlearn.labeldiagram.entity; + +import java.util.List; + +import android.widget.ImageView; + +public class Diagram { + + private String diagramTitle; + private List taglist; + private List placeholderList; + + + public List getTaglist() { + return taglist; + } + public void setTaglist(List taglist) { + this.taglist = taglist; + } + public List getPlaceholderList() { + return placeholderList; + } + public void setPlaceholderList(List placeholderList) { + this.placeholderList = placeholderList; + } + + public String getDiagramTitle() { + return diagramTitle; + } + public void setDiagramTitle(String diagramTitle) { + this.diagramTitle = diagramTitle; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/entity/Lesson.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/entity/Lesson.java new file mode 100644 index 00000000..90e5aeb7 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/entity/Lesson.java @@ -0,0 +1,46 @@ +package com.buildmlearn.labeldiagram.entity; + +import java.util.List; + +public class Lesson { + + private String diagramName; + private List tagList; + private List tagDescriptionList; + + public Lesson() { + } + + public Lesson(String diagramName, List tagList, + List tagDescriptionList) { + super(); + this.diagramName = diagramName; + this.tagList = tagList; + this.tagDescriptionList = tagDescriptionList; + } + + public String getDiagramName() { + return diagramName; + } + + public void setDiagramName(String diagramName) { + this.diagramName = diagramName; + } + + public List getTagList() { + return tagList; + } + + public void setTagList(List tagList) { + this.tagList = tagList; + } + + public List getTagDescriptionList() { + return tagDescriptionList; + } + + public void setTagDescriptionList(List tagDescriptionList) { + this.tagDescriptionList = tagDescriptionList; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/entity/Result.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/entity/Result.java new file mode 100644 index 00000000..e43f6ee4 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/entity/Result.java @@ -0,0 +1,84 @@ +package com.buildmlearn.labeldiagram.entity; + +import java.util.ArrayList; +import java.util.List; + +import android.widget.TextView; + +public class Result { + + private String diagramName; + private float score; + private float gameScore; + private boolean isCompleted; + private List correctTagList; + private List incorrectTagList; + + public Result(String diagramName) { + super(); + this.diagramName = diagramName; + this.correctTagList = new ArrayList(); + this.incorrectTagList = new ArrayList(); + } + + public Result() { + } + + public String getDiagramName() { + return diagramName; + } + + public void setDiagramName(String diagramName) { + this.diagramName = diagramName; + } + + public float getScore() { + return score; + } + + public void setScore(float score) { + this.score = score; + } + + public float getGameScore() { + return gameScore; + } + + public void setGameScore(float gameScore) { + this.gameScore = gameScore; + } + + public boolean getCompleted() { + return isCompleted; + } + + public void setCompleted(boolean isCompleted) { + this.isCompleted = isCompleted; + } + + + public List getCorrectTagList() { + return correctTagList; + } + + public void setCorrectTagList(List correctTagList) { + this.correctTagList = correctTagList; + } + + public List getIncorrectTagList() { + return incorrectTagList; + } + + public void setIncorrectTagList(List incorrectTagList) { + this.incorrectTagList = incorrectTagList; + } + + @Override + public String toString() { + return "Result [diagramName=" + diagramName + ", score=" + score + + ", gameScore=" + gameScore + ", isCompleted=" + isCompleted + + ", correctTagList=" + correctTagList + ", incorrectTagList=" + + incorrectTagList + "]"; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/entity/Tag.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/entity/Tag.java new file mode 100644 index 00000000..8ca5de9e --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/entity/Tag.java @@ -0,0 +1,66 @@ +package com.buildmlearn.labeldiagram.entity; + +import android.widget.TextView; + +public class Tag { + + private int id; + private String message; + private TextView tagLabel; + private Position position; + + public enum Position{ + LEFT, + RIGHT + } + + + public Tag(Position position){ + this.position=position; + } + + public Tag(String message, TextView tagLabel, Position pos) { + super(); + this.message = message; + this.tagLabel = tagLabel; + this.position = pos; + } + + public Tag(int id, String message, TextView tagLabel, Position pos) { + super(); + this.id = id; + this.message = message; + this.tagLabel = tagLabel; + this.position = pos; + } + + + public Position getPos() { + return position; + } + public void setPos(Position pos) { + this.position = pos; + } + + public int getId() { + return id; + } + public void setId(int id) { + this.id = id; + } + public String getMessage() { + return message; + } + public void setMessage(String message) { + this.message = message; + } + public TextView getTagLabel() { + return tagLabel; + } + public void setTagLabel(TextView tagLabel) { + this.tagLabel = tagLabel; + } + + + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/helper/ClassMapper.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/helper/ClassMapper.java new file mode 100644 index 00000000..7dec69cc --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/helper/ClassMapper.java @@ -0,0 +1,111 @@ +package com.buildmlearn.labeldiagram.helper; + +import java.util.HashMap; + +import com.buildmlearn.labeldiagram.DiagramPlayBacteria; +import com.buildmlearn.labeldiagram.DiagramPlayCarbonCycle; +import com.buildmlearn.labeldiagram.DiagramPlayCircuit; +import com.buildmlearn.labeldiagram.DiagramPlayDryCell; +import com.buildmlearn.labeldiagram.DiagramPlayHumanEar; +import com.buildmlearn.labeldiagram.DiagramPlayHumanEye; +import com.buildmlearn.labeldiagram.DiagramPlayHumanHeart; +import com.buildmlearn.labeldiagram.DiagramPlayLens; +import com.buildmlearn.labeldiagram.DiagramPlayMotor; +import com.buildmlearn.labeldiagram.DiagramPlayPlantCell; +import com.buildmlearn.labeldiagram.DiagramPlayPlantFlower; +import com.buildmlearn.labeldiagram.DiagramPlayPrism; +import com.buildmlearn.labeldiagram.DiagramPlaySolarSystem; +import com.buildmlearn.labeldiagram.DiagramPlaySpectrum; +import com.buildmlearn.labeldiagram.DiagramPlayStarPatterns; +import com.buildmlearn.labeldiagram.DiagramPlayVirus; +import com.buildmlearn.labeldiagram.DiagramPlayWaterCycle; + +public class ClassMapper { + + private HashMap> classMap; + private HashMap tagMap; + private static ClassMapper classmapper; + + private ClassMapper(){ + classMap = new HashMap>(); + tagMap = new HashMap(); + createClassMap(); + createTagMap(); + } + + private void createTagMap() { + + tagMap.put("Human Eye", "HumanEye"); + tagMap.put("Human Ear", "HumanEar"); + tagMap.put("Human Heart", "HumanHeart"); + tagMap.put("Bacteria", "Bacteria"); + tagMap.put("Virus", "Virus"); + tagMap.put("Plant Cell", "PlantCell"); + tagMap.put("Plant Flower", "PlantFlower"); + tagMap.put("Water Cycle", "WaterCycle"); + tagMap.put("Carbon Cycle", "CarbonCycle"); + tagMap.put("Light Spectrum", "Spectrum"); + tagMap.put("Prism Refraction", "Prism"); + tagMap.put("Lens Refraction", "Lens"); + tagMap.put("Electric Motor", "Motor"); + tagMap.put("Dry Cell", "DryCell"); + tagMap.put("Electric Circuit", "Circuit"); + tagMap.put("Solar System", "SolarSystem"); + tagMap.put("Star Patterns", "StarPatterns"); + + } + + /** + * + */ + private void createClassMap() { + + classMap.put("HumanEye",DiagramPlayHumanEye.class); + classMap.put("HumanEar", DiagramPlayHumanEar.class); + classMap.put("HumanHeart", DiagramPlayHumanHeart.class); + classMap.put("Bacteria", DiagramPlayBacteria.class); + classMap.put("Virus", DiagramPlayVirus.class); + classMap.put("PlantCell", DiagramPlayPlantCell.class); + classMap.put("PlantFlower", DiagramPlayPlantFlower.class); + classMap.put("WaterCycle", DiagramPlayWaterCycle.class); + classMap.put("CarbonCycle", DiagramPlayCarbonCycle.class); + classMap.put("Prism", DiagramPlayPrism.class); + classMap.put("Lens", DiagramPlayLens.class); + classMap.put("Spectrum", DiagramPlaySpectrum.class); + classMap.put("Motor", DiagramPlayMotor.class); + classMap.put("DryCell", DiagramPlayDryCell.class); + classMap.put("Circuit", DiagramPlayCircuit.class); + classMap.put("SolarSystem", DiagramPlaySolarSystem.class); + classMap.put("StarPatterns", DiagramPlayStarPatterns.class); + + } + + public static ClassMapper getInstance(){ + + if(classmapper == null){ + classmapper = new ClassMapper(); + } + return classmapper; + + } + + public HashMap> getMap() { + return classMap; + } + + public void setMap(HashMap> map) { + this.classMap = map; + } + + + public HashMap getTagMap() { + return tagMap; + } + + public void setTagMap(HashMap tagMap) { + this.tagMap = tagMap; + } + + + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/helper/DiagramResultContainer.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/helper/DiagramResultContainer.java new file mode 100644 index 00000000..29e2cce3 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/helper/DiagramResultContainer.java @@ -0,0 +1,40 @@ +package com.buildmlearn.labeldiagram.helper; + +import java.util.HashMap; + +import com.buildmlearn.labeldiagram.entity.Result; + +public class DiagramResultContainer { + + private static DiagramResultContainer resultcontainer; + + private HashMap results; + + private DiagramResultContainer(){ + + results = new HashMap(); + + } + + public static DiagramResultContainer getInstance(){ + + if(resultcontainer== null){ + + resultcontainer = new DiagramResultContainer(); + + } + + return resultcontainer; + } + + public HashMap getResults() { + return results; + } + + public void setResults(HashMap results) { + this.results = results; + } + + + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/helper/HelperClass.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/helper/HelperClass.java new file mode 100644 index 00000000..fc72dabd --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/helper/HelperClass.java @@ -0,0 +1,47 @@ +package com.buildmlearn.labeldiagram.helper; + +import android.app.ActionBar; +import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; +import android.graphics.Typeface; +import android.preference.PreferenceManager; + +public class HelperClass { + + // Set ActionBar + public static void setActionBar(String title,Activity context){ + ActionBar actionBar = context.getActionBar(); + actionBar.setTitle(title); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.show(); + } + + // Set custom fonts + public static Typeface customFontManager(Typeface tf, Context context){ + Typeface mTypeface = Typeface.createFromAsset(context.getAssets(), "fonts/"+tf); + return mTypeface; + } + + // Remove whitespaces from tags + public static String removeSpaces(String tag){ + tag = tag.replaceAll("\\s+", "").trim(); + return tag; + } + + // Set preferences for all the activities + public static void setPreferences(String key, String value, Context context) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + SharedPreferences.Editor editor = prefs.edit(); + editor.putString(key, value); + editor.commit(); + } + + // Get preferences for each activity + public static String getPreferences(String key, Context context) { + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); + return preferences.getString(key, null); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/helper/PlaceHolderContainer.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/helper/PlaceHolderContainer.java new file mode 100644 index 00000000..bc11c8e2 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/helper/PlaceHolderContainer.java @@ -0,0 +1,393 @@ +package com.buildmlearn.labeldiagram.helper; + +import java.util.ArrayList; +import java.util.List; + +import com.example.labelthediagram.R; + +/** + * @author Akilaz This helper class is for separating the place holders which + * are on the left side and right side of a particular diagram in order + * to determine the tag dropping behavior in the DiagramPlay Activity + */ +public class PlaceHolderContainer { + + private Integer[] leftPlaceHolderList; + private Integer[] rightPlaceHolderList; + private List listHolder; + + public PlaceHolderContainer() { + + this.leftPlaceHolderList = new Integer[] {}; + this.rightPlaceHolderList = new Integer[] {}; + this.listHolder = new ArrayList(); + + } + + // Switching the helper method according to the diagram name + public List diagramCaller(String diagramName) { + if (!diagramName.equals(null)) { + switch (diagramName) { + + case "HumanEye": + getHumanEyeMarkerList(); + break; + case "HumanHeart": + getHumanHeartMarkerList(); + break; + case "HumanEar": + getHumanEarMarkerList(); + break; + case "PlantCell": + getPlantCellMarkerList(); + break; + case "PlantFlower": + getPlantFlowerMarkerList(); + break; + case "Bacteria": + getBacteriaMarkerList(); + break; + case "Virus": + getVirusMarkerList(); + break; + case "WaterCycle": + getWaterCycleMarkerList(); + break; + case "CarbonCycle": + getCarbonCycleMarkerList(); + break; + case "Prism": + getPrismMarkerList(); + break; + case "Lens": + getLensMarkerList(); + break; + case "Motor": + getMotorMarkerList(); + break; + case "DryCell": + getDryCellMarkerList(); + break; + case "Circuit": + getCircuitMarkerList(); + break; + case "Spectrum": + getSpectrumMarkerList(); + break; + case "SolarSystem": + getSolarSystemMarkerList(); + break; + case "StarPatterns": + getStarPatternsMarkerList(); + break; + // TODO The other diagrams goes here + + } + return listHolder; + } else { + return null; + } + } + + private List getStarPatternsMarkerList() { + + leftPlaceHolderList = new Integer[] { R.id.libraBlb, R.id.orianBlb }; + + rightPlaceHolderList = new Integer[] { R.id.scorpioBlb, R.id.leoBlb, + R.id.little_dripperBlb, R.id.big_dripperBlb, R.id.geminiBlb, + R.id.dracoBlb, + + }; + + listHolder.add(leftPlaceHolderList); + listHolder.add(rightPlaceHolderList); + + return listHolder; + + } + + private List getSolarSystemMarkerList() { + + leftPlaceHolderList = new Integer[] { R.id.earthBlb, R.id.venusBlb }; + + rightPlaceHolderList = new Integer[] { R.id.sunBlb, R.id.mercuryBlb, + R.id.neptuneBlb, R.id.saturnBlb, R.id.jupiterBlb, R.id.marsBlb, + R.id.uranusBlb + + }; + + listHolder.add(leftPlaceHolderList); + listHolder.add(rightPlaceHolderList); + + return listHolder; + + } + + private List getSpectrumMarkerList() { + + leftPlaceHolderList = new Integer[] { R.id.radio_wavesBlb, R.id.irBlb + + }; + + rightPlaceHolderList = new Integer[] { R.id.amBlb, R.id.fmBlb, + R.id.uvBlb, R.id.xrayBlb, R.id.gammaBlb, R.id.visibleLightBlb, + R.id.microwaveBlb + + }; + + listHolder.add(leftPlaceHolderList); + listHolder.add(rightPlaceHolderList); + + return listHolder; + + } + + private List getCircuitMarkerList() { + + leftPlaceHolderList = new Integer[] { R.id.capacitorBlb, + R.id.voltmeterBlb, R.id.loadBlb + + }; + + rightPlaceHolderList = new Integer[] { R.id.batteryBlb, + R.id.currentBlb, R.id.ameterBlb, R.id.resistorBlb, + R.id.bulbBlb, R.id.switchBlb + + }; + + listHolder.add(leftPlaceHolderList); + listHolder.add(rightPlaceHolderList); + + return listHolder; + + } + + private List getDryCellMarkerList() { + + leftPlaceHolderList = new Integer[] { R.id.posTerminalBlb, + R.id.negTerminalBlb, R.id.airSpaceBlb, R.id.anodeBlb + + }; + + rightPlaceHolderList = new Integer[] { R.id.chemPasteBlb, + R.id.cathodeBlb, R.id.sealBlb, R.id.insulatorBlb, + R.id.mJacketBlb + + }; + + listHolder.add(leftPlaceHolderList); + listHolder.add(rightPlaceHolderList); + + return listHolder; + + } + + private List getMotorMarkerList() { + + leftPlaceHolderList = new Integer[] { R.id.northPoleBlb, + R.id.southPoleBlb, R.id.magFieldBlb, R.id.forceBlb, + R.id.axelBlb + + }; + + rightPlaceHolderList = new Integer[] { R.id.brushBlb, R.id.batteryBlb, + R.id.commutatorBlb, R.id.armatureBlb, + + }; + + listHolder.add(leftPlaceHolderList); + listHolder.add(rightPlaceHolderList); + + return listHolder; + + } + + private List getLensMarkerList() { + + leftPlaceHolderList = new Integer[] { R.id.lensBlb, R.id.imageBlb + + }; + + rightPlaceHolderList = new Integer[] { R.id.principalRayBlb, + R.id.centralRayBlb, R.id.focalRayBlb, R.id.objectBlb, + R.id.focusBlb, R.id.lensAxisBlb + + }; + + listHolder.add(leftPlaceHolderList); + listHolder.add(rightPlaceHolderList); + + return listHolder; + } + + private List getPrismMarkerList() { + + leftPlaceHolderList = new Integer[] { R.id.prismAngleBlb, + R.id.refAngleBlb, R.id.emergeAngleBlb, R.id.emergeRayBlb + + }; + + rightPlaceHolderList = new Integer[] { R.id.incAngleBlb, + R.id.incRayBlb, R.id.devAngleBlb, R.id.refRayBlb + + }; + + listHolder.add(leftPlaceHolderList); + listHolder.add(rightPlaceHolderList); + + return listHolder; + + } + + private List getCarbonCycleMarkerList() { + + leftPlaceHolderList = new Integer[] { R.id.organic_carbonBlb, + R.id.dead_organismsBlb, R.id.fossilsBlb + + }; + + rightPlaceHolderList = new Integer[] { R.id.sunlightBlb, + R.id.vehicle_emissionsBlb, R.id.plant_respirationBlb, + R.id.animal_respirationBlb, R.id.ocean_uptakeBlb, + R.id.photosynthesisBlb + + }; + + listHolder.add(leftPlaceHolderList); + listHolder.add(rightPlaceHolderList); + + return listHolder; + + } + + private List getWaterCycleMarkerList() { + + leftPlaceHolderList = new Integer[] { R.id.oceanBlb, + R.id.infiltrationBlb, R.id.precipitationBlb, + R.id.surface_runBlb, R.id.condensationBlb, + R.id.transpirationBlb }; + + rightPlaceHolderList = new Integer[] { R.id.eveporationBlb, + R.id.underground_waterBlb }; + + listHolder.add(leftPlaceHolderList); + listHolder.add(rightPlaceHolderList); + + return listHolder; + } + + private List getVirusMarkerList() { + + leftPlaceHolderList = new Integer[] { R.id.headBlb, R.id.collarBlb, + R.id.sheathBlb, R.id.tailpinsBlb }; + + rightPlaceHolderList = new Integer[] { R.id.tailfibreBlb, + R.id.baseplateBlb, R.id.dnaBlb, R.id.neckBlb }; + + listHolder.add(leftPlaceHolderList); + listHolder.add(rightPlaceHolderList); + + return listHolder; + } + + private List getBacteriaMarkerList() { + + leftPlaceHolderList = new Integer[] { R.id.piliBlb, + R.id.food_granuleBlb, R.id.ribosomesBlb, R.id.chromosomeBlb }; + + rightPlaceHolderList = new Integer[] { R.id.flagellumBlb, + R.id.plasmidBlb, R.id.cytoplasmBlb, R.id.plasma_membraneBlb, + R.id.cellwallBlb, R.id.capsuleBlb }; + + listHolder.add(leftPlaceHolderList); + listHolder.add(rightPlaceHolderList); + + return listHolder; + } + + private List getPlantFlowerMarkerList() { + + leftPlaceHolderList = new Integer[] { R.id.stigmaBlb, R.id.antherBlb, + R.id.petalBlb, R.id.receptacleBlb, R.id.pedicelBlb }; + + rightPlaceHolderList = new Integer[] { R.id.styleBlb, R.id.overyBlb, + R.id.filamentBlb, R.id.sepalBlb, R.id.ovuleBlb }; + + listHolder.add(leftPlaceHolderList); + listHolder.add(rightPlaceHolderList); + + return listHolder; + + } + + private List getPlantCellMarkerList() { + + leftPlaceHolderList = new Integer[] { R.id.ribosomesBlb, + R.id.smootherBlb, R.id.rougherBlb, R.id.nucleusBlb, + R.id.golgi_complexBlb }; + + rightPlaceHolderList = new Integer[] { R.id.vacuoleTag, + R.id.cellwallTag, R.id.cell_membraneTag, R.id.mitochondiumTag, + R.id.chloroplastTag }; + + listHolder.add(leftPlaceHolderList); + listHolder.add(rightPlaceHolderList); + + return listHolder; + } + + private List getHumanHeartMarkerList() { + + leftPlaceHolderList = new Integer[] { R.id.sup_vena_cavaBlb, + R.id.right_atriumBlb, R.id.inf_vena_cavaBlb }; + + rightPlaceHolderList = new Integer[] { R.id.right_ventricleBlb, + R.id.left_ventricleBlb, R.id.left_atriumBlb, + R.id.pul_arteryBulb, R.id.aortaBlb, R.id.pul_veinBlb, }; + + listHolder.add(leftPlaceHolderList); + listHolder.add(rightPlaceHolderList); + + return listHolder; + + } + + /* + * Return list of arrays containing left placeholder Ids and right + * placeholder Ids of HumanEar diagram + */ + private List getHumanEarMarkerList() { + + leftPlaceHolderList = new Integer[] { R.id.pinnaBlb, R.id.malleusBlb, + R.id.outerearBlb }; + + rightPlaceHolderList = new Integer[] { R.id.earcanalBlb, + R.id.eardrumBlb, R.id.cochleaBlb, R.id.earnerveBlb, + R.id.incusBlb, R.id.stapesBlb, R.id.canalsBlb }; + + listHolder.add(leftPlaceHolderList); + listHolder.add(rightPlaceHolderList); + + return listHolder; + } + + /* + * Return list of arrays containing left placeholder Ids and right + * placeholder Ids of HumanEye diagram + */ + private List getHumanEyeMarkerList() { + + leftPlaceHolderList = new Integer[] { R.id.corneaBlb, + R.id.ciliaryBodyBlb, R.id.irisBlb, R.id.pupilBlb, R.id.lensBlb, }; + + rightPlaceHolderList = new Integer[] { R.id.foveaBlb, R.id.retinaBlb, + R.id.opticNerveBlb, R.id.blindSpotBlb, R.id.vitreousBlb }; + + listHolder.add(leftPlaceHolderList); + listHolder.add(rightPlaceHolderList); + + return listHolder; + + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/helper/TagContainerSingleton.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/helper/TagContainerSingleton.java new file mode 100644 index 00000000..4525f248 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/helper/TagContainerSingleton.java @@ -0,0 +1,49 @@ +package com.buildmlearn.labeldiagram.helper; + +import java.util.ArrayList; +import java.util.List; + +import android.widget.TextView; + +public class TagContainerSingleton { + + private static TagContainerSingleton tagContainer; + + private List correctLabelList; + private List incorrectLabelList; + + private TagContainerSingleton() { + + correctLabelList = new ArrayList(); + incorrectLabelList = new ArrayList(); + + } + + public static TagContainerSingleton getInstance(){ + + if(tagContainer == null){ + + tagContainer = new TagContainerSingleton(); + + } + return tagContainer; + + } + + public List getCorrectLabelList() { + return correctLabelList; + } + + public void setCorrectLabelList(List correctLabelList) { + this.correctLabelList = correctLabelList; + } + + public List getIncorrectLabelList() { + return incorrectLabelList; + } + + public void setIncorrectLabelList(List incorrectLabelList) { + this.incorrectLabelList = incorrectLabelList; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/helper/TagPlaceholderMapper.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/helper/TagPlaceholderMapper.java new file mode 100644 index 00000000..fd5b31df --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/helper/TagPlaceholderMapper.java @@ -0,0 +1,388 @@ +package com.buildmlearn.labeldiagram.helper; + +import com.example.labelthediagram.R; +import android.util.SparseIntArray; + +/** + * This class is to map dragging textView tags to relevant + * imageView place holders so that to identify that the user + * has correctly labeled the diagram in DiagramPlay activity + */ +public class TagPlaceholderMapper { + + private SparseIntArray tagMapper; + + public TagPlaceholderMapper(){ + + tagMapper = new SparseIntArray(); + + } + + // Call the correct method according to the diagram name + public SparseIntArray diagramMapper(String diagramName){ + + if(!diagramName.equals(null)){ + switch(diagramName){ + + case "HumanEye": + getHumanEyeTagMap(); + break; + case "HumanEar": + getHumanEarTagMap(); + break; + case "HumanHeart": + getHumanHeartTagMap(); + break; + case "PlantCell": + getPlantCellTagMap(); + break; + case "PlantFlower": + getPlantFlowerTagMap(); + break; + case "Bacteria": + getBacteriaTagMap(); + break; + case "Virus": + getVirusTagMap(); + break; + case "WaterCycle": + getWaterCycleTagMap(); + break; + case "CarbonCycle": + getCarbonCycleTagMap(); + break; + case "Prism": + getPrismTagMap(); + break; + case "Lens": + getLensTagMap(); + break; + case "Motor": + getMotorTagMap(); + break; + case "DryCell": + getDryCellTagMap(); + break; + case "Circuit": + getCircuitTagMap(); + break; + case "Spectrum": + getSpectrumTagMap(); + break; + case "SolarSystem": + getSolarSystemTagMap(); + break; + case "StarPatterns": + getStarPatternsTagMap(); + break; + + } + } + + return tagMapper; + } + + private SparseIntArray getStarPatternsTagMap() { + + tagMapper.put(R.id.libraBlb, R.id.libraTag); + tagMapper.put(R.id.little_dripperBlb, R.id.little_dripperTag); + tagMapper.put(R.id.big_dripperBlb, R.id.big_dripperTag); + tagMapper.put(R.id.scorpioBlb, R.id.scorpioTag); + tagMapper.put(R.id.orianBlb, R.id.orianTag); + tagMapper.put(R.id.leoBlb, R.id.leoTag); + tagMapper.put(R.id.geminiBlb, R.id.geminiTag); + tagMapper.put(R.id.dracoBlb, R.id.dracoTag); + + return tagMapper; + + } + + private SparseIntArray getSolarSystemTagMap() { + + tagMapper.put(R.id.sunBlb, R.id.sunTag); + tagMapper.put(R.id.mercuryBlb, R.id.mercuryTag); + tagMapper.put(R.id.venusBlb, R.id.venusTag); + tagMapper.put(R.id.earthBlb, R.id.earthTag); + tagMapper.put(R.id.marsBlb, R.id.marsTag); + tagMapper.put(R.id.jupiterBlb, R.id.jupiterTag); + tagMapper.put(R.id.saturnBlb, R.id.saturnTag); + tagMapper.put(R.id.uranusBlb, R.id.uranusTag); + tagMapper.put(R.id.neptuneBlb, R.id.neptuneTag); + + return tagMapper; + + } + + private SparseIntArray getSpectrumTagMap() { + + tagMapper.put(R.id.amBlb, R.id.amTag); + tagMapper.put(R.id.fmBlb, R.id.fmTag); + tagMapper.put(R.id.microwaveBlb, R.id.microwaveTag); + tagMapper.put(R.id.visibleLightBlb, R.id.visibleLightTag); + tagMapper.put(R.id.radio_wavesBlb, R.id.radio_wavesTag); + tagMapper.put(R.id.irBlb, R.id.irTag); + tagMapper.put(R.id.uvBlb, R.id.uvTag); + tagMapper.put(R.id.xrayBlb, R.id.xrayTag); + tagMapper.put(R.id.gammaBlb, R.id.gammaTag); + + return tagMapper; + + } + + private SparseIntArray getCircuitTagMap() { + + tagMapper.put(R.id.capacitorBlb, R.id.capacitorTag); + tagMapper.put(R.id.batteryBlb, R.id.batteryTag); + tagMapper.put(R.id.currentBlb, R.id.currentTag); + tagMapper.put(R.id.resistorBlb, R.id.resistorTag); + tagMapper.put(R.id.switchBlb, R.id.switchTag); + tagMapper.put(R.id.ameterBlb, R.id.ameterTag); + tagMapper.put(R.id.loadBlb, R.id.loadTag); + tagMapper.put(R.id.voltmeterBlb, R.id.voltmeterTag); + tagMapper.put(R.id.bulbBlb, R.id.bulbTag); + + return tagMapper; + + } + + private SparseIntArray getDryCellTagMap() { + + tagMapper.put(R.id.posTerminalBlb, R.id.posTerminalTag); + tagMapper.put(R.id.negTerminalBlb, R.id.negTerminalTag); + tagMapper.put(R.id.chemPasteBlb, R.id.chemPasteTag); + tagMapper.put(R.id.anodeBlb, R.id.anodeTag); + tagMapper.put(R.id.cathodeBlb, R.id.cathodeTag); + tagMapper.put(R.id.airSpaceBlb, R.id.airSpaceTag); + tagMapper.put(R.id.sealBlb, R.id.sealTag); + tagMapper.put(R.id.mJacketBlb, R.id.mJacketTag); + tagMapper.put(R.id.insulatorBlb, R.id.insulatorTag); + + return tagMapper; + + } + + private SparseIntArray getMotorTagMap() { + + tagMapper.put(R.id.northPoleBlb, R.id.northPoleTag); + tagMapper.put(R.id.southPoleBlb, R.id.southPoleTag); + tagMapper.put(R.id.magFieldBlb, R.id.magFieldTag); + tagMapper.put(R.id.forceBlb, R.id.forceTag); + tagMapper.put(R.id.axelBlb, R.id.axelTag); + tagMapper.put(R.id.batteryBlb, R.id.batteryTag); + tagMapper.put(R.id.commutatorBlb, R.id.commutatorTag); + tagMapper.put(R.id.brushBlb, R.id.brushTag); + tagMapper.put(R.id.armatureBlb, R.id.armatureTag); + + return tagMapper; + + } + + private SparseIntArray getLensTagMap() { + + tagMapper.put(R.id.principalRayBlb, R.id.principalRayTag); + tagMapper.put(R.id.centralRayBlb, R.id.centralRayTag); + tagMapper.put(R.id.focalRayBlb, R.id.focalRayTag); + tagMapper.put(R.id.focusBlb, R.id.focusTag); + tagMapper.put(R.id.objectBlb, R.id.objectTag); + tagMapper.put(R.id.imageBlb, R.id.imageTag); + tagMapper.put(R.id.lensBlb, R.id.lensTag); + tagMapper.put(R.id.lensAxisBlb, R.id.lensAxisTag); + + return tagMapper; + } + + private SparseIntArray getPrismTagMap() { + + tagMapper.put(R.id.prismAngleBlb, R.id.prismAngleTag); + tagMapper.put(R.id.refAngleBlb, R.id.refAngleTag); + tagMapper.put(R.id.incAngleBlb, R.id.incAngleTag); + tagMapper.put(R.id.incRayBlb, R.id.incRayTag); + tagMapper.put(R.id.devAngleBlb, R.id.devAngleTag); + tagMapper.put(R.id.refRayBlb, R.id.refRayTag); + tagMapper.put(R.id.emergeAngleBlb, R.id.emergeAngleTag); + tagMapper.put(R.id.emergeRayBlb, R.id.emergeRayTag); + + return tagMapper; + } + + private SparseIntArray getCarbonCycleTagMap() { + + tagMapper.put(R.id.ocean_uptakeBlb, R.id.ocean_uptakeTag); + tagMapper.put(R.id.plant_respirationBlb, R.id.plant_respirationTag); + tagMapper.put(R.id.animal_respirationBlb, R.id.animal_respirationTag); + tagMapper.put(R.id.dead_organismsBlb, R.id.dead_organismsTag); + tagMapper.put(R.id.fossilsBlb, R.id.fossilsTag); + tagMapper.put(R.id.sunlightBlb, R.id.sunlightTag); + tagMapper.put(R.id.organic_carbonBlb, R.id.organic_carbonTag); + tagMapper.put(R.id.vehicle_emissionsBlb, R.id.vehicle_emissionsTag); + tagMapper.put(R.id.photosynthesisBlb, R.id.photosynthesisTag); + + return tagMapper; + } + + /* + * Map correct draggable Tags(TextViews) to droppable place holders(ImageViews + * in Water Cycle diagram + */ + private SparseIntArray getWaterCycleTagMap() { + + tagMapper.put(R.id.oceanBlb, R.id.oceanTag); + tagMapper.put(R.id.precipitationBlb, R.id.preciptationTag); + tagMapper.put(R.id.infiltrationBlb, R.id.infiltratoinTag); + tagMapper.put(R.id.condensationBlb, R.id.condensationTag); + tagMapper.put(R.id.eveporationBlb, R.id.eveporationTag); + tagMapper.put(R.id.transpirationBlb, R.id.transpirationTag); + tagMapper.put(R.id.underground_waterBlb, R.id.underground_waterTag); + tagMapper.put(R.id.surface_runBlb, R.id.surface_runTag); + + return tagMapper; + + } + + /* + * Map correct draggable Tags(TextViews) to droppable place holders(ImageViews + * in Virus diagram + */ + private SparseIntArray getVirusTagMap() { + + tagMapper.put(R.id.headBlb, R.id.headTag); + tagMapper.put(R.id.collarBlb, R.id.collarTag); + tagMapper.put(R.id.neckBlb, R.id.neckTag); + tagMapper.put(R.id.sheathBlb, R.id.sheathTag); + tagMapper.put(R.id.tailfibreBlb, R.id.tailfibreTag); + tagMapper.put(R.id.tailpinsBlb, R.id.tailpinsTag); + tagMapper.put(R.id.baseplateBlb, R.id.baseplateTag); + tagMapper.put(R.id.dnaBlb, R.id.dnaTag); + + return tagMapper; + + } + + /* + * Map correct draggable Tags(TextViews) to droppable place holders(ImageViews + * in Bacteria diagram + */ + private SparseIntArray getBacteriaTagMap() { + + tagMapper.put(R.id.chromosomeBlb, R.id.chromosomeTag); + tagMapper.put(R.id.ribosomesBlb, R.id.ribosomesTag); + tagMapper.put(R.id.food_granuleBlb, R.id.food_granuleTag); + tagMapper.put(R.id.piliBlb, R.id.piliTag); + tagMapper.put(R.id.flagellumBlb, R.id.flagellumTag); + tagMapper.put(R.id.plasmidBlb, R.id.plasmidTag); + tagMapper.put(R.id.capsuleBlb, R.id.capsuleTag); + tagMapper.put(R.id.cellwallBlb, R.id.cellwallTag); + tagMapper.put(R.id.cytoplasmBlb, R.id.cytoplasmTag); + tagMapper.put(R.id.plasma_membraneBlb, R.id.plasma_membraneTag); + + return tagMapper; + + + } + + /* + * Map correct draggable Tags(TextViews) to droppable place holders(ImageViews + * in PlantFlower diagram + */ + private SparseIntArray getPlantFlowerTagMap() { + + tagMapper.put(R.id.antherBlb, R.id.antherTag); + tagMapper.put(R.id.petalBlb, R.id.petalTag); + tagMapper.put(R.id.receptacleBlb, R.id.receptacleTag); + tagMapper.put(R.id.pedicelBlb, R.id.pedicelTag); + tagMapper.put(R.id.stigmaBlb, R.id.stigmaTag); + tagMapper.put(R.id.styleBlb, R.id.styleTag); + tagMapper.put(R.id.overyBlb, R.id.overyTag); + tagMapper.put(R.id.filamentBlb, R.id.filamentTag); + tagMapper.put(R.id.sepalBlb, R.id.sepalTag); + tagMapper.put(R.id.ovuleBlb, R.id.ovuleTag); + + return tagMapper; + + } + + /* + * Map correct draggable Tags(TextViews) to droppable place holders(ImageViews + * in PlantCell diagram + */ + private SparseIntArray getPlantCellTagMap() { + + tagMapper.put(R.id.ribosomesBlb, R.id.ribosomeTag); + tagMapper.put(R.id.smootherBlb, R.id.smootherTag); + tagMapper.put(R.id.rougherBlb, R.id.rougherTag); + tagMapper.put(R.id.nucleusBlb, R.id.nucleusTag); + tagMapper.put(R.id.vacuoleBlb, R.id.vacuoleTag); + tagMapper.put(R.id.cellwallBlb, R.id.cellwallTag); + tagMapper.put(R.id.cell_membraneBlb, R.id.cell_membraneTag); + tagMapper.put(R.id.mitochondriumBlb, R.id.mitochondiumTag); + tagMapper.put(R.id.chloroplastBlb, R.id.chloroplastTag); + tagMapper.put(R.id.golgi_complexBlb, R.id.golgi_complexTag); + + return tagMapper; + + } + + /* + * Map correct draggable Tags(TextViews) to droppable place holders(ImageViews + * in HumanEye diagram + */ + private SparseIntArray getHumanEyeTagMap() { + + tagMapper.put(R.id.ciliaryBodyBlb, R.id.ciliaryTag); + tagMapper.put(R.id.irisBlb, R.id.irisTag); + tagMapper.put(R.id.pupilBlb, R.id.pupilTag); + tagMapper.put(R.id.lensBlb, R.id.lensTag); + tagMapper.put(R.id.corneaBlb, R.id.corneaTag); + tagMapper.put(R.id.vitreousBlb, R.id.vitreousTag); + tagMapper.put(R.id.opticNerveBlb, R.id.nerveTag); + tagMapper.put(R.id.blindSpotBlb, R.id.opticdiskTag); + tagMapper.put(R.id.foveaBlb, R.id.foveaTag); + tagMapper.put(R.id.retinaBlb, R.id.retinaTag); + + return tagMapper; + + } + + /* + * Map correct draggable Tags(TextViews) to droppable place holders(ImageViews + * in HumanHeart diagram + */ + private SparseIntArray getHumanHeartTagMap() { + + tagMapper.put(R.id.sup_vena_cavaBlb, R.id.sup_vena_cavaTag); + tagMapper.put(R.id.right_atriumBlb, R.id.right_atriunTag); + tagMapper.put(R.id.inf_vena_cavaBlb, R.id.inf_vena_cavaTag); + tagMapper.put(R.id.right_ventricleBlb, R.id.right_ventricleTag); + tagMapper.put(R.id.left_ventricleBlb, R.id.left_ventricleTag); + tagMapper.put(R.id.left_atriumBlb, R.id.left_atriumTag); + tagMapper.put(R.id.pul_arteryBulb, R.id.pul_arteryTag); + tagMapper.put(R.id.aortaBlb, R.id.aortaTag); + tagMapper.put(R.id.pul_veinBlb, R.id.pul_veinTag); + + return tagMapper; + } + + /* + * Map correct draggable Tags(TextViews) to droppable place holders(ImageViews + * in HumanEar diagram + */ + private SparseIntArray getHumanEarTagMap() { + + tagMapper.put(R.id.pinnaBlb, R.id.pinnaTag); + tagMapper.put(R.id.earcanalBlb, R.id.ear_canalTag); + tagMapper.put(R.id.eardrumBlb, R.id.eardrumTag); + tagMapper.put(R.id.cochleaBlb, R.id.cochleaTag); + tagMapper.put(R.id.earnerveBlb, R.id.earnerveTag); + tagMapper.put(R.id.malleusBlb, R.id.malleusTag); + tagMapper.put(R.id.incusBlb, R.id.incusTag); + tagMapper.put(R.id.outerearBlb, R.id.outerearTag); + tagMapper.put(R.id.stapesBlb, R.id.stapesTag); + tagMapper.put(R.id.canalsBlb, R.id.canalsTag); + + return tagMapper; + + } + + + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonBacteria.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonBacteria.java new file mode 100644 index 00000000..1f7d9d4d --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonBacteria.java @@ -0,0 +1,76 @@ +package com.buildmlearn.labeldiagram.lessons; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.LessonAdapter; +import com.buildmlearn.labeldiagram.resources.LessonRawItem; +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class LessonBacteria extends LessonBase { + + List tagList = new ArrayList(); + List tagDescriptionList = new ArrayList(); + List lessonList = new ArrayList(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + HelperClass.setActionBar("Bacteria", this); + setDiagramName(getDiagramName()); + + ListView lessonListView = (ListView) findViewById(R.id.lesson_list); + + fillAdapterDataModel(); + + ArrayAdapter lessonAdapter = new LessonAdapter(this, + R.layout.lesson_row_item, lessonList); + lessonListView.setAdapter(lessonAdapter); + + } + + private void fillAdapterDataModel() { + + int[] iconArray = new int[] { R.drawable.one, R.drawable.two, + R.drawable.three, R.drawable.four, R.drawable.five, + R.drawable.six, R.drawable.seven, R.drawable.eight, + R.drawable.nine, R.drawable.ten }; + + if (lessonObj != null) { + tagList = lessonObj.getTagList(); + tagDescriptionList = lessonObj.getTagDescriptionList(); + } + + for (int i = 0; i < tagList.size(); i++) { + String tag = tagList.get(i); + String description = tagDescriptionList.get(i); + LessonRawItem mItem = new LessonRawItem(tag, description, + iconArray[i]); + lessonList.add(mItem); + } + } + + @Override + public String getDiagramName() { + return "Bacteria"; + } + + @Override + protected int getResourcesId() { + return R.layout.lesson_bacteria; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonBase.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonBase.java new file mode 100644 index 00000000..58977203 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonBase.java @@ -0,0 +1,61 @@ +package com.buildmlearn.labeldiagram.lessons; + +import java.lang.reflect.Type; + +import com.buildmlearn.labeldiagram.database.Database; +import com.buildmlearn.labeldiagram.entity.Lesson; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import android.app.Activity; +import android.os.Bundle; + +public abstract class LessonBase extends Activity{ + + String diagramName; + Database database; + Lesson lessonObj; + Gson gsonObj; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + setDiagramName(getDiagramName()); + loadDatabase(); + getLessonData(); + + } + + private Lesson getLessonData() { + + lessonObj = new Lesson(); + gsonObj = new Gson(); + String result = database.getLesson(diagramName); + Type type = new TypeToken() {}.getType(); + lessonObj = gsonObj.fromJson(result, type); + + return lessonObj; + } + + private void loadDatabase() { + database = new Database(this); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + database.close(); + } + + public String getDiagramName() { + return diagramName; + } + + public void setDiagramName(String diagramName) { + this.diagramName = diagramName; + } + + protected abstract int getResourcesId(); +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonCarbonCycle.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonCarbonCycle.java new file mode 100644 index 00000000..7e89d0f5 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonCarbonCycle.java @@ -0,0 +1,76 @@ +package com.buildmlearn.labeldiagram.lessons; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.LessonAdapter; +import com.buildmlearn.labeldiagram.resources.LessonRawItem; +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class LessonCarbonCycle extends LessonBase { + + List tagList = new ArrayList(); + List tagDescriptionList = new ArrayList(); + List lessonList = new ArrayList(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + HelperClass.setActionBar("Carbon Cycle", this); + setDiagramName(getDiagramName()); + + ListView lessonListView = (ListView) findViewById(R.id.lesson_list); + + fillAdapterDataModel(); + + ArrayAdapter lessonAdapter = new LessonAdapter(this, + R.layout.lesson_row_item, lessonList); + lessonListView.setAdapter(lessonAdapter); + + } + + private void fillAdapterDataModel() { + + int[] iconArray = new int[] { R.drawable.one, R.drawable.two, + R.drawable.three, R.drawable.four, R.drawable.five, + R.drawable.six, R.drawable.seven, R.drawable.eight, + R.drawable.nine, R.drawable.ten }; + + if (lessonObj != null) { + tagList = lessonObj.getTagList(); + tagDescriptionList = lessonObj.getTagDescriptionList(); + } + + for (int i = 0; i < tagList.size(); i++) { + String tag = tagList.get(i); + String description = tagDescriptionList.get(i); + LessonRawItem mItem = new LessonRawItem(tag, description, + iconArray[i]); + lessonList.add(mItem); + } + } + + @Override + public String getDiagramName() { + return "CarbonCycle"; + } + + @Override + protected int getResourcesId() { + return R.layout.lesson_carbon_cycle; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonCategoryViewer.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonCategoryViewer.java new file mode 100644 index 00000000..ada917d2 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonCategoryViewer.java @@ -0,0 +1,74 @@ +package com.buildmlearn.labeldiagram.lessons; + +import com.buildmlearn.labeldiagram.CategoryViewer; +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.BioLessonFragment; +import com.buildmlearn.labeldiagram.resources.CategoryViewerAdapter; +import com.buildmlearn.labeldiagram.resources.PhysicsLessonFragment; +import com.buildmlearn.labeldiagram.resources.ScienceLessonFragment; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; + +public class LessonCategoryViewer extends CategoryViewer { + + @Override + protected void onCreate(Bundle arg0) { + + super.onCreate(arg0); + + adapterViewPager = new LessonsCategoryViewerAdapter( + getSupportFragmentManager()); + + vpPager.setAdapter(adapterViewPager); + + HelperClass.setActionBar("Lessons", this); + + } + + public static class LessonsCategoryViewerAdapter extends + CategoryViewerAdapter { + + private String[] pageTitles = new String[] { "Biology", "Physics", + "Science" }; + public static int NUM_ITEMS = 3; + + public LessonsCategoryViewerAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public Fragment getItem(int position) { + + switch (position) { + case 0: + BioLessonFragment bioFrag = new BioLessonFragment(); + return bioFrag; + case 1: + PhysicsLessonFragment physicsFrag = new PhysicsLessonFragment(); + return physicsFrag; + case 2: + ScienceLessonFragment scienceFrag = new ScienceLessonFragment(); + return scienceFrag; + default: + return null; + } + } + + @Override + public int getCount() { + return NUM_ITEMS; + } + + public CharSequence getPageTitle(int position) { + return pageTitles[position]; + } + + @Override + public float getPageWidth(int position) { + return 1.0f; + } + } + +} \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonCircuit.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonCircuit.java new file mode 100644 index 00000000..49787f75 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonCircuit.java @@ -0,0 +1,76 @@ +package com.buildmlearn.labeldiagram.lessons; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.LessonAdapter; +import com.buildmlearn.labeldiagram.resources.LessonRawItem; +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class LessonCircuit extends LessonBase { + + List tagList = new ArrayList(); + List tagDescriptionList = new ArrayList(); + List lessonList = new ArrayList(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + HelperClass.setActionBar("Electric Circuit", this); + setDiagramName(getDiagramName()); + + ListView lessonListView = (ListView) findViewById(R.id.lesson_list); + + fillAdapterDataModel(); + + ArrayAdapter lessonAdapter = new LessonAdapter(this, + R.layout.lesson_row_item, lessonList); + lessonListView.setAdapter(lessonAdapter); + + } + + private void fillAdapterDataModel() { + + int[] iconArray = new int[] { R.drawable.one, R.drawable.two, + R.drawable.three, R.drawable.four, R.drawable.five, + R.drawable.six, R.drawable.seven, R.drawable.eight, + R.drawable.nine, R.drawable.ten }; + + if (lessonObj != null) { + tagList = lessonObj.getTagList(); + tagDescriptionList = lessonObj.getTagDescriptionList(); + } + + for (int i = 0; i < tagList.size(); i++) { + String tag = tagList.get(i); + String description = tagDescriptionList.get(i); + LessonRawItem mItem = new LessonRawItem(tag, description, + iconArray[i]); + lessonList.add(mItem); + } + } + + @Override + public String getDiagramName() { + return "Circuit"; + } + + @Override + protected int getResourcesId() { + return R.layout.lesson_circuit; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonDryCell.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonDryCell.java new file mode 100644 index 00000000..e25c613a --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonDryCell.java @@ -0,0 +1,76 @@ +package com.buildmlearn.labeldiagram.lessons; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.LessonAdapter; +import com.buildmlearn.labeldiagram.resources.LessonRawItem; +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class LessonDryCell extends LessonBase { + + List tagList = new ArrayList(); + List tagDescriptionList = new ArrayList(); + List lessonList = new ArrayList(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + HelperClass.setActionBar("Dry Cell", this); + setDiagramName(getDiagramName()); + + ListView lessonListView = (ListView) findViewById(R.id.lesson_list); + + fillAdapterDataModel(); + + ArrayAdapter lessonAdapter = new LessonAdapter(this, + R.layout.lesson_row_item, lessonList); + lessonListView.setAdapter(lessonAdapter); + + } + + private void fillAdapterDataModel() { + + int[] iconArray = new int[] { R.drawable.one, R.drawable.two, + R.drawable.three, R.drawable.four, R.drawable.five, + R.drawable.six, R.drawable.seven, R.drawable.eight, + R.drawable.nine, R.drawable.ten }; + + if (lessonObj != null) { + tagList = lessonObj.getTagList(); + tagDescriptionList = lessonObj.getTagDescriptionList(); + } + + for (int i = 0; i < tagList.size(); i++) { + String tag = tagList.get(i); + String description = tagDescriptionList.get(i); + LessonRawItem mItem = new LessonRawItem(tag, description, + iconArray[i]); + lessonList.add(mItem); + } + } + + @Override + public String getDiagramName() { + return "DryCell"; + } + + @Override + protected int getResourcesId() { + return R.layout.lesson_dry_cell; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonHumanEar.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonHumanEar.java new file mode 100644 index 00000000..f27816ce --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonHumanEar.java @@ -0,0 +1,76 @@ +package com.buildmlearn.labeldiagram.lessons; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.LessonAdapter; +import com.buildmlearn.labeldiagram.resources.LessonRawItem; +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class LessonHumanEar extends LessonBase { + + List tagList = new ArrayList(); + List tagDescriptionList = new ArrayList(); + List lessonList = new ArrayList(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + HelperClass.setActionBar("Human Ear", this); + setDiagramName(getDiagramName()); + + ListView lessonListView = (ListView) findViewById(R.id.lesson_list); + + fillAdapterDataModel(); + + ArrayAdapter lessonAdapter = new LessonAdapter(this, + R.layout.lesson_row_item, lessonList); + lessonListView.setAdapter(lessonAdapter); + + } + + private void fillAdapterDataModel() { + + int[] iconArray = new int[] { R.drawable.one, R.drawable.two, + R.drawable.three, R.drawable.four, R.drawable.five, + R.drawable.six, R.drawable.seven, R.drawable.eight, + R.drawable.nine, R.drawable.ten }; + + if (lessonObj != null) { + tagList = lessonObj.getTagList(); + tagDescriptionList = lessonObj.getTagDescriptionList(); + } + + for (int i = 0; i < tagList.size(); i++) { + String tag = tagList.get(i); + String description = tagDescriptionList.get(i); + LessonRawItem mItem = new LessonRawItem(tag, description, + iconArray[i]); + lessonList.add(mItem); + } + } + + @Override + public String getDiagramName() { + return "HumanEar"; + } + + @Override + protected int getResourcesId() { + return R.layout.lesson_ear; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonHumanEye.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonHumanEye.java new file mode 100644 index 00000000..32742686 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonHumanEye.java @@ -0,0 +1,76 @@ +package com.buildmlearn.labeldiagram.lessons; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.LessonAdapter; +import com.buildmlearn.labeldiagram.resources.LessonRawItem; +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class LessonHumanEye extends LessonBase { + + List tagList = new ArrayList(); + List tagDescriptionList = new ArrayList(); + List lessonList = new ArrayList(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + HelperClass.setActionBar("Human Eye", this); + setDiagramName(getDiagramName()); + + ListView lessonListView = (ListView) findViewById(R.id.lesson_list); + + fillAdapterDataModel(); + + ArrayAdapter lessonAdapter = new LessonAdapter(this, + R.layout.lesson_row_item, lessonList); + lessonListView.setAdapter(lessonAdapter); + + } + + private void fillAdapterDataModel() { + + int[] iconArray = new int[] { R.drawable.one, R.drawable.two, + R.drawable.three, R.drawable.four, R.drawable.five, + R.drawable.six, R.drawable.seven, R.drawable.eight, + R.drawable.nine, R.drawable.ten }; + + if (lessonObj != null) { + tagList = lessonObj.getTagList(); + tagDescriptionList = lessonObj.getTagDescriptionList(); + } + + for (int i = 0; i < tagList.size(); i++) { + String tag = tagList.get(i); + String description = tagDescriptionList.get(i); + LessonRawItem mItem = new LessonRawItem(tag, description, + iconArray[i]); + lessonList.add(mItem); + } + } + + @Override + public String getDiagramName() { + return "HumanEye"; + } + + @Override + protected int getResourcesId() { + return R.layout.lesson_eye; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonHumanHeart.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonHumanHeart.java new file mode 100644 index 00000000..fd353a31 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonHumanHeart.java @@ -0,0 +1,76 @@ +package com.buildmlearn.labeldiagram.lessons; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.LessonAdapter; +import com.buildmlearn.labeldiagram.resources.LessonRawItem; +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class LessonHumanHeart extends LessonBase { + + List tagList = new ArrayList(); + List tagDescriptionList = new ArrayList(); + List lessonList = new ArrayList(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + HelperClass.setActionBar("Human Heart", this); + setDiagramName(getDiagramName()); + + ListView lessonListView = (ListView) findViewById(R.id.lesson_list); + + fillAdapterDataModel(); + + ArrayAdapter lessonAdapter = new LessonAdapter(this, + R.layout.lesson_row_item, lessonList); + lessonListView.setAdapter(lessonAdapter); + + } + + private void fillAdapterDataModel() { + + int[] iconArray = new int[] { R.drawable.one, R.drawable.two, + R.drawable.three, R.drawable.four, R.drawable.five, + R.drawable.six, R.drawable.seven, R.drawable.eight, + R.drawable.nine, R.drawable.ten }; + + if (lessonObj != null) { + tagList = lessonObj.getTagList(); + tagDescriptionList = lessonObj.getTagDescriptionList(); + } + + for (int i = 0; i < tagList.size(); i++) { + String tag = tagList.get(i); + String description = tagDescriptionList.get(i); + LessonRawItem mItem = new LessonRawItem(tag, description, + iconArray[i]); + lessonList.add(mItem); + } + } + + @Override + public String getDiagramName() { + return "HumanHeart"; + } + + @Override + protected int getResourcesId() { + return R.layout.lesson_heart; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonLens.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonLens.java new file mode 100644 index 00000000..6d7917ca --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonLens.java @@ -0,0 +1,76 @@ +package com.buildmlearn.labeldiagram.lessons; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.LessonAdapter; +import com.buildmlearn.labeldiagram.resources.LessonRawItem; +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class LessonLens extends LessonBase { + + List tagList = new ArrayList(); + List tagDescriptionList = new ArrayList(); + List lessonList = new ArrayList(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + HelperClass.setActionBar("Lens", this); + setDiagramName(getDiagramName()); + + ListView lessonListView = (ListView) findViewById(R.id.lesson_list); + + fillAdapterDataModel(); + + ArrayAdapter lessonAdapter = new LessonAdapter(this, + R.layout.lesson_row_item, lessonList); + lessonListView.setAdapter(lessonAdapter); + + } + + private void fillAdapterDataModel() { + + int[] iconArray = new int[] { R.drawable.one, R.drawable.two, + R.drawable.three, R.drawable.four, R.drawable.five, + R.drawable.six, R.drawable.seven, R.drawable.eight, + R.drawable.nine, R.drawable.ten }; + + if (lessonObj != null) { + tagList = lessonObj.getTagList(); + tagDescriptionList = lessonObj.getTagDescriptionList(); + } + + for (int i = 0; i < tagList.size(); i++) { + String tag = tagList.get(i); + String description = tagDescriptionList.get(i); + LessonRawItem mItem = new LessonRawItem(tag, description, + iconArray[i]); + lessonList.add(mItem); + } + } + + @Override + public String getDiagramName() { + return "Lens"; + } + + @Override + protected int getResourcesId() { + return R.layout.lesson_lens; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonMotor.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonMotor.java new file mode 100644 index 00000000..724b3acb --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonMotor.java @@ -0,0 +1,76 @@ +package com.buildmlearn.labeldiagram.lessons; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.LessonAdapter; +import com.buildmlearn.labeldiagram.resources.LessonRawItem; +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class LessonMotor extends LessonBase { + + List tagList = new ArrayList(); + List tagDescriptionList = new ArrayList(); + List lessonList = new ArrayList(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + HelperClass.setActionBar("Electric Motor", this); + setDiagramName(getDiagramName()); + + ListView lessonListView = (ListView) findViewById(R.id.lesson_list); + + fillAdapterDataModel(); + + ArrayAdapter lessonAdapter = new LessonAdapter(this, + R.layout.lesson_row_item, lessonList); + lessonListView.setAdapter(lessonAdapter); + + } + + private void fillAdapterDataModel() { + + int[] iconArray = new int[] { R.drawable.one, R.drawable.two, + R.drawable.three, R.drawable.four, R.drawable.five, + R.drawable.six, R.drawable.seven, R.drawable.eight, + R.drawable.nine, R.drawable.ten }; + + if (lessonObj != null) { + tagList = lessonObj.getTagList(); + tagDescriptionList = lessonObj.getTagDescriptionList(); + } + + for (int i = 0; i < tagList.size(); i++) { + String tag = tagList.get(i); + String description = tagDescriptionList.get(i); + LessonRawItem mItem = new LessonRawItem(tag, description, + iconArray[i]); + lessonList.add(mItem); + } + } + + @Override + public String getDiagramName() { + return "Motor"; + } + + @Override + protected int getResourcesId() { + return R.layout.lesson_motor; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonPlantCell.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonPlantCell.java new file mode 100644 index 00000000..061d1af6 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonPlantCell.java @@ -0,0 +1,76 @@ +package com.buildmlearn.labeldiagram.lessons; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.LessonAdapter; +import com.buildmlearn.labeldiagram.resources.LessonRawItem; +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class LessonPlantCell extends LessonBase { + + List tagList = new ArrayList(); + List tagDescriptionList = new ArrayList(); + List lessonList = new ArrayList(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + HelperClass.setActionBar("Plant Cell", this); + setDiagramName(getDiagramName()); + + ListView lessonListView = (ListView) findViewById(R.id.lesson_list); + + fillAdapterDataModel(); + + ArrayAdapter lessonAdapter = new LessonAdapter(this, + R.layout.lesson_row_item, lessonList); + lessonListView.setAdapter(lessonAdapter); + + } + + private void fillAdapterDataModel() { + + int[] iconArray = new int[] { R.drawable.one, R.drawable.two, + R.drawable.three, R.drawable.four, R.drawable.five, + R.drawable.six, R.drawable.seven, R.drawable.eight, + R.drawable.nine, R.drawable.ten }; + + if (lessonObj != null) { + tagList = lessonObj.getTagList(); + tagDescriptionList = lessonObj.getTagDescriptionList(); + } + + for (int i = 0; i < tagList.size(); i++) { + String tag = tagList.get(i); + String description = tagDescriptionList.get(i); + LessonRawItem mItem = new LessonRawItem(tag, description, + iconArray[i]); + lessonList.add(mItem); + } + } + + @Override + public String getDiagramName() { + return "PlantCell"; + } + + @Override + protected int getResourcesId() { + return R.layout.lesson_plantcell; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonPlantFlower.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonPlantFlower.java new file mode 100644 index 00000000..8aecd52e --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonPlantFlower.java @@ -0,0 +1,76 @@ +package com.buildmlearn.labeldiagram.lessons; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.LessonAdapter; +import com.buildmlearn.labeldiagram.resources.LessonRawItem; +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class LessonPlantFlower extends LessonBase { + + List tagList = new ArrayList(); + List tagDescriptionList = new ArrayList(); + List lessonList = new ArrayList(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + HelperClass.setActionBar("Plant Flower", this); + setDiagramName(getDiagramName()); + + ListView lessonListView = (ListView) findViewById(R.id.lesson_list); + + fillAdapterDataModel(); + + ArrayAdapter lessonAdapter = new LessonAdapter(this, + R.layout.lesson_row_item, lessonList); + lessonListView.setAdapter(lessonAdapter); + + } + + private void fillAdapterDataModel() { + + int[] iconArray = new int[] { R.drawable.one, R.drawable.two, + R.drawable.three, R.drawable.four, R.drawable.five, + R.drawable.six, R.drawable.seven, R.drawable.eight, + R.drawable.nine, R.drawable.ten }; + + if (lessonObj != null) { + tagList = lessonObj.getTagList(); + tagDescriptionList = lessonObj.getTagDescriptionList(); + } + + for (int i = 0; i < tagList.size(); i++) { + String tag = tagList.get(i); + String description = tagDescriptionList.get(i); + LessonRawItem mItem = new LessonRawItem(tag, description, + iconArray[i]); + lessonList.add(mItem); + } + } + + @Override + public String getDiagramName() { + return "PlantFlower"; + } + + @Override + protected int getResourcesId() { + return R.layout.lesson_plantflower; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonPrism.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonPrism.java new file mode 100644 index 00000000..eda9d526 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonPrism.java @@ -0,0 +1,76 @@ +package com.buildmlearn.labeldiagram.lessons; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.LessonAdapter; +import com.buildmlearn.labeldiagram.resources.LessonRawItem; +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class LessonPrism extends LessonBase { + + List tagList = new ArrayList(); + List tagDescriptionList = new ArrayList(); + List lessonList = new ArrayList(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + HelperClass.setActionBar("Prism", this); + setDiagramName(getDiagramName()); + + ListView lessonListView = (ListView) findViewById(R.id.lesson_list); + + fillAdapterDataModel(); + + ArrayAdapter lessonAdapter = new LessonAdapter(this, + R.layout.lesson_row_item, lessonList); + lessonListView.setAdapter(lessonAdapter); + + } + + private void fillAdapterDataModel() { + + int[] iconArray = new int[] { R.drawable.one, R.drawable.two, + R.drawable.three, R.drawable.four, R.drawable.five, + R.drawable.six, R.drawable.seven, R.drawable.eight, + R.drawable.nine, R.drawable.ten }; + + if (lessonObj != null) { + tagList = lessonObj.getTagList(); + tagDescriptionList = lessonObj.getTagDescriptionList(); + } + + for (int i = 0; i < tagList.size(); i++) { + String tag = tagList.get(i); + String description = tagDescriptionList.get(i); + LessonRawItem mItem = new LessonRawItem(tag, description, + iconArray[i]); + lessonList.add(mItem); + } + } + + @Override + public String getDiagramName() { + return "Prism"; + } + + @Override + protected int getResourcesId() { + return R.layout.lesson_prism; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonSolarSystem.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonSolarSystem.java new file mode 100644 index 00000000..91695501 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonSolarSystem.java @@ -0,0 +1,76 @@ +package com.buildmlearn.labeldiagram.lessons; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.LessonAdapter; +import com.buildmlearn.labeldiagram.resources.LessonRawItem; +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class LessonSolarSystem extends LessonBase { + + List tagList = new ArrayList(); + List tagDescriptionList = new ArrayList(); + List lessonList = new ArrayList(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + HelperClass.setActionBar("Solar Syatem", this); + setDiagramName(getDiagramName()); + + ListView lessonListView = (ListView) findViewById(R.id.lesson_list); + + fillAdapterDataModel(); + + ArrayAdapter lessonAdapter = new LessonAdapter(this, + R.layout.lesson_row_item, lessonList); + lessonListView.setAdapter(lessonAdapter); + + } + + private void fillAdapterDataModel() { + + int[] iconArray = new int[] { R.drawable.one, R.drawable.two, + R.drawable.three, R.drawable.four, R.drawable.five, + R.drawable.six, R.drawable.seven, R.drawable.eight, + R.drawable.nine, R.drawable.ten }; + + if (lessonObj != null) { + tagList = lessonObj.getTagList(); + tagDescriptionList = lessonObj.getTagDescriptionList(); + } + + for (int i = 0; i < tagList.size(); i++) { + String tag = tagList.get(i); + String description = tagDescriptionList.get(i); + LessonRawItem mItem = new LessonRawItem(tag, description, + iconArray[i]); + lessonList.add(mItem); + } + } + + @Override + public String getDiagramName() { + return "SolarSystem"; + } + + @Override + protected int getResourcesId() { + return R.layout.lesson_solar_system; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonSpectrum.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonSpectrum.java new file mode 100644 index 00000000..6e92f757 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonSpectrum.java @@ -0,0 +1,76 @@ +package com.buildmlearn.labeldiagram.lessons; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.LessonAdapter; +import com.buildmlearn.labeldiagram.resources.LessonRawItem; +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class LessonSpectrum extends LessonBase { + + List tagList = new ArrayList(); + List tagDescriptionList = new ArrayList(); + List lessonList = new ArrayList(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + HelperClass.setActionBar("Spectrum", this); + setDiagramName(getDiagramName()); + + ListView lessonListView = (ListView) findViewById(R.id.lesson_list); + + fillAdapterDataModel(); + + ArrayAdapter lessonAdapter = new LessonAdapter(this, + R.layout.lesson_row_item, lessonList); + lessonListView.setAdapter(lessonAdapter); + + } + + private void fillAdapterDataModel() { + + int[] iconArray = new int[] { R.drawable.one, R.drawable.two, + R.drawable.three, R.drawable.four, R.drawable.five, + R.drawable.six, R.drawable.seven, R.drawable.eight, + R.drawable.nine, R.drawable.ten }; + + if (lessonObj != null) { + tagList = lessonObj.getTagList(); + tagDescriptionList = lessonObj.getTagDescriptionList(); + } + + for (int i = 0; i < tagList.size(); i++) { + String tag = tagList.get(i); + String description = tagDescriptionList.get(i); + LessonRawItem mItem = new LessonRawItem(tag, description, + iconArray[i]); + lessonList.add(mItem); + } + } + + @Override + public String getDiagramName() { + return "Spectrum"; + } + + @Override + protected int getResourcesId() { + return R.layout.lesson_spectrum; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonStarPatterns.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonStarPatterns.java new file mode 100644 index 00000000..4ad346a5 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonStarPatterns.java @@ -0,0 +1,76 @@ +package com.buildmlearn.labeldiagram.lessons; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.LessonAdapter; +import com.buildmlearn.labeldiagram.resources.LessonRawItem; +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class LessonStarPatterns extends LessonBase { + + List tagList = new ArrayList(); + List tagDescriptionList = new ArrayList(); + List lessonList = new ArrayList(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + HelperClass.setActionBar("Star Patterns", this); + setDiagramName(getDiagramName()); + + ListView lessonListView = (ListView) findViewById(R.id.lesson_list); + + fillAdapterDataModel(); + + ArrayAdapter lessonAdapter = new LessonAdapter(this, + R.layout.lesson_row_item, lessonList); + lessonListView.setAdapter(lessonAdapter); + + } + + private void fillAdapterDataModel() { + + int[] iconArray = new int[] { R.drawable.one, R.drawable.two, + R.drawable.three, R.drawable.four, R.drawable.five, + R.drawable.six, R.drawable.seven, R.drawable.eight, + R.drawable.nine, R.drawable.ten }; + + if (lessonObj != null) { + tagList = lessonObj.getTagList(); + tagDescriptionList = lessonObj.getTagDescriptionList(); + } + + for (int i = 0; i < tagList.size(); i++) { + String tag = tagList.get(i); + String description = tagDescriptionList.get(i); + LessonRawItem mItem = new LessonRawItem(tag, description, + iconArray[i]); + lessonList.add(mItem); + } + } + + @Override + public String getDiagramName() { + return "StarPatterns"; + } + + @Override + protected int getResourcesId() { + return R.layout.lesson_star_patterns; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonVirus.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonVirus.java new file mode 100644 index 00000000..5129eb2d --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonVirus.java @@ -0,0 +1,76 @@ +package com.buildmlearn.labeldiagram.lessons; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.LessonAdapter; +import com.buildmlearn.labeldiagram.resources.LessonRawItem; +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class LessonVirus extends LessonBase { + + List tagList = new ArrayList(); + List tagDescriptionList = new ArrayList(); + List lessonList = new ArrayList(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + HelperClass.setActionBar("Virus", this); + setDiagramName(getDiagramName()); + + ListView lessonListView = (ListView) findViewById(R.id.lesson_list); + + fillAdapterDataModel(); + + ArrayAdapter lessonAdapter = new LessonAdapter(this, + R.layout.lesson_row_item, lessonList); + lessonListView.setAdapter(lessonAdapter); + + } + + private void fillAdapterDataModel() { + + int[] iconArray = new int[] { R.drawable.one, R.drawable.two, + R.drawable.three, R.drawable.four, R.drawable.five, + R.drawable.six, R.drawable.seven, R.drawable.eight, + R.drawable.nine, R.drawable.ten }; + + if (lessonObj != null) { + tagList = lessonObj.getTagList(); + tagDescriptionList = lessonObj.getTagDescriptionList(); + } + + for (int i = 0; i < tagList.size(); i++) { + String tag = tagList.get(i); + String description = tagDescriptionList.get(i); + LessonRawItem mItem = new LessonRawItem(tag, description, + iconArray[i]); + lessonList.add(mItem); + } + } + + @Override + public String getDiagramName() { + return "Virus"; + } + + @Override + protected int getResourcesId() { + return R.layout.lesson_virus; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonWaterCycle.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonWaterCycle.java new file mode 100644 index 00000000..f9c2be8c --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/lessons/LessonWaterCycle.java @@ -0,0 +1,76 @@ +package com.buildmlearn.labeldiagram.lessons; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.buildmlearn.labeldiagram.resources.LessonAdapter; +import com.buildmlearn.labeldiagram.resources.LessonRawItem; +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class LessonWaterCycle extends LessonBase { + + List tagList = new ArrayList(); + List tagDescriptionList = new ArrayList(); + List lessonList = new ArrayList(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getResourcesId()); + + HelperClass.setActionBar("Water Cycle", this); + setDiagramName(getDiagramName()); + + ListView lessonListView = (ListView) findViewById(R.id.lesson_list); + + fillAdapterDataModel(); + + ArrayAdapter lessonAdapter = new LessonAdapter(this, + R.layout.lesson_row_item, lessonList); + lessonListView.setAdapter(lessonAdapter); + + } + + private void fillAdapterDataModel() { + + int[] iconArray = new int[] { R.drawable.one, R.drawable.two, + R.drawable.three, R.drawable.four, R.drawable.five, + R.drawable.six, R.drawable.seven, R.drawable.eight, + R.drawable.nine, R.drawable.ten }; + + if (lessonObj != null) { + tagList = lessonObj.getTagList(); + tagDescriptionList = lessonObj.getTagDescriptionList(); + } + + for (int i = 0; i < tagList.size(); i++) { + String tag = tagList.get(i); + String description = tagDescriptionList.get(i); + LessonRawItem mItem = new LessonRawItem(tag, description, + iconArray[i]); + lessonList.add(mItem); + } + } + + @Override + public String getDiagramName() { + return "WaterCycle"; + } + + @Override + protected int getResourcesId() { + return R.layout.lesson_water_cycle; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BacteriaFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BacteriaFragment.java new file mode 100644 index 00000000..834d75ed --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BacteriaFragment.java @@ -0,0 +1,82 @@ +package com.buildmlearn.labeldiagram.resources; + +import com.buildmlearn.labeldiagram.DiagramPlayBacteria; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.TextView; + +public class BacteriaFragment extends Fragment { + + private static final int GAME_SCORE = 100; + private Typeface tfThin; + private float score; + + // newInstance constructor for creating fragment with arguments + public static Fragment getInstance(int id) { + + BacteriaFragment frag = new BacteriaFragment(); + return frag; + + } + + // Store instance variables based on arguments passed + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), + "fonts/Roboto-Thin.ttf"); + + if (getArguments() != null) { + score = getArguments().getFloat("SCORE_SAVED"); + } + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.bacteria_view, container, + false); + + TextView diagramTxt = (TextView) view.findViewById(R.id.txt_diagram); + TextView savedScoreTxt = (TextView) view.findViewById(R.id.score_saved); + + Button startBtn = (Button) view.findViewById(R.id.go_diagram_btn); + + diagramTxt.setTypeface(tfThin); + startBtn.setTypeface(tfThin); + savedScoreTxt.setText((int)((score / GAME_SCORE ) * 100) + "% Sucess"); + + startBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent bactIntent = new Intent(getActivity(), + DiagramPlayBacteria.class); + bactIntent.putExtra("SOURCE", "Fragment"); + bactIntent.putExtra("TRY_CYCLE", 0); + bactIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + bactIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + bactIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + // getActivity().finish(); + startActivity(bactIntent); + + } + }); + + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BadgeGridRowItem.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BadgeGridRowItem.java new file mode 100644 index 00000000..283354e9 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BadgeGridRowItem.java @@ -0,0 +1,20 @@ +package com.buildmlearn.labeldiagram.resources; + +public class BadgeGridRowItem { + + private int layoutId; + + public BadgeGridRowItem(int layoutId) { + super(); + this.layoutId = layoutId; + } + + public int getLayoutId() { + return layoutId; + } + + public void setLayoutId(int layoutId) { + this.layoutId = layoutId; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BadgesAll.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BadgesAll.java new file mode 100644 index 00000000..05b36898 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BadgesAll.java @@ -0,0 +1,48 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.ArrayList; +import java.util.List; + +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.GridView; + +public class BadgesAll extends Fragment { + + List gridArray = new ArrayList(); + GridView gridView; + BadgesGridViewAdapter adapter; + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + gridArray.add(new BadgeGridRowItem(R.layout.badge_layout)); + gridArray.add(new BadgeGridRowItem(R.layout.badge_layout)); + gridArray.add(new BadgeGridRowItem(R.layout.badge_layout)); + gridArray.add(new BadgeGridRowItem(R.layout.badge_layout)); + gridArray.add(new BadgeGridRowItem(R.layout.badge_layout)); + gridArray.add(new BadgeGridRowItem(R.layout.badge_layout)); + + adapter = new BadgesGridViewAdapter(this.getActivity(), R.layout.grid_row_item, gridArray); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.badges_all_view, + container, false); + gridView = (GridView) view.findViewById(R.id.badgeGrid); + gridView.setAdapter(adapter); + return view; + + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BadgesGridViewAdapter.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BadgesGridViewAdapter.java new file mode 100644 index 00000000..9f9d102d --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BadgesGridViewAdapter.java @@ -0,0 +1,140 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.List; + +import com.buildmlearn.labeldiagram.badges.BadgePopUpWindow; +import com.example.labelthediagram.R; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +public class BadgesGridViewAdapter extends ArrayAdapter { + + Context context; + + public BadgesGridViewAdapter(Context context, int resource, + List objects) { + super(context, resource, objects); + + this.context = context; + + } + + /* + * Holder class for single lesson row item view + */ + public class ViewHolder { + + RelativeLayout layout; + + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + final ViewHolder holder; + final String badgeNameToPass; + final int badgeIdToPass; + final String source = "Adapter"; + String badgeName = null; + int badgeId = 0; + + BadgeGridRowItem rawItem = getItem(position); + + LayoutInflater inflater = (LayoutInflater) context + .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); + + if (convertView == null) { + + convertView = inflater.inflate(R.layout.grid_row_item, null); + holder = new ViewHolder(); + holder.layout = (RelativeLayout) convertView + .findViewById(R.id.gridRowLayout); + convertView.setTag(holder); + + } else { + + holder = (ViewHolder) convertView.getTag(); + + } + + View child = inflater.inflate(rawItem.getLayoutId(), null); + ImageView badgeIcon = (ImageView) child.findViewById(R.id.bioBadge); + TextView bagdgeTxt = (TextView) child.findViewById(R.id.badgeTitle); + + switch (position) { + + case 0: + badgeIcon.setImageResource(R.drawable.champion); + bagdgeTxt.setText(R.string.badge_champion); + badgeName = context.getResources().getString(R.string.badge_champion); + badgeId = R.drawable.champion; + break; + case 1: + badgeIcon.setImageResource(R.drawable.bio); + bagdgeTxt.setText(R.string.badge_biology); + badgeName = context.getResources().getString(R.string.badge_biology); + badgeId = R.drawable.bio; + break; + case 2: + badgeIcon.setImageResource(R.drawable.physics); + bagdgeTxt.setText(R.string.badge_physics); + badgeName = context.getResources().getString(R.string.badge_physics); + badgeId = R.drawable.physics; + break; + case 3: + badgeIcon.setImageResource(R.drawable.science); + bagdgeTxt.setText(R.string.badge_science); + badgeName = context.getResources().getString(R.string.badge_science); + badgeId = R.drawable.science; + break; + case 4: + badgeIcon.setImageResource(R.drawable.persistence); + bagdgeTxt.setText(R.string.badge_persistence); + badgeName = context.getResources().getString(R.string.badge_persistence); + badgeId = R.drawable.persistence; + break; + case 5: + badgeIcon.setImageResource(R.drawable.streak); + bagdgeTxt.setText(R.string.badge_streak); + badgeName = context.getResources().getString(R.string.badge_streak); + badgeId = R.drawable.streak; + break; + + default: + break; + + } + + badgeNameToPass = badgeName; + badgeIdToPass = badgeId; + + holder.layout.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View view) { + + Intent intent = new Intent(context, BadgePopUpWindow.class); + intent.putExtra("BADGE_TITLE", badgeNameToPass); + intent.putExtra("BADGE_ID", badgeIdToPass); + intent.putExtra("SOURCE", source); + context.startActivity(intent); + + } + }); + + holder.layout.addView(child); + + return convertView; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BioCategoryAdapter.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BioCategoryAdapter.java new file mode 100644 index 00000000..71043b98 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BioCategoryAdapter.java @@ -0,0 +1,57 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.List; + +import com.buildmlearn.labeldiagram.DiagramMenuHuman; +import com.buildmlearn.labeldiagram.DiagramMenuMicroogranisms; +import com.buildmlearn.labeldiagram.DiagramMenuNaturalCycles; +import com.buildmlearn.labeldiagram.DiagramMenuPlants; + +import android.content.Context; +import android.content.Intent; +import android.util.Log; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Toast; + +public class BioCategoryAdapter extends DiagramCategoryAdapter{ + + int nItems; + + public BioCategoryAdapter(Context context, int resource, + List objects) { + super(context, resource, objects); + + nItems = this.getCount(); + + } + + @Override + public void setDispatchClass(ViewHolder holder, int position) { + + final int index = position; + holder.goIcon.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + if(index==0){ + Intent intent = new Intent(v.getContext(), DiagramMenuHuman.class); + v.getContext().startActivity(intent); + + }else if(index==1){ + Intent intent = new Intent(v.getContext(), DiagramMenuPlants.class); + v.getContext().startActivity(intent); + }else if(index==2){ + Intent intent = new Intent(v.getContext(), DiagramMenuMicroogranisms.class); + v.getContext().startActivity(intent); + }else{ + Toast.makeText(getContext(), "Error occured", Toast.LENGTH_SHORT).show(); + Log.e("Error Tag", "Menu item count exceeded"); + } + + } + }); + + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BioCategoryFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BioCategoryFragment.java new file mode 100644 index 00000000..1cef32d9 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BioCategoryFragment.java @@ -0,0 +1,56 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.ArrayList; + +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class BioCategoryFragment extends Fragment { + + ArrayList categories = new ArrayList(); + ArrayAdapter categryAdapter; + + @Override + public void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + + createModel(); + + categryAdapter = new BioCategoryAdapter( + getActivity(), R.layout.category_row_item, categories); + + } + + private void createModel() { + + DiagramCategoryRawItem item1 = new DiagramCategoryRawItem("Human Body", "Diagrams of Human Body", R.drawable.human_body); + DiagramCategoryRawItem item2 = new DiagramCategoryRawItem("Plants", "Diagrams of plants", R.drawable.plants); + DiagramCategoryRawItem item3 = new DiagramCategoryRawItem("Micro-organisams", "Diagrams of microbes", R.drawable.micro); + + categories.add(item1); + categories.add(item2); + categories.add(item3); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.diagram_category_mainview, + container, false); + ListView list = (ListView) view.findViewById(R.id.category_mainList); + list.setAdapter(categryAdapter); + + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BioLessonAdapter.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BioLessonAdapter.java new file mode 100644 index 00000000..a6c27f94 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BioLessonAdapter.java @@ -0,0 +1,81 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.List; + +import com.buildmlearn.labeldiagram.lessons.LessonBacteria; +import com.buildmlearn.labeldiagram.lessons.LessonHumanEar; +import com.buildmlearn.labeldiagram.lessons.LessonHumanEye; +import com.buildmlearn.labeldiagram.lessons.LessonHumanHeart; +import com.buildmlearn.labeldiagram.lessons.LessonPlantCell; +import com.buildmlearn.labeldiagram.lessons.LessonPlantFlower; +import com.buildmlearn.labeldiagram.lessons.LessonVirus; + +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.view.View.OnClickListener; + +public class BioLessonAdapter extends LessonCategoryAdapter { + + int nItems; + + public BioLessonAdapter(Context context, int resource, + List objects) { + super(context, resource, objects); + + nItems = this.getCount(); + + } + + @Override + public void setDispatchClass(ViewHolder holder, int position) { + + final int index = position; + + holder.navIcon.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + final Intent intent; + + switch (index) { + case 0: + intent = new Intent(v.getContext(), LessonHumanEye.class); + v.getContext().startActivity(intent); + break; + case 1: + intent = new Intent(v.getContext(), LessonHumanHeart.class); + v.getContext().startActivity(intent); + break; + case 2: + intent = new Intent(v.getContext(), LessonHumanEar.class); + v.getContext().startActivity(intent); + break; + case 3: + intent = new Intent(v.getContext(), LessonPlantCell.class); + v.getContext().startActivity(intent); + break; + case 4: + intent = new Intent(v.getContext(), LessonPlantFlower.class); + v.getContext().startActivity(intent); + break; + case 5: + intent = new Intent(v.getContext(), LessonBacteria.class); + v.getContext().startActivity(intent); + break; + case 6: + intent = new Intent(v.getContext(), LessonVirus.class); + v.getContext().startActivity(intent); + break; + + default: + break; + } + + } + }); + + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BioLessonFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BioLessonFragment.java new file mode 100644 index 00000000..a444f76f --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/BioLessonFragment.java @@ -0,0 +1,72 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.ArrayList; +import java.util.List; + +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class BioLessonFragment extends Fragment { + + List categories = new ArrayList(); + ArrayAdapter lessonAdapter; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + createModel(); + + lessonAdapter = new BioLessonAdapter(getActivity(), + R.layout.lesson_category_row_item, categories); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.diagram_category_mainview, + container, false); + ListView list = (ListView) view.findViewById(R.id.category_mainList); + list.setAdapter(lessonAdapter); + + return view; + } + + private void createModel() { + + int[] titleArray = new int[] { R.string.lesson_human_eye, + R.string.lesson_human_heart, R.string.lesson_human_ear, + R.string.lesson_plant_cell, R.string.lesson_plant_flower, + R.string.lesson_bacteria, R.string.lesson_virus }; + + int[] descrptionArray = new int[] { R.string.lesson_human_eye_desc, + R.string.lesson_human_heart_desc, + R.string.lesson_human_ear_desc, + R.string.lesson_plant_cell_desc, + R.string.lesson_plant_flower_desc, + R.string.lesson_bacteria_desc, R.string.lesson_virus_desc }; + + int[] iconArray = new int[] { R.drawable.icon_eye, + R.drawable.icon_heart, R.drawable.icon_ear, + R.drawable.icon_plant_cell, R.drawable.icon_flower, + R.drawable.icon_bacteria, R.drawable.icon_virus }; + + for (int i = 0; i < titleArray.length; i++) { + + LessonCategoryRawItem item = new LessonCategoryRawItem( + getResources().getString(titleArray[i]), getResources() + .getString(descrptionArray[i]),iconArray[i]); + + categories.add(item); + } + + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/CarbonCycleFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/CarbonCycleFragment.java new file mode 100644 index 00000000..4832d1ef --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/CarbonCycleFragment.java @@ -0,0 +1,80 @@ +package com.buildmlearn.labeldiagram.resources; + +import com.buildmlearn.labeldiagram.DiagramPlayCarbonCycle; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.TextView; + +public class CarbonCycleFragment extends Fragment { + + private static final float GAME_SCORE = 90; + private Typeface tfThin; + private float score; + + // newInstance constructor for creating fragment with arguments + public static Fragment getInstance(int id) { + + CarbonCycleFragment frag = new CarbonCycleFragment(); + return frag; + } + + // Store instance variables based on arguments passed + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), + "fonts/Roboto-Thin.ttf"); + + if (getArguments() != null) { + score = getArguments().getFloat("SCORE_SAVED"); + } + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.carbon_cycle_view, + container, false); + + TextView diagramTxt = (TextView) view.findViewById(R.id.txt_diagram); + TextView savedScoreTxt = (TextView) view.findViewById(R.id.score_saved); + + Button startBtn = (Button) view.findViewById(R.id.go_diagram_btn); + + diagramTxt.setTypeface(tfThin); + startBtn.setTypeface(tfThin); + savedScoreTxt.setText((int)((score / GAME_SCORE ) * 100) + "% Sucess"); + + startBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent carbonIntent = new Intent(getActivity(), + DiagramPlayCarbonCycle.class); + carbonIntent.putExtra("SOURCE", "Fragment"); + carbonIntent.putExtra("TRY_CYCLE", 0); + carbonIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + carbonIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + carbonIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + startActivity(carbonIntent); + + } + }); + + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/CategoryViewerAdapter.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/CategoryViewerAdapter.java new file mode 100644 index 00000000..9b806694 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/CategoryViewerAdapter.java @@ -0,0 +1,23 @@ +package com.buildmlearn.labeldiagram.resources; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; + +public abstract class CategoryViewerAdapter extends FragmentPagerAdapter { + + public CategoryViewerAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public Fragment getItem(int arg0) { + return null; + } + + @Override + public int getCount() { + return 0; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/CircuitFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/CircuitFragment.java new file mode 100644 index 00000000..25f5feaa --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/CircuitFragment.java @@ -0,0 +1,72 @@ +package com.buildmlearn.labeldiagram.resources; + +import com.buildmlearn.labeldiagram.DiagramPlayCircuit; +import com.buildmlearn.labeldiagram.DiagramPlayMotor; +import com.buildmlearn.labeldiagram.DiagramPlayPrism; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +public class CircuitFragment extends Fragment { + + private static final int GAME_SCORE = 90; + private Typeface tfThin; + private float score; + + // Store instance variables based on arguments passed + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), + "fonts/Roboto-Thin.ttf"); + + score = getArguments().getFloat("SCORE_SAVED"); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.circuit_view, container, + false); + + TextView savedScoreTxt = (TextView) view.findViewById(R.id.score_saved); + + Button startBtn = (Button) view.findViewById(R.id.go_diagram_btn); + + startBtn.setTypeface(tfThin); + savedScoreTxt.setText((int)((score / GAME_SCORE ) * 100) + "% Sucess"); + + startBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent circuitIntent = new Intent(getActivity(), + DiagramPlayCircuit.class); + circuitIntent.putExtra("SOURCE", "Fragment"); + circuitIntent.putExtra("TRY_CYCLE", 0); + circuitIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + circuitIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + circuitIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + // getActivity().finish(); + startActivity(circuitIntent); + + } + }); + + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DiagramCategoryAdapter.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DiagramCategoryAdapter.java new file mode 100644 index 00000000..80b08422 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DiagramCategoryAdapter.java @@ -0,0 +1,94 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.List; + +import com.example.labelthediagram.R; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Typeface; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +/* + *Adapter class to generate custom view of DiagramCategory list items + * + */ + +public class DiagramCategoryAdapter extends ArrayAdapter { + + Context context; + int nItems; + Typeface tfThin; + Typeface tfLight; + + public DiagramCategoryAdapter(Context context, int resource, + List objects) { + super(context, resource, objects); + this.context = context; + + tfThin = Typeface.createFromAsset(context.getAssets(), + "fonts/Roboto-Thin.ttf"); + tfLight = Typeface.createFromAsset(context.getAssets(), + "fonts/Roboto-Light.ttf"); + + } + + /* + * Holder class for single row item view + * + */ + public class ViewHolder { + + ImageView categoryIcon; + ImageView goIcon; + TextView titleTxt; + TextView descriptionTxt; + + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + final int index = position; + final ViewHolder holder; + DiagramCategoryRawItem rawItem = getItem(position); + + LayoutInflater inflater = (LayoutInflater) context + .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); + + if (convertView == null) { + + convertView = inflater.inflate(R.layout.category_row_item, null); + holder = new ViewHolder(); + holder.titleTxt = (TextView) convertView.findViewById(R.id.categoryTitle); + holder.descriptionTxt = (TextView) convertView.findViewById(R.id.catDescription); + holder.categoryIcon = (ImageView) convertView.findViewById(R.id.categoryIcon); + holder.goIcon = (ImageView) convertView.findViewById(R.id.navigatorBtn); + convertView.setTag(holder); + + } else { + holder = (ViewHolder) convertView.getTag(); + } + + holder.titleTxt.setText(rawItem.getTitle()); + holder.descriptionTxt.setText(rawItem.getDescription()); + holder.categoryIcon.setImageResource(rawItem.getImageId()); + holder.goIcon.setImageResource(R.drawable.proceed_btn); + + holder.titleTxt.setTypeface(tfLight); + holder.descriptionTxt.setTypeface(tfThin); + + setDispatchClass(holder,index); + + return convertView; + + } + + public void setDispatchClass(ViewHolder holder, int index){}; + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DiagramCategoryRawItem.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DiagramCategoryRawItem.java new file mode 100644 index 00000000..abddf31d --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DiagramCategoryRawItem.java @@ -0,0 +1,39 @@ +package com.buildmlearn.labeldiagram.resources; + +public class DiagramCategoryRawItem { + + private String title; + private String description; + private int imageId; + + public DiagramCategoryRawItem(String title, String description, + int imageId) { + super(); + this.title = title; + this.description = description; + this.imageId = imageId; + } + + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + public int getImageId() { + return imageId; + } + public void setImageId(int imageId) { + this.imageId = imageId; + } + + + + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DiagramResultAdapter.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DiagramResultAdapter.java new file mode 100644 index 00000000..ee20ae21 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DiagramResultAdapter.java @@ -0,0 +1,77 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.List; + +import com.buildmlearn.labeldiagram.helper.TagContainerSingleton; +import com.example.labelthediagram.R; + +import android.app.Activity; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +public class DiagramResultAdapter extends ArrayAdapter { + + Context context; + + public DiagramResultAdapter(Context context, int resource, + List objects) { + super(context, resource, objects); + + this.context = context; + + } + + /* + * Holder class for single row item view + * + */ + private class ViewHolder { + + ImageView resultIcon; + TextView tagLabel; + + } + + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + final int index = position; + final ViewHolder holder; + DiagramResultRawItem rawItem = getItem(position); + + LayoutInflater inflater = (LayoutInflater) context + .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); + + if (convertView == null) { + + convertView = inflater.inflate(R.layout.diagram_result_row_item, null); + holder = new ViewHolder(); + holder.tagLabel = (TextView) convertView.findViewById(R.id.resultTagTxt); + holder.resultIcon = (ImageView) convertView.findViewById(R.id.result_icon); + convertView.setTag(holder); + + } else { + holder = (ViewHolder) convertView.getTag(); + } + + holder.tagLabel.setText(rawItem.getTagLabel().getText()); + + holder.tagLabel.getWidth(); + + TagContainerSingleton container = TagContainerSingleton.getInstance(); + + if(container.getCorrectLabelList().contains(rawItem.getTagLabel())){ + holder.resultIcon.setImageResource(R.drawable.correct_btn); + }else if(container.getIncorrectLabelList().contains(rawItem.getTagLabel())){ + holder.resultIcon.setImageResource(R.drawable.incorrect_btn); + } + + return convertView; + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DiagramResultRawItem.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DiagramResultRawItem.java new file mode 100644 index 00000000..16e17c28 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DiagramResultRawItem.java @@ -0,0 +1,38 @@ +package com.buildmlearn.labeldiagram.resources; + +import android.widget.TextView; + +public class DiagramResultRawItem { + + private TextView tagLabel; + private int resultIconId; + + + public DiagramResultRawItem(TextView tagLabel, int resultIconId) { + super(); + this.tagLabel = tagLabel; + this.resultIconId = resultIconId; + } + + public int getResultIconId() { + return resultIconId; + } + + public void setResultIconId(int resultIconId) { + this.resultIconId = resultIconId; + } + + public TextView getTagLabel() { + return tagLabel; + } + + public void setTagLabel(TextView tagLabel) { + this.tagLabel = tagLabel; + } + + + + + + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DiagramScoreResultAdapter.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DiagramScoreResultAdapter.java new file mode 100644 index 00000000..857ef7b5 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DiagramScoreResultAdapter.java @@ -0,0 +1,67 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.List; + +import com.example.labelthediagram.R; + +import android.app.Activity; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +public class DiagramScoreResultAdapter extends ArrayAdapter { + + Context context; + + public DiagramScoreResultAdapter(Context context, int resource, + List objects) { + super(context, resource, objects); + + this.context = context; + } + + /* + * Holder class for single row item view + * + */ + private class ViewHolder { + + ImageView resultIcon; + TextView tagLabel; + + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + final int index = position; + final ViewHolder holder; + DiagramScoreboardResultRawItem rawItem = getItem(position); + + LayoutInflater inflater = (LayoutInflater) context + .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); + + if (convertView == null) { + + convertView = inflater.inflate(R.layout.scoreboard_result_row_view, null); + holder = new ViewHolder(); + holder.tagLabel = (TextView) convertView.findViewById(R.id.resultItemTxt); + holder.resultIcon = (ImageView) convertView.findViewById(R.id.resultIndiacator); + convertView.setTag(holder); + + } else { + holder = (ViewHolder) convertView.getTag(); + } + + holder.tagLabel.setText(rawItem.getTagLabel()); + holder.resultIcon.setImageResource(rawItem.getResultIconId()); + + return convertView; + } + + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DiagramScoreboardResultRawItem.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DiagramScoreboardResultRawItem.java new file mode 100644 index 00000000..c47e3d21 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DiagramScoreboardResultRawItem.java @@ -0,0 +1,32 @@ +package com.buildmlearn.labeldiagram.resources; + +public class DiagramScoreboardResultRawItem { + + private String tagLabel; + private int resultIconId; + + public DiagramScoreboardResultRawItem(String tagLabel, int resultIconId) { + super(); + this.tagLabel = tagLabel; + this.resultIconId = resultIconId; + } + + public String getTagLabel() { + return tagLabel; + } + + public void setTagLabel(String tagLabel) { + this.tagLabel = tagLabel; + } + + public int getResultIconId() { + return resultIconId; + } + + public void setResultIconId(int resultIconId) { + this.resultIconId = resultIconId; + } + + + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DryCellFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DryCellFragment.java new file mode 100644 index 00000000..ca0a8ff0 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/DryCellFragment.java @@ -0,0 +1,71 @@ +package com.buildmlearn.labeldiagram.resources; + +import com.buildmlearn.labeldiagram.DiagramPlayDryCell; +import com.buildmlearn.labeldiagram.DiagramPlayPrism; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +public class DryCellFragment extends Fragment { + + private static final int GAME_SCORE = 90; + private Typeface tfThin; + private float score; + + // Store instance variables based on arguments passed + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), + "fonts/Roboto-Thin.ttf"); + + score = getArguments().getFloat("SCORE_SAVED"); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.dry_cell_view, container, + false); + + TextView savedScoreTxt = (TextView) view.findViewById(R.id.score_saved); + + Button startBtn = (Button) view.findViewById(R.id.go_diagram_btn); + + startBtn.setTypeface(tfThin); + savedScoreTxt.setText((int)((score / GAME_SCORE ) * 100) + "% Sucess"); + + startBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent cellIntent = new Intent(getActivity(), + DiagramPlayDryCell.class); + cellIntent.putExtra("SOURCE", "Fragment"); + cellIntent.putExtra("TRY_CYCLE", 0); + cellIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + cellIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + cellIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + // getActivity().finish(); + startActivity(cellIntent); + + } + }); + + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/HumanEarFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/HumanEarFragment.java new file mode 100644 index 00000000..21832458 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/HumanEarFragment.java @@ -0,0 +1,71 @@ +package com.buildmlearn.labeldiagram.resources; + +import com.buildmlearn.labeldiagram.DiagramPlayHumanEar; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.TextView; + +public class HumanEarFragment extends Fragment { + + private static final int GAME_SCORE = 100; + private Typeface tfThin; + private float score; + + // Store instance variables based on arguments passed + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Roboto-Thin.ttf"); + + score = getArguments().getFloat("SCORE_SAVED"); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.human_ear_view, container, + false); + + TextView diagramTxt=(TextView) view.findViewById(R.id.txt_diagram); + TextView savedScoreTxt=(TextView) view.findViewById(R.id.score_saved); + + Button startBtn=(Button) view.findViewById(R.id.go_diagram_btn); + + diagramTxt.setTypeface(tfThin); + startBtn.setTypeface(tfThin); + savedScoreTxt.setText((int)((score / GAME_SCORE ) * 100) + "% Sucess"); + + startBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent eyeIntent = new Intent(getActivity(), DiagramPlayHumanEar.class); + eyeIntent.putExtra("SOURCE", "Fragment"); + eyeIntent.putExtra("TRY_CYCLE", 0); + eyeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + eyeIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + eyeIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + //getActivity().finish(); + startActivity(eyeIntent); + + + } + }); + + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/HumanEyeFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/HumanEyeFragment.java new file mode 100644 index 00000000..b8edba03 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/HumanEyeFragment.java @@ -0,0 +1,77 @@ +package com.buildmlearn.labeldiagram.resources; + +import com.buildmlearn.labeldiagram.DiagramPlayHumanEye; +import com.example.labelthediagram.R; +import com.github.mikephil.charting.charts.PieChart; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +public class HumanEyeFragment extends Fragment { + + private static final int GAME_SCORE = 100; + private Typeface tfThin; + private float score; + + private PieChart mChart; + private float[] xData = {30,20,50} ; + private String[] yData = {"Complete","Incomplete"}; + + // Store instance variables based on arguments passed + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), + "fonts/Roboto-Thin.ttf"); + + score = getArguments().getFloat("SCORE_SAVED"); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.human_eye_view, container, + false); + + TextView diagramTxt = (TextView) view.findViewById(R.id.txt_diagram); + TextView savedScoreTxt = (TextView) view.findViewById(R.id.score_saved); + + Button startBtn = (Button) view.findViewById(R.id.go_diagram_btn); + + diagramTxt.setTypeface(tfThin); + startBtn.setTypeface(tfThin); + savedScoreTxt.setText((int)((score / GAME_SCORE ) * 100) + "% Sucess"); + + startBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent eyeIntent = new Intent(getActivity(), + DiagramPlayHumanEye.class); + eyeIntent.putExtra("SOURCE", "Fragment"); + eyeIntent.putExtra("TRY_CYCLE", 0); + eyeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + eyeIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + eyeIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + // getActivity().finish(); + startActivity(eyeIntent); + + } + }); + + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/HumanHeartFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/HumanHeartFragment.java new file mode 100644 index 00000000..4941c5aa --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/HumanHeartFragment.java @@ -0,0 +1,72 @@ +package com.buildmlearn.labeldiagram.resources; + +import com.buildmlearn.labeldiagram.DiagramPlayHumanHeart; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.TextView; + +public class HumanHeartFragment extends Fragment { + + private static final int GAME_SCORE = 90; + private Typeface tfThin; + private float score; + + // Store instance variables based on arguments passed + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), + "fonts/Roboto-Thin.ttf"); + + score = getArguments().getFloat("SCORE_SAVED"); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.human_heart_view, + container, false); + + TextView diagramTxt = (TextView) view.findViewById(R.id.txt_diagram); + TextView savedScoreTxt = (TextView) view.findViewById(R.id.score_saved); + + Button startBtn = (Button) view.findViewById(R.id.go_diagram_btn); + + diagramTxt.setTypeface(tfThin); + startBtn.setTypeface(tfThin); + savedScoreTxt.setText((int)((score / GAME_SCORE ) * 100) + "% Sucess"); + + startBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent eyeIntent = new Intent(getActivity(), + DiagramPlayHumanHeart.class); + eyeIntent.putExtra("SOURCE", "Fragment"); + eyeIntent.putExtra("TRY_CYCLE", 0); + eyeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + eyeIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + eyeIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + // getActivity().finish(); + startActivity(eyeIntent); + + } + }); + + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/LensFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/LensFragment.java new file mode 100644 index 00000000..138dff15 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/LensFragment.java @@ -0,0 +1,72 @@ +package com.buildmlearn.labeldiagram.resources; + +import com.buildmlearn.labeldiagram.DiagramPlayLens; +import com.buildmlearn.labeldiagram.DiagramPlayPrism; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +public class LensFragment extends Fragment { + + private static final int GAME_SCORE = 80; + private Typeface tfThin; + private float score; + private int gameScore; + + // Store instance variables based on arguments passed + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), + "fonts/Roboto-Thin.ttf"); + + score = getArguments().getFloat("SCORE_SAVED"); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.lens_view, container, + false); + + TextView savedScoreTxt = (TextView) view.findViewById(R.id.score_saved); + + Button startBtn = (Button) view.findViewById(R.id.go_diagram_btn); + + startBtn.setTypeface(tfThin); + savedScoreTxt.setText((int)((score / GAME_SCORE ) * 100) + "% Sucess"); + + startBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent lensIntent = new Intent(getActivity(), + DiagramPlayLens.class); + lensIntent.putExtra("SOURCE", "Fragment"); + lensIntent.putExtra("TRY_CYCLE", 0); + lensIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + lensIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + lensIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + // getActivity().finish(); + startActivity(lensIntent); + + } + }); + + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/LessonAdapter.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/LessonAdapter.java new file mode 100644 index 00000000..902aba93 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/LessonAdapter.java @@ -0,0 +1,70 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.List; + +import com.example.labelthediagram.R; + +import android.app.Activity; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +public class LessonAdapter extends ArrayAdapter { + + Context context; + + public LessonAdapter(Context context, int resource, + List objects) { + super(context, resource, objects); + + this.context = context; + + } + + /* + * Holder class for single row item view + * + */ + private class ViewHolder { + + ImageView tagIdIcon; + TextView tagTitle; + TextView tagDescription; + + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + final int index = position; + final ViewHolder holder; + LessonRawItem rawItem = getItem(position); + + LayoutInflater inflater = (LayoutInflater) context + .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); + + if (convertView == null) { + + convertView = inflater.inflate(R.layout.lesson_row_item, null); + holder = new ViewHolder(); + holder.tagTitle = (TextView) convertView.findViewById(R.id.tag_title); + holder.tagDescription = (TextView) convertView.findViewById(R.id.tag_description); + holder.tagIdIcon = (ImageView) convertView.findViewById(R.id.rowid_view); + convertView.setTag(holder); + + } else { + holder = (ViewHolder) convertView.getTag(); + } + + holder.tagTitle.setText(rawItem.getTagTitle()); + holder.tagDescription.setText(rawItem.getTagDescription()); + holder.tagIdIcon.setImageResource(rawItem.getTagNumberIcon()); + + return convertView; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/LessonCategoryAdapter.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/LessonCategoryAdapter.java new file mode 100644 index 00000000..f9992908 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/LessonCategoryAdapter.java @@ -0,0 +1,77 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.List; + +import com.example.labelthediagram.R; + +import android.app.Activity; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +public class LessonCategoryAdapter extends ArrayAdapter { + + Context context; + int nItems; + + public LessonCategoryAdapter(Context context, int resource, + List objects) { + super(context, resource, objects); + + this.context = context; + + } + + /* + * Holder class for single lesson row item view + */ + public class ViewHolder { + + ImageView navIcon; + ImageView lessonIcon; + TextView titleTxt; + TextView descriptionTxt; + + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + final int index = position; + final ViewHolder holder; + LessonCategoryRawItem rawItem = getItem(position); + + LayoutInflater inflater = (LayoutInflater) context + .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); + + if (convertView == null) { + + convertView = inflater.inflate(R.layout.lesson_category_row_item, null); + holder = new ViewHolder(); + holder.titleTxt = (TextView) convertView.findViewById(R.id.lessonTitle); + holder.descriptionTxt = (TextView) convertView.findViewById(R.id.lessonDescription); + holder.navIcon = (ImageView) convertView.findViewById(R.id.navigatorBtn); + holder.lessonIcon = (ImageView) convertView.findViewById(R.id.lessonIcon); + convertView.setTag(holder); + + } else { + holder = (ViewHolder) convertView.getTag(); + } + + holder.titleTxt.setText(rawItem.getTitle()); + holder.descriptionTxt.setText(rawItem.getDescription()); + holder.navIcon.setImageResource(R.drawable.proceed_btn); + holder.lessonIcon.setImageResource(rawItem.getIconId()); + + setDispatchClass(holder,index); + + return convertView; + } + + public void setDispatchClass(ViewHolder holder, int index){}; + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/LessonCategoryRawItem.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/LessonCategoryRawItem.java new file mode 100644 index 00000000..d9db05a8 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/LessonCategoryRawItem.java @@ -0,0 +1,43 @@ +package com.buildmlearn.labeldiagram.resources; + +public class LessonCategoryRawItem { + + private String title; + private String description; + private int iconId; + + + public LessonCategoryRawItem(String title, String description,int iconId) { + super(); + this.title = title; + this.description = description; + this.iconId = iconId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public int getIconId() { + return iconId; + } + + public void setIconId(int iconId) { + this.iconId = iconId; + } + + + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/LessonRawItem.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/LessonRawItem.java new file mode 100644 index 00000000..d990588d --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/LessonRawItem.java @@ -0,0 +1,43 @@ +package com.buildmlearn.labeldiagram.resources; + +public class LessonRawItem { + + private String tagTitle; + private String tagDescription; + private int tagNumberIcon; + + public LessonRawItem(String tagTitle, String tagDescription, + int tagNumberIcon) { + super(); + this.tagTitle = tagTitle; + this.tagDescription = tagDescription; + this.tagNumberIcon = tagNumberIcon; + } + + public String getTagTitle() { + return tagTitle; + } + + public void setTagTitle(String tagTitle) { + this.tagTitle = tagTitle; + } + + public String getTagDescription() { + return tagDescription; + } + + public void setTagDescription(String tagDescription) { + this.tagDescription = tagDescription; + } + + public int getTagNumberIcon() { + return tagNumberIcon; + } + + public void setTagNumberIcon(int tagNumberIcon) { + this.tagNumberIcon = tagNumberIcon; + } + + + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/MenuGridRowItem.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/MenuGridRowItem.java new file mode 100644 index 00000000..4a256c59 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/MenuGridRowItem.java @@ -0,0 +1,20 @@ +package com.buildmlearn.labeldiagram.resources; + +public class MenuGridRowItem { + + private int layoutId; + + public MenuGridRowItem(int layoutId) { + super(); + this.layoutId = layoutId; + } + + public int getLayoutId() { + return layoutId; + } + + public void setLayoutId(int layoutId) { + this.layoutId = layoutId; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/MenuGridViewAdapter.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/MenuGridViewAdapter.java new file mode 100644 index 00000000..1ecc4a94 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/MenuGridViewAdapter.java @@ -0,0 +1,154 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.List; + +import com.buildmlearn.labeldiagram.DiagramCategoryViewer; +import com.buildmlearn.labeldiagram.HelpMenu; +import com.buildmlearn.labeldiagram.ScoreboardViewer; +import com.buildmlearn.labeldiagram.Settings; +import com.buildmlearn.labeldiagram.badges.BadgesViewer; +import com.buildmlearn.labeldiagram.lessons.LessonCategoryViewer; +import com.example.labelthediagram.R; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +public class MenuGridViewAdapter extends ArrayAdapter { + + Context context; + + public MenuGridViewAdapter(Context context, int resource, + List objects) { + super(context, resource, objects); + + this.context = context; + } + + /* + * Holder class for single lesson row item view + */ + public class ViewHolder { + + RelativeLayout layout; + int id; + + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + final ViewHolder holder; + + MenuGridRowItem rawItem = getItem(position); + + LayoutInflater inflater = (LayoutInflater) context + .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); + + if (convertView == null) { + + convertView = inflater.inflate(R.layout.menu_grid_row_item, null); + holder = new ViewHolder(); + holder.layout = (RelativeLayout) convertView + .findViewById(R.id.menuGridRowLayout); + convertView.setTag(holder); + + } else { + + holder = (ViewHolder) convertView.getTag(); + + } + + View child = inflater.inflate(rawItem.getLayoutId(), null); + ImageView iconView = (ImageView) child.findViewById(R.id.diagramIcon); + TextView iconTxt = (TextView) child.findViewById(R.id.title_diagram); + + + switch (position) { + case 0: + iconView.setImageResource(R.drawable.diagrams1); + iconTxt.setText("Diagrams"); + holder.id = 0; + break; + case 1: + iconView.setImageResource(R.drawable.score_board); + iconTxt.setText("Scoreboard"); + holder.id = 1; + break; + case 2: + iconView.setImageResource(R.drawable.lesson); + iconTxt.setText("Lessons"); + holder.id = 2; + break; + case 3: + iconView.setImageResource(R.drawable.medle); + iconTxt.setText("Badges"); + holder.id = 3; + break; + case 4: + iconView.setImageResource(R.drawable.settings); + iconTxt.setText("Settings"); + holder.id = 4; + break; + case 5: + iconView.setImageResource(R.drawable.help); + iconTxt.setText("Help"); + holder.id = 5; + break; + + default: + break; + } + + holder.layout.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View view) { + + switch (holder.id) { + case 0: + Intent diagramIntent = new Intent(context, DiagramCategoryViewer.class); + context.startActivity(diagramIntent); + break; + case 1: + Intent scoreboardIntent = new Intent(context, ScoreboardViewer.class); + context.startActivity(scoreboardIntent); + break; + case 2: + Intent lessonIntent = new Intent(context, LessonCategoryViewer.class); + context.startActivity(lessonIntent); + break; + case 3: + Intent badgesIntent = new Intent(context, BadgesViewer.class); + context.startActivity(badgesIntent); + break; + case 4: + Intent settingsIntent = new Intent(context, Settings.class); + context.startActivity(settingsIntent); + break; + case 5: + Intent helpIntent = new Intent(context, HelpMenu.class); + context.startActivity(helpIntent); + break; + + default: + break; + } + + } + }); + + holder.layout.addView(child); + + return convertView; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/MotorFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/MotorFragment.java new file mode 100644 index 00000000..3e9c1d08 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/MotorFragment.java @@ -0,0 +1,70 @@ +package com.buildmlearn.labeldiagram.resources; + +import com.buildmlearn.labeldiagram.DiagramPlayMotor; +import com.buildmlearn.labeldiagram.DiagramPlayPrism; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +public class MotorFragment extends Fragment { + + private static final int GAME_SCORE = 90; + private Typeface tfThin; + private float score; + + // Store instance variables based on arguments passed + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), + "fonts/Roboto-Thin.ttf"); + + score = getArguments().getFloat("SCORE_SAVED"); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.motor_view, container, + false); + + TextView savedScoreTxt = (TextView) view.findViewById(R.id.score_saved); + + Button startBtn = (Button) view.findViewById(R.id.go_diagram_btn); + + startBtn.setTypeface(tfThin); + savedScoreTxt.setText((int)((score / GAME_SCORE ) * 100) + "% Sucess"); + + startBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent motorIntent = new Intent(getActivity(), + DiagramPlayMotor.class); + motorIntent.putExtra("SOURCE", "Fragment"); + motorIntent.putExtra("TRY_CYCLE", 0); + motorIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + motorIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + motorIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + startActivity(motorIntent); + + } + }); + + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PhysicsCategoryAdapter.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PhysicsCategoryAdapter.java new file mode 100644 index 00000000..a8e3d7f3 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PhysicsCategoryAdapter.java @@ -0,0 +1,49 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.List; + +import com.buildmlearn.labeldiagram.DiagramMenuElectricity; +import com.buildmlearn.labeldiagram.DiagramMenuOptics; +import com.buildmlearn.labeldiagram.DiagramPlayPrism; + +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Toast; + +public class PhysicsCategoryAdapter extends DiagramCategoryAdapter { + + public PhysicsCategoryAdapter(Context context, int resource, + List objects) { + super(context, resource, objects); + // TODO Auto-generated constructor stub + } + + @Override + public void setDispatchClass(ViewHolder holder, int position) { + + final int index = position; + holder.goIcon.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + if(index==0){ + //Toast.makeText(getContext(), "Comming soon...", Toast.LENGTH_SHORT).show(); + Intent intent = new Intent(v.getContext(), DiagramMenuOptics.class); + v.getContext().startActivity(intent); + + }else if(index==1){ + //Toast.makeText(getContext(), "Comming soon...", Toast.LENGTH_SHORT).show(); + Intent intent = new Intent(v.getContext(), DiagramMenuElectricity.class); + v.getContext().startActivity(intent); + } + + + } + }); + + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PhysicsCategoryFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PhysicsCategoryFragment.java new file mode 100644 index 00000000..d0fd6eaa --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PhysicsCategoryFragment.java @@ -0,0 +1,55 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.ArrayList; + +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class PhysicsCategoryFragment extends Fragment { + + ArrayList categories = new ArrayList(); + ArrayAdapter categryAdapter; + + @Override + public void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + + createModel(); + + categryAdapter = new PhysicsCategoryAdapter( + getActivity(), R.layout.category_row_item, categories); + + } + + private void createModel() { + + DiagramCategoryRawItem item1 = new DiagramCategoryRawItem("Optics", "Diagrams of Optics", R.drawable.optics_icon); + DiagramCategoryRawItem item2 = new DiagramCategoryRawItem("Electricity", "Diagrams of Electricity ", R.drawable.electricity_icon); + + categories.add(item1); + categories.add(item2); + + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // TODO Auto-generated method stub + View view = inflater.inflate(R.layout.diagram_category_mainview, + container, false); + ListView list = (ListView) view.findViewById(R.id.category_mainList); + list.setAdapter(categryAdapter); + + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PhysicsLessonAdapter.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PhysicsLessonAdapter.java new file mode 100644 index 00000000..adb706be --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PhysicsLessonAdapter.java @@ -0,0 +1,77 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.List; + +import com.buildmlearn.labeldiagram.lessons.LessonCircuit; +import com.buildmlearn.labeldiagram.lessons.LessonDryCell; +import com.buildmlearn.labeldiagram.lessons.LessonHumanEar; +import com.buildmlearn.labeldiagram.lessons.LessonLens; +import com.buildmlearn.labeldiagram.lessons.LessonMotor; +import com.buildmlearn.labeldiagram.lessons.LessonPrism; +import com.buildmlearn.labeldiagram.lessons.LessonSpectrum; + +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Toast; + +public class PhysicsLessonAdapter extends LessonCategoryAdapter { + + int nItems; + + public PhysicsLessonAdapter(Context context, int resource, + List objects) { + super(context, resource, objects); + + nItems = this.getCount(); + + } + + @Override + public void setDispatchClass(ViewHolder holder, int position) { + + final int index = position; + + holder.navIcon.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + final Intent intent; + + switch (index) { + case 0: + intent = new Intent(v.getContext(), LessonPrism.class); + v.getContext().startActivity(intent); + break; + case 1: + intent = new Intent(v.getContext(), LessonLens.class); + v.getContext().startActivity(intent); + break; + case 2: + intent = new Intent(v.getContext(), LessonSpectrum.class); + v.getContext().startActivity(intent); + break; + case 3: + intent = new Intent(v.getContext(), LessonMotor.class); + v.getContext().startActivity(intent); + break; + case 4: + intent = new Intent(v.getContext(), LessonDryCell.class); + v.getContext().startActivity(intent); + break; + case 5: + intent = new Intent(v.getContext(), LessonCircuit.class); + v.getContext().startActivity(intent); + break; + default: + break; + } + + } + }); + + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PhysicsLessonFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PhysicsLessonFragment.java new file mode 100644 index 00000000..4c7d97a1 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PhysicsLessonFragment.java @@ -0,0 +1,70 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.ArrayList; +import java.util.List; + +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class PhysicsLessonFragment extends Fragment { + + List categories = new ArrayList(); + ArrayAdapter lessonAdapter; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + createModel(); + + lessonAdapter = new PhysicsLessonAdapter(getActivity(), + R.layout.lesson_category_row_item, categories); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.diagram_category_mainview, + container, false); + ListView list = (ListView) view.findViewById(R.id.category_mainList); + list.setAdapter(lessonAdapter); + + return view; + } + + private void createModel() { + + int[] titleArray = new int[] { R.string.lesson_prism, + R.string.lesson_lens, R.string.lesson_spectrum, + R.string.lesson_motor, R.string.lesson_dry_cell, + R.string.lesson_circuit }; + + int[] descrptionArray = new int[] { R.string.lesson_prism_desc, + R.string.lesson_lens_desc, R.string.lesson_spectrum_desc, + R.string.lesson_motor_desc, R.string.lesson_dry_cell_desc, + R.string.lesson_circuit_desc }; + + int[] iconArray = new int[] { R.drawable.icon_prism, + R.drawable.icon_lens, R.drawable.icon_spectrum, + R.drawable.icon_electric_motor, R.drawable.icon_drycell, + R.drawable.icon_circuit }; + + for (int i = 0; i < titleArray.length; i++) { + + LessonCategoryRawItem item = new LessonCategoryRawItem( + getResources().getString(titleArray[i]), getResources() + .getString(descrptionArray[i]), iconArray[i]); + + categories.add(item); + } + + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PlantCellFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PlantCellFragment.java new file mode 100644 index 00000000..6fbaa77f --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PlantCellFragment.java @@ -0,0 +1,83 @@ +package com.buildmlearn.labeldiagram.resources; + +import com.buildmlearn.labeldiagram.DiagramPlayPlantCell; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.TextView; + +public class PlantCellFragment extends Fragment { + + private static final int GAME_SCORE = 100; + private Typeface tfThin; + private float score; + + + // newInstance constructor for creating fragment with arguments + public static Fragment getInstance(int id) { + + PlantCellFragment frag = new PlantCellFragment(); + return frag; + + } + + // Store instance variables based on arguments passed + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Roboto-Thin.ttf"); + + if(getArguments()!=null){ + score = getArguments().getFloat("SCORE_SAVED"); + } + + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.plant_cell_view, container, + false); + + TextView diagramTxt=(TextView) view.findViewById(R.id.txt_diagram); + TextView savedScoreTxt=(TextView) view.findViewById(R.id.score_saved); + + Button startBtn=(Button) view.findViewById(R.id.go_diagram_btn); + + diagramTxt.setTypeface(tfThin); + startBtn.setTypeface(tfThin); + savedScoreTxt.setText((int)((score / GAME_SCORE ) * 100) + "% Sucess"); + + startBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent cellIntent = new Intent(getActivity(), DiagramPlayPlantCell.class); + cellIntent.putExtra("SOURCE", "Fragment"); + cellIntent.putExtra("TRY_CYCLE", 0); + cellIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + cellIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + cellIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + //getActivity().finish(); + startActivity(cellIntent); + + + } + }); + + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PlantFlowerFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PlantFlowerFragment.java new file mode 100644 index 00000000..d6617266 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PlantFlowerFragment.java @@ -0,0 +1,77 @@ +package com.buildmlearn.labeldiagram.resources; + +import com.buildmlearn.labeldiagram.DiagramPlayPlantFlower; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.TextView; + +public class PlantFlowerFragment extends Fragment { + + private static final int GAME_SCORE = 100; + private Typeface tfThin; + private float score; + + + // Store instance variables based on arguments passed + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Roboto-Thin.ttf"); + + if(getArguments()!=null){ + score = getArguments().getFloat("SCORE_SAVED"); + } + + + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.plant_flower_view, container, + false); + + TextView diagramTxt=(TextView) view.findViewById(R.id.txt_diagram); + TextView savedScoreTxt=(TextView) view.findViewById(R.id.score_saved); + + Button startBtn=(Button) view.findViewById(R.id.go_diagram_btn); + + diagramTxt.setTypeface(tfThin); + startBtn.setTypeface(tfThin); + savedScoreTxt.setText((int)((score / GAME_SCORE ) * 100) + "% Sucess"); + + startBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent flowerIntent = new Intent(getActivity(), DiagramPlayPlantFlower.class); + flowerIntent.putExtra("SOURCE", "Fragment"); + flowerIntent.putExtra("TRY_CYCLE", 0); + flowerIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + flowerIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + flowerIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + //getActivity().finish(); + startActivity(flowerIntent); + + + } + }); + + return view; + } + + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PrismFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PrismFragment.java new file mode 100644 index 00000000..ffa95b03 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/PrismFragment.java @@ -0,0 +1,71 @@ +package com.buildmlearn.labeldiagram.resources; + +import com.buildmlearn.labeldiagram.DiagramPlayPrism; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +public class PrismFragment extends Fragment { + + private static final int GAME_SCORE = 80; + private Typeface tfThin; + private float score; + private int gameScore; + + // Store instance variables based on arguments passed + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), + "fonts/Roboto-Thin.ttf"); + + score = getArguments().getFloat("SCORE_SAVED"); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.prism_view, container, + false); + + TextView savedScoreTxt = (TextView) view.findViewById(R.id.score_saved); + + Button startBtn = (Button) view.findViewById(R.id.go_diagram_btn); + + startBtn.setTypeface(tfThin); + savedScoreTxt.setText((int)((score / GAME_SCORE ) * 100) + "% Sucess"); + + startBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent prismIntent = new Intent(getActivity(), + DiagramPlayPrism.class); + prismIntent.putExtra("SOURCE", "Fragment"); + prismIntent.putExtra("TRY_CYCLE", 0); + prismIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + prismIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + prismIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + // getActivity().finish(); + startActivity(prismIntent); + + } + }); + + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScienceCategoryAdapter.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScienceCategoryAdapter.java new file mode 100644 index 00000000..6c7a81bd --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScienceCategoryAdapter.java @@ -0,0 +1,47 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.List; + +import com.buildmlearn.labeldiagram.DiagramMenuNaturalCycles; +import com.buildmlearn.labeldiagram.DiagramMenuSky; + +import android.content.Context; +import android.content.Intent; +import android.util.Log; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Toast; + +public class ScienceCategoryAdapter extends DiagramCategoryAdapter { + + public ScienceCategoryAdapter(Context context, int resource, + List objects) { + super(context, resource, objects); + // TODO Auto-generated constructor stub + } + @Override + public void setDispatchClass(ViewHolder holder, int position) { + + final int index = position; + holder.goIcon.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + if(index==0){ + Intent intent = new Intent(v.getContext(), DiagramMenuSky.class); + v.getContext().startActivity(intent); + + }else if(index==1){ + Intent intent = new Intent(v.getContext(), DiagramMenuNaturalCycles.class); + v.getContext().startActivity(intent); + }else{ + Log.e("Error TAG", "Menu item count not valid"); + } + + + } + }); + + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScienceCategoryFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScienceCategoryFragment.java new file mode 100644 index 00000000..cf6eb45f --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScienceCategoryFragment.java @@ -0,0 +1,55 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.ArrayList; + +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class ScienceCategoryFragment extends Fragment { + + ArrayList categories = new ArrayList(); + ArrayAdapter categryAdapter; + + @Override + public void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + + createModel(); + + categryAdapter = new ScienceCategoryAdapter( + getActivity(), R.layout.category_row_item, categories); + + } + + private void createModel() { + + DiagramCategoryRawItem item1 = new DiagramCategoryRawItem("Sky", "Diagrams of Sky", R.drawable.sky_icon); + DiagramCategoryRawItem item2 = new DiagramCategoryRawItem("Natural Cycles", "Diagrams of Natural Cycles ", R.drawable.natural_cycle); + + categories.add(item1); + categories.add(item2); + + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // TODO Auto-generated method stub + View view = inflater.inflate(R.layout.diagram_category_mainview, + container, false); + ListView list = (ListView) view.findViewById(R.id.category_mainList); + list.setAdapter(categryAdapter); + + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScienceLessonAdapter.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScienceLessonAdapter.java new file mode 100644 index 00000000..a207dbba --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScienceLessonAdapter.java @@ -0,0 +1,67 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.List; + +import com.buildmlearn.labeldiagram.lessons.LessonCarbonCycle; +import com.buildmlearn.labeldiagram.lessons.LessonHumanEar; +import com.buildmlearn.labeldiagram.lessons.LessonSolarSystem; +import com.buildmlearn.labeldiagram.lessons.LessonStarPatterns; +import com.buildmlearn.labeldiagram.lessons.LessonWaterCycle; + +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Toast; + +public class ScienceLessonAdapter extends LessonCategoryAdapter { + + int nItems; + + public ScienceLessonAdapter(Context context, int resource, + List objects) { + super(context, resource, objects); + + nItems = this.getCount(); + + } + + @Override + public void setDispatchClass(ViewHolder holder, int position) { + + final int index = position; + + holder.navIcon.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + final Intent intent; + + switch (index) { + case 0: + intent = new Intent(v.getContext(), LessonSolarSystem.class); + v.getContext().startActivity(intent); + break; + case 1: + intent = new Intent(v.getContext(), LessonStarPatterns.class); + v.getContext().startActivity(intent); + break; + case 2: + intent = new Intent(v.getContext(), LessonWaterCycle.class); + v.getContext().startActivity(intent); + break; + case 3: + intent = new Intent(v.getContext(), LessonCarbonCycle.class); + v.getContext().startActivity(intent); + break; + default: + break; + } + + } + }); + + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScienceLessonFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScienceLessonFragment.java new file mode 100644 index 00000000..726ab676 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScienceLessonFragment.java @@ -0,0 +1,67 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.ArrayList; +import java.util.List; + +import com.example.labelthediagram.R; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class ScienceLessonFragment extends Fragment { + + List categories = new ArrayList(); + ArrayAdapter lessonAdapter; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + createModel(); + + lessonAdapter = new ScienceLessonAdapter(getActivity(), + R.layout.lesson_category_row_item, categories); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.diagram_category_mainview, + container, false); + ListView list = (ListView) view.findViewById(R.id.category_mainList); + list.setAdapter(lessonAdapter); + + return view; + } + + private void createModel() { + + int[] titleArray = new int[] { R.string.lesson_solar_system, + R.string.lesson_star_patterns, R.string.lesson_water_cycle, + R.string.lesson_carbon_cycle }; + + int[] descrptionArray = new int[] { R.string.lesson_solar_system_desc, + R.string.lesson_star_patterns_desc, R.string.lesson_water_cycle_desc, + R.string.lesson_carbon_cycle_desc }; + + int[] iconArray = new int[] { R.drawable.icon_solar_system, + R.drawable.icon_stars_pattern, R.drawable.icon_water_cycle, + R.drawable.icon_corban_cycle }; + + for (int i = 0; i < titleArray.length; i++) { + + LessonCategoryRawItem item = new LessonCategoryRawItem( + getResources().getString(titleArray[i]), getResources() + .getString(descrptionArray[i]), iconArray[i]); + + categories.add(item); + } + + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardAdapter.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardAdapter.java new file mode 100644 index 00000000..9fb5ba99 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardAdapter.java @@ -0,0 +1,95 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.List; + +import com.buildmlearn.labeldiagram.ScoreboardResult; +import com.buildmlearn.labeldiagram.helper.ClassMapper; +import com.buildmlearn.labeldiagram.helper.HelperClass; +import com.example.labelthediagram.R; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +public class ScoreboardAdapter extends ArrayAdapter { + + Context context; + Typeface tfThin; + Typeface tfLight; + + public ScoreboardAdapter(Context context, int resource, + List objects) { + super(context, resource, objects); + + this.context = context; + tfThin = Typeface.createFromAsset(context.getAssets(), + "fonts/Roboto-Thin.ttf"); + tfLight = Typeface.createFromAsset(context.getAssets(), + "fonts/Roboto-Light.ttf"); + + } + + /* + * Holder class for single row item view + */ + private class ViewHolder { + + ImageView viewIcon; + TextView diagramTitle; + + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + final int index = position; + final ViewHolder holder; + final ScoreboardRawItem rawItem = getItem(position); + + LayoutInflater inflater = (LayoutInflater) context + .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); + + if (convertView == null) { + + convertView = inflater.inflate(R.layout.scoreboard_row_view, null); + holder = new ViewHolder(); + holder.diagramTitle = (TextView) convertView + .findViewById(R.id.scoreboardItemTxt); + holder.viewIcon = (ImageView) convertView + .findViewById(R.id.viewIcon); + convertView.setTag(holder); + + } else { + holder = (ViewHolder) convertView.getTag(); + } + + holder.diagramTitle.setText(rawItem.getDiagramTitle()); + holder.viewIcon.setImageResource(R.drawable.view_btn); + + holder.diagramTitle.setTypeface(tfLight); + + holder.viewIcon.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + + Intent intent = new Intent(v.getContext(),ScoreboardResult.class); + intent.putExtra("SOURCE", ClassMapper.getInstance().getTagMap() + .get(rawItem.getDiagramTitle())); + v.getContext().startActivity(intent); + + } + }); + return convertView; + + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardBestScoreFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardBestScoreFragment.java new file mode 100644 index 00000000..6d5ac095 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardBestScoreFragment.java @@ -0,0 +1,175 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.database.DBAdapter; +import com.buildmlearn.labeldiagram.entity.Result; +import com.example.labelthediagram.R; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import android.database.Cursor; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ListView; +import android.widget.TextView; + +public class ScoreboardBestScoreFragment extends Fragment { + + private DBAdapter diagramDb; + private Result result; + private String source; + private Gson gsonObj; + private List resultList; + private List correctTagList; + private List incorrectTagList; + private ArrayAdapter diagramScoreResultAdapter; + private int score; + private int gameScore; + + private static final String TAG = "LOG MESSAGE"; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + source = getArguments().getString("SOURCE").trim(); + resultList = new ArrayList(); + Log.i("Arguments", getArguments().getString("SOURCE").trim() + " " + + " source :" + source); + openDB(); + loadData(); + + if (result != null) { + + score = (int) result.getScore(); + gameScore = (int) result.getGameScore(); + correctTagList = result.getCorrectTagList(); + incorrectTagList = result.getIncorrectTagList(); + fillAdapterDataModel(correctTagList, incorrectTagList); + + } else { + + Log.i(TAG, "result is null"); + + } + + diagramScoreResultAdapter = new DiagramScoreResultAdapter( + getActivity(), R.layout.scoreboard_result_row_view, resultList); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View v = inflater.inflate(R.layout.scoreboard_fragment_layout, + container, false); + TextView scoreTxt = (TextView) v.findViewById(R.id.scoreboardScore); + TextView gameScoreTxt = (TextView) v.findViewById(R.id.out_of_txt); + ListView itemList = (ListView) v + .findViewById(R.id.scoreboard_result_itemlist); + + + scoreTxt.setText(Integer.toString(score)); + gameScoreTxt.setText(Integer.toString(gameScore)); + + // Set DiagramResult adapter + itemList.setAdapter(diagramScoreResultAdapter); + + return v; + } + + private void fillAdapterDataModel(List correctTagList, + List incorrectTagList) { + + for (int i = 0; i < correctTagList.size(); i++) { + + String tagLabel = correctTagList.get(i); + DiagramScoreboardResultRawItem correctItem = new DiagramScoreboardResultRawItem( + tagLabel, R.drawable.correct_btn); + resultList.add(correctItem); + + } + + for (int i = 0; i < incorrectTagList.size(); i++) { + + String tagLabel = incorrectTagList.get(i); + DiagramScoreboardResultRawItem incorrectItem = new DiagramScoreboardResultRawItem( + tagLabel, R.drawable.incorrect_btn); + resultList.add(incorrectItem); + + } + + } + + private void loadData() { + + Cursor cursor = diagramDb.getRowBestScore(source); + gsonObj = new Gson(); + result = new Result(); + result = getResultRecord(cursor); + Log.i("Loaded reulst", result.toString()); + + } + + private Result getResultRecord(Cursor cursor) { + + Result currentResult = new Result(); + + // Reset cursor to start, checking to see if there's data: + if (cursor.moveToFirst()) { + do { + + String name = cursor.getString(DBAdapter.COL_DIAGRAM_NAME); + String result = cursor.getString(DBAdapter.COL_RESULT); + Log.i("source & name", source + " " + name); + + Type type = new TypeToken() { + }.getType(); + + Log.i("row json : ", result); + currentResult = gsonObj.fromJson(result, type); + + String outputDiagram = currentResult.getDiagramName(); + float score = currentResult.getScore(); + List correctTagList = currentResult.getCorrectTagList(); + List incorrectTagList = currentResult + .getIncorrectTagList(); + + Log.i("POJO Object :", outputDiagram + " " + score + " " + + correctTagList + " " + incorrectTagList); + Log.i("REsult to string", currentResult.toString()); + + } while (cursor.moveToNext()); + } + + // Close the cursor to avoid a resource leak. + cursor.close(); + return currentResult; + + } + + private void openDB() { + diagramDb = new DBAdapter(getActivity()); + diagramDb.open(); + Log.i("OPEN msg", "databse opened"); + } + + private void closeDB() { + diagramDb.close(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardBioFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardBioFragment.java new file mode 100644 index 00000000..e8ef6330 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardBioFragment.java @@ -0,0 +1,67 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.ArrayList; +import java.util.List; + +import com.example.labelthediagram.R; + +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ListView; +import android.widget.TextView; + +public class ScoreboardBioFragment extends Fragment { + + private Typeface tfThin; + private List biorawItems; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Roboto-Thin.ttf"); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.scoreboard_page, container, + false); + TextView biologyTxt = (TextView) view.findViewById(R.id.subjectTxt); + ListView bioList = (ListView) view.findViewById(R.id.diagramListItemsView); + + biorawItems = new ArrayList(); + biologyTxt.setTypeface(tfThin); + + ArrayAdapter bioListAdapter = new ScoreboardAdapter( + getActivity(), R.layout.scoreboard_row_view, biorawItems); + bioList.setAdapter(bioListAdapter); + + fillDataModel(); + + return view; + } + + // Fill data for ListViews + private void fillDataModel() { + // TODO Extract lists to database or separate class + String biolistItems[] = new String[] { "Human Eye", "Human Heart", + "Human Ear", "Plant Cell", "Plant Flower", "Bacteria", "Virus", + }; + + for (int i = 0; i < biolistItems.length; i++) { + ScoreboardRawItem item = new ScoreboardRawItem(biolistItems[i], + R.drawable.view_btn); + biorawItems.add(item); + } + + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardPhysicsFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardPhysicsFragment.java new file mode 100644 index 00000000..25677386 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardPhysicsFragment.java @@ -0,0 +1,70 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.ArrayList; +import java.util.List; + +import com.example.labelthediagram.R; + +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ListView; +import android.widget.TextView; + +public class ScoreboardPhysicsFragment extends Fragment { + + private Typeface tfThin; + private List physicsrawItems; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), + "fonts/Roboto-Thin.ttf"); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.scoreboard_page, container, + false); + TextView physicsTxt = (TextView) view.findViewById(R.id.subjectTxt); + ListView physicsList = (ListView) view + .findViewById(R.id.diagramListItemsView); + + physicsrawItems = new ArrayList(); + physicsTxt.setText("Physics"); + physicsTxt.setTypeface(tfThin); + + ArrayAdapter physicsListAdapter = new ScoreboardAdapter( + getActivity(), R.layout.scoreboard_row_view, physicsrawItems); + physicsList.setAdapter(physicsListAdapter); + + fillDataModel(); + + return view; + } + + // Fill data for ListViews + private void fillDataModel() { + // TODO Extract lists to database or separate class + String physicsListItem[] = new String[] { "Light Spectrum", + "Prism Refraction", "Lens Refraction", "Electric Circuit", + "Electric Motor", "Dry Cell" }; + + for (int i = 0; i < physicsListItem.length; i++) { + ScoreboardRawItem item = new ScoreboardRawItem(physicsListItem[i], + R.drawable.view_btn); + physicsrawItems.add(item); + } + + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardRawItem.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardRawItem.java new file mode 100644 index 00000000..e3cd5b44 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardRawItem.java @@ -0,0 +1,30 @@ +package com.buildmlearn.labeldiagram.resources; + +public class ScoreboardRawItem { + + private String diagramTitle; + private int imageId; + + public ScoreboardRawItem(String diagramTitle, int imageId) { + super(); + this.diagramTitle = diagramTitle; + this.imageId = imageId; + } + + public String getDiagramTitle() { + return diagramTitle; + } + public void setDiagramTitle(String diagramTitle) { + this.diagramTitle = diagramTitle; + } + public int getImageId() { + return imageId; + } + + public void setImageId(int imageId) { + this.imageId = imageId; + } + + + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardScienceFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardScienceFragment.java new file mode 100644 index 00000000..87267731 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardScienceFragment.java @@ -0,0 +1,69 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.ArrayList; +import java.util.List; + +import com.example.labelthediagram.R; + +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ListView; +import android.widget.TextView; + +public class ScoreboardScienceFragment extends Fragment { + + private Typeface tfThin; + private List sciencerawItems; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), + "fonts/Roboto-Thin.ttf"); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.scoreboard_page, container, + false); + TextView scienceTxt = (TextView) view.findViewById(R.id.subjectTxt); + ListView scienceList = (ListView) view + .findViewById(R.id.diagramListItemsView); + + sciencerawItems = new ArrayList(); + scienceTxt.setText("Science"); + scienceTxt.setTypeface(tfThin); + + ArrayAdapter scienceListAdapter = new ScoreboardAdapter( + getActivity(), R.layout.scoreboard_row_view, sciencerawItems); + scienceList.setAdapter(scienceListAdapter); + + fillDataModel(); + + return view; + } + + // Fill data for ListViews + private void fillDataModel() { + // TODO Extract lists to database or separate class + String scienceListItem[] = new String[] { "Solar System", + "Star Patterns", "Water Cycle", "Carbon Cycle" }; + + for (int i = 0; i < scienceListItem.length; i++) { + ScoreboardRawItem item = new ScoreboardRawItem(scienceListItem[i], + R.drawable.view_btn); + sciencerawItems.add(item); + } + + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardScoreFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardScoreFragment.java new file mode 100644 index 00000000..b973c01a --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/ScoreboardScoreFragment.java @@ -0,0 +1,243 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.DiagramCategoryViewer; +import com.buildmlearn.labeldiagram.ScoreboardViewer; +import com.buildmlearn.labeldiagram.database.DBAdapter; +import com.buildmlearn.labeldiagram.entity.Result; +import com.buildmlearn.labeldiagram.widget.DiagramAlertDialogFragment; +import com.example.labelthediagram.R; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import android.app.Dialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.database.Cursor; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.View.OnClickListener; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.ListView; +import android.widget.TextView; + +public class ScoreboardScoreFragment extends Fragment { + + private DBAdapter diagramDb; + private Result result; + private String source; + private Gson gsonObj; + private List resultList; + private List correctTagList; + private List incorrectTagList; + private ArrayAdapter diagramScoreResultAdapter; + private int score; + private int gameScore; + + private static final String TAG = "LOG MESSAGE"; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + source = getArguments().getString("SOURCE").trim(); + resultList = new ArrayList(); + Log.i("Arguments", getArguments().getString("SOURCE").trim() + " " + + " source :" + source); + openDB(); + loadData(); + + if (result == null) { + + createDialog(); + + } else { + score = (int) result.getScore(); + gameScore = (int) result.getGameScore(); + correctTagList = result.getCorrectTagList(); + incorrectTagList = result.getIncorrectTagList(); + fillAdapterDataModel(correctTagList, incorrectTagList); + } + + diagramScoreResultAdapter = new DiagramScoreResultAdapter( + getActivity(), R.layout.scoreboard_result_row_view, resultList); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View v = inflater.inflate(R.layout.scoreboard_fragment_layout, + container, false); + TextView scoreTxt = (TextView) v.findViewById(R.id.scoreboardScore); + TextView gameScoreTxt = (TextView) v.findViewById(R.id.out_of_txt); + ListView itemList = (ListView) v + .findViewById(R.id.scoreboard_result_itemlist); + + scoreTxt.setText(Integer.toString(score)); + gameScoreTxt.setText(Integer.toString(gameScore)); + // Set DiagramResult adapter + + itemList.setAdapter(diagramScoreResultAdapter); + + return v; + } + + private void fillAdapterDataModel(List correctTagList, + List incorrectTagList) { + + for (int i = 0; i < correctTagList.size(); i++) { + + String tagLabel = correctTagList.get(i); + DiagramScoreboardResultRawItem correctItem = new DiagramScoreboardResultRawItem( + tagLabel, R.drawable.correct_btn); + resultList.add(correctItem); + + } + + for (int i = 0; i < incorrectTagList.size(); i++) { + + String tagLabel = incorrectTagList.get(i); + DiagramScoreboardResultRawItem incorrectItem = new DiagramScoreboardResultRawItem( + tagLabel, R.drawable.incorrect_btn); + resultList.add(incorrectItem); + + } + + } + + private void loadData() { + + Cursor cursor = diagramDb.getRowScore(source); + gsonObj = new Gson(); + result = new Result(); + if (cursor == null) { + Log.i("..TAG.. ", "Hore ahuuna"); + } + result = getResultRecord(cursor); + // Log.i("Loaded reulst", result.toString()); + + } + + private Result getResultRecord(Cursor cursor) { + + Result currentResult = new Result(); + + // Reset cursor to start, checking to see if there's data: + if (cursor.moveToFirst()) { + do { + + String name = cursor.getString(DBAdapter.COL_DIAGRAM_NAME); + String result = cursor.getString(DBAdapter.COL_RESULT); + Log.i("source & name", source + " " + name); + + Type type = new TypeToken() { + }.getType(); + + currentResult = gsonObj.fromJson(result, type); + + if (currentResult.getDiagramName() == null) { + + Log.i("NULL Pointer", "Null point"); + + } else { + + String outputDiagram = currentResult.getDiagramName(); + float score = currentResult.getScore(); + List correctTagList = currentResult + .getCorrectTagList(); + List incorrectTagList = currentResult + .getIncorrectTagList(); + Log.i("POJO Object :", outputDiagram + " " + score + " " + + correctTagList + " " + incorrectTagList); + Log.i("REsult to string", currentResult.toString()); + } + + } while (cursor.moveToNext()); + + // Close the cursor to avoid a resource leak. + cursor.close(); + return currentResult; + + } else { + + cursor.close(); + return null; + } + + } + + private void createDialog() { + + final Dialog dialog = new Dialog(getActivity()); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setCanceledOnTouchOutside(false); + dialog.setContentView(R.layout.custom_dialog_view); + dialog.setCancelable(false); + + Button yesBtn = (Button) dialog.findViewById(R.id.yes_btn); + Button noBtn = (Button) dialog.findViewById(R.id.no_btn); + TextView tvTitle = (TextView) dialog.findViewById(R.id.dialog_title); + TextView tvMessage = (TextView) dialog.findViewById(R.id.confirm_txt); + + tvTitle.setText(getResources().getString(R.string.not_complete)); + tvMessage.setText(getResources().getString(R.string.not_complete_msg)); + yesBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + dialog.dismiss(); + getActivity().finish(); + launchIntent(DiagramCategoryViewer.class); + } + }); + + noBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + dialog.dismiss(); + getActivity().finish(); + launchIntent(ScoreboardViewer.class); + } + }); + + dialog.show(); + + } + + private void launchIntent(Class dispatchedClass) { + + Intent intent = new Intent(getActivity(), dispatchedClass); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + // getActivity().finish(); + + } + + private void openDB() { + diagramDb = new DBAdapter(getActivity()); + diagramDb.open(); + Log.i("OPEN msg", "databse opened"); + } + + private void closeDB() { + diagramDb.close(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + closeDB(); + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/SolarSystemFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/SolarSystemFragment.java new file mode 100644 index 00000000..60bbedde --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/SolarSystemFragment.java @@ -0,0 +1,70 @@ +package com.buildmlearn.labeldiagram.resources; + +import com.buildmlearn.labeldiagram.DiagramPlaySolarSystem; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +public class SolarSystemFragment extends Fragment { + + private static final int GAME_SCORE = 90; + private Typeface tfThin; + private float score; + + // Store instance variables based on arguments passed + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), + "fonts/Roboto-Thin.ttf"); + + score = getArguments().getFloat("SCORE_SAVED"); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.solar_system_view, container, + false); + + TextView savedScoreTxt = (TextView) view.findViewById(R.id.score_saved); + + Button startBtn = (Button) view.findViewById(R.id.go_diagram_btn); + + startBtn.setTypeface(tfThin); + savedScoreTxt.setText((int)((score / GAME_SCORE ) * 100) + "% Sucess"); + + startBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent spectrumIntent = new Intent(getActivity(), + DiagramPlaySolarSystem.class); + spectrumIntent.putExtra("SOURCE", "Fragment"); + spectrumIntent.putExtra("TRY_CYCLE", 0); + spectrumIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + spectrumIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + spectrumIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + // getActivity().finish(); + startActivity(spectrumIntent); + + } + }); + + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/SpectrumFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/SpectrumFragment.java new file mode 100644 index 00000000..0aa98326 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/SpectrumFragment.java @@ -0,0 +1,71 @@ +package com.buildmlearn.labeldiagram.resources; + +import com.buildmlearn.labeldiagram.DiagramPlaySpectrum; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +public class SpectrumFragment extends Fragment { + + private static final int GAME_SCORE = 90; + private Typeface tfThin; + private float score; + private int gameScore; + + // Store instance variables based on arguments passed + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), + "fonts/Roboto-Thin.ttf"); + + score = getArguments().getFloat("SCORE_SAVED"); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.spectrum_view, container, + false); + + TextView savedScoreTxt = (TextView) view.findViewById(R.id.score_saved); + + Button startBtn = (Button) view.findViewById(R.id.go_diagram_btn); + + startBtn.setTypeface(tfThin); + savedScoreTxt.setText((int)((score / GAME_SCORE ) * 100) + "% Sucess"); + + startBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent spectrumIntent = new Intent(getActivity(), + DiagramPlaySpectrum.class); + spectrumIntent.putExtra("SOURCE", "Fragment"); + spectrumIntent.putExtra("TRY_CYCLE", 0); + spectrumIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + spectrumIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + spectrumIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + // getActivity().finish(); + startActivity(spectrumIntent); + + } + }); + + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/StarPatternsFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/StarPatternsFragment.java new file mode 100644 index 00000000..cb3d8818 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/StarPatternsFragment.java @@ -0,0 +1,70 @@ +package com.buildmlearn.labeldiagram.resources; + +import com.buildmlearn.labeldiagram.DiagramPlayStarPatterns; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +public class StarPatternsFragment extends Fragment { + + private static final int GAME_SCORE = 80; + private Typeface tfThin; + private float score; + + // Store instance variables based on arguments passed + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), + "fonts/Roboto-Thin.ttf"); + + score = getArguments().getFloat("SCORE_SAVED"); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.star_patterns_view, container, + false); + + TextView savedScoreTxt = (TextView) view.findViewById(R.id.score_saved); + + Button startBtn = (Button) view.findViewById(R.id.go_diagram_btn); + + startBtn.setTypeface(tfThin); + savedScoreTxt.setText((int)((score / GAME_SCORE ) * 100) + "% Sucess"); + + startBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent starIntent = new Intent(getActivity(), + DiagramPlayStarPatterns.class); + starIntent.putExtra("SOURCE", "Fragment"); + starIntent.putExtra("TRY_CYCLE", 0); + starIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + starIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + starIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + // getActivity().finish(); + startActivity(starIntent); + + } + }); + + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/VirusFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/VirusFragment.java new file mode 100644 index 00000000..67fbae07 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/VirusFragment.java @@ -0,0 +1,82 @@ +package com.buildmlearn.labeldiagram.resources; + +import com.buildmlearn.labeldiagram.DiagramPlayVirus; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.TextView; + +public class VirusFragment extends Fragment { + + private static final float GAME_SCORE = 80; + private Typeface tfThin; + private float score; + + // newInstance constructor for creating fragment with arguments + public static Fragment getInstance(int id) { + + VirusFragment frag = new VirusFragment(); + return frag; + + } + + // Store instance variables based on arguments passed + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + // id = getArguments().getInt("diagram_id", 0); + tfThin = Typeface.createFromAsset(getActivity().getAssets(), + "fonts/Roboto-Thin.ttf"); + + if (getArguments() != null) { + score = getArguments().getFloat("SCORE_SAVED"); + } + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.virus_view, container, + false); + + TextView diagramTxt = (TextView) view.findViewById(R.id.txt_diagram); + TextView savedScoreTxt = (TextView) view.findViewById(R.id.score_saved); + + Button startBtn = (Button) view.findViewById(R.id.go_diagram_btn); + + diagramTxt.setTypeface(tfThin); + startBtn.setTypeface(tfThin); + savedScoreTxt.setText((int)((score / GAME_SCORE ) * 100) + "% Sucess"); + + startBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent virusIntent = new Intent(getActivity(), + DiagramPlayVirus.class); + virusIntent.putExtra("SOURCE", "Fragment"); + virusIntent.putExtra("TRY_CYCLE", 0); + virusIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + virusIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + virusIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + // getActivity().finish(); + startActivity(virusIntent); + + } + }); + + return view; + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/WaterCycleFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/WaterCycleFragment.java new file mode 100644 index 00000000..3561a2b1 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/WaterCycleFragment.java @@ -0,0 +1,85 @@ +package com.buildmlearn.labeldiagram.resources; + +import com.buildmlearn.labeldiagram.DiagramPlayWaterCycle; +import com.example.labelthediagram.R; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.TextView; + +public class WaterCycleFragment extends Fragment { + + private static final float GAME_SCORE = 80; + private Typeface tfThin; + private float score; + + // newInstance constructor for creating fragment with arguments + public static Fragment getInstance(int id) { + WaterCycleFragment frag = new WaterCycleFragment(); + // insert data to passs + // Bundle args = new Bundle(); + // args.putInt("diagram_id", id); + // frag.setArguments(args); + return frag; + } + + // Store instance variables based on arguments passed + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + tfThin = Typeface.createFromAsset(getActivity().getAssets(), + "fonts/Roboto-Thin.ttf"); + + if (getArguments() != null) { + score = getArguments().getFloat("SCORE_SAVED"); + } + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + final View view = inflater.inflate(R.layout.water_cycle_view, container, + false); + + TextView diagramTxt = (TextView) view.findViewById(R.id.txt_diagram); + TextView savedScoreTxt = (TextView) view.findViewById(R.id.score_saved); + + Button startBtn = (Button) view.findViewById(R.id.go_diagram_btn); + + diagramTxt.setTypeface(tfThin); + startBtn.setTypeface(tfThin); + savedScoreTxt.setText((int)((score / GAME_SCORE ) * 100) + "% Sucess"); + + startBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent waterCycIntent = new Intent(getActivity(), + DiagramPlayWaterCycle.class); + waterCycIntent.putExtra("SOURCE", "Fragment"); + waterCycIntent.putExtra("TRY_CYCLE", 0); + waterCycIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + waterCycIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + waterCycIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + // getActivity().finish(); + startActivity(waterCycIntent); + + } + }); + + return view; + } + + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/YourBadgeRowItem.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/YourBadgeRowItem.java new file mode 100644 index 00000000..329a7b70 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/YourBadgeRowItem.java @@ -0,0 +1,37 @@ +package com.buildmlearn.labeldiagram.resources; + +public class YourBadgeRowItem { + + private String badgeTitle; + private int badgeId; + + public YourBadgeRowItem(String badgeTitle) { + super(); + this.badgeTitle = badgeTitle; + } + + public YourBadgeRowItem(String badgeTitle, int badgeId) { + super(); + this.badgeTitle = badgeTitle; + this.badgeId = badgeId; + } + + public String getBadgeTitle() { + return badgeTitle; + } + + public void setBadgeTitle(String badgeTitle) { + this.badgeTitle = badgeTitle; + } + + public int getBadgeId() { + return badgeId; + } + + public void setBadgeId(int badgeId) { + this.badgeId = badgeId; + } + + + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/YourBadges.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/YourBadges.java new file mode 100644 index 00000000..85fabdfc --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/YourBadges.java @@ -0,0 +1,150 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.ArrayList; +import java.util.List; + +import com.buildmlearn.labeldiagram.DiagramCategoryViewer; +import com.buildmlearn.labeldiagram.ScoreboardViewer; +import com.buildmlearn.labeldiagram.badges.BadgesViewer; +import com.buildmlearn.labeldiagram.database.Database; +import com.buildmlearn.labeldiagram.entity.Badge; +import com.example.labelthediagram.R; + +import android.app.Dialog; +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.View.OnClickListener; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.ListView; +import android.widget.TextView; + +public class YourBadges extends Fragment { + + Database database; + List achievedList = new ArrayList(); + ArrayList container = new ArrayList(); + ArrayAdapter adapter; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + loadDatabase(); + loadData(); + fillAdapterDataModel(); + init(); + + } + + private void init() { + adapter = new YourBadgesAdapter( + getActivity(), R.layout.your_badge_row_item, container); + } + + private void fillAdapterDataModel() { + + Badge badge = new Badge(); + + if(achievedList.size()!=0){ + + for (int i = 0; i < achievedList.size(); i++) { + + badge = achievedList.get(i); + String badgeTitle = badge.getTitle(); + YourBadgeRowItem rowItem = new YourBadgeRowItem(badgeTitle); + container.add(rowItem); + + } + + }else{ + + createDialog(); + + } + + + } + + private void createDialog() { + + final Dialog dialog = new Dialog(getActivity()); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setCanceledOnTouchOutside(false); + dialog.setContentView(R.layout.custom_dialog_view); + dialog.setCancelable(false); + + Button yesBtn = (Button) dialog.findViewById(R.id.yes_btn); + Button noBtn = (Button) dialog.findViewById(R.id.no_btn); + TextView tvTitle = (TextView) dialog.findViewById(R.id.dialog_title); + TextView tvMessage = (TextView) dialog.findViewById(R.id.confirm_txt); + + tvTitle.setText(getResources().getString(R.string.no_badges)); + tvMessage.setText(getResources().getString(R.string.no_badges_msg)); + yesBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + launchIntent(DiagramCategoryViewer.class); + } + }); + + noBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + launchIntent(BadgesViewer.class); + } + }); + + dialog.show(); + + } + + private void launchIntent(Class dispatchedClass) { + + Intent intent = new Intent(getActivity(), dispatchedClass); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + getActivity().finish(); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.your_badges, + container, false); + ListView list = (ListView) view.findViewById(R.id.your_badges_list); + list.setAdapter(adapter); + + return view; + + } + + + @Override + public void onDestroy() { + super.onDestroy(); + closeDatabase(); + } + + private void loadDatabase() { + database = new Database(this.getActivity()); + } + + private void closeDatabase() { + database.close(); + } + + private void loadData() { + achievedList = database.getAchievedBadge(true); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/YourBadgesAdapter.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/YourBadgesAdapter.java new file mode 100644 index 00000000..81b2f755 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/resources/YourBadgesAdapter.java @@ -0,0 +1,101 @@ +package com.buildmlearn.labeldiagram.resources; + +import java.util.ArrayList; + +import com.example.labelthediagram.R; + +import android.app.Activity; +import android.content.Context; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; + + +public class YourBadgesAdapter extends ArrayAdapter { + + Context context; + + public YourBadgesAdapter(Context context, int resource, + ArrayList container) { + super(context, resource, container); + + this.context = context; + + } + + /* + * Holder class for single row item view + * + */ + private class ViewHolder { + + ImageView badgeIcon; + ImageView tickIcon; + TextView badgeTitle; + TextView achievedTxt; + + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + final ViewHolder holder; + YourBadgeRowItem rawItem = getItem(position); + + LayoutInflater inflater = (LayoutInflater) context + .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); + + if (convertView == null) { + + convertView = inflater.inflate(R.layout.your_badge_row_item, null); + holder = new ViewHolder(); + holder.badgeTitle = (TextView) convertView.findViewById(R.id.achievement_title); + holder.achievedTxt = (TextView) convertView.findViewById(R.id.achievement_txt); + holder.badgeIcon = (ImageView) convertView.findViewById(R.id.achieved_badge); + holder.tickIcon = (ImageView) convertView.findViewById(R.id.tick_icon); + convertView.setTag(holder); + + } else { + + holder = (ViewHolder) convertView.getTag(); + + } + + holder.badgeTitle.setText(rawItem.getBadgeTitle()); + holder.tickIcon.setImageResource(R.drawable.correct_btn); + + String title = rawItem.getBadgeTitle(); + + int badgeId = iconSelector(title); + holder.badgeIcon.setImageResource(badgeId); + + return convertView; + } + + private int iconSelector(String title) { + + int iconId=0; + + if(title.equals(context.getResources().getString(R.string.badge_biology))){ + iconId = R.drawable.bio; + }else if(title.equals(context.getResources().getString(R.string.badge_physics))){ + iconId = R.drawable.physics; + }else if(title.equals(context.getResources().getString(R.string.badge_science))){ + iconId = R.drawable.science; + }else if(title.equals(context.getResources().getString(R.string.badge_champion))){ + iconId = R.drawable.champion; + }else if(title.equals(context.getResources().getString(R.string.badge_persistence))){ + iconId = R.drawable.persistence; + }else if(title.equals(context.getResources().getString(R.string.badge_streak))){ + iconId = R.drawable.streak; + }else{ + Log.i("TAG", "No icon id"); + } + + return iconId; + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/tooltipkit/CustomTooltip.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/tooltipkit/CustomTooltip.java new file mode 100644 index 00000000..76c1bd6d --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/tooltipkit/CustomTooltip.java @@ -0,0 +1,309 @@ +package com.buildmlearn.labeldiagram.tooltipkit; + +import com.example.labelthediagram.R; + +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Rect; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.view.ViewGroup.MarginLayoutParams; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.view.animation.Interpolator; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow.OnDismissListener; + +public class CustomTooltip extends Tooltip implements OnDismissListener { + + private ImageView mArrowUp; + private ImageView mArrowDown; + private ImageView mArrowLeft; + private ImageView mArrowRight; + protected LinearLayout rootLayout; + + private LayoutInflater inflater; + private OnDismissListener mDismissListener; + + private boolean mDidAction; + private boolean mAnimateTrack; + + private int mChildPos; + private int mAnimStyle; + + public static final int ANIM_GROW_FROM_LEFT = 1; + public static final int ANIM_GROW_FROM_RIGHT = 2; + public static final int ANIM_GROW_FROM_CENTER = 3; + public static final int ANIM_AUTO = 4; + private Animation mTrackAnim; + + public CustomTooltip(Context context) { + super(context); + inflater = (LayoutInflater) context + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + + mTrackAnim = AnimationUtils.loadAnimation(context, R.anim.rail); + + mTrackAnim.setInterpolator(new Interpolator() { + public float getInterpolation(float t) { + // Pushes past the target area, then snaps back into place. + // Equation for graphing: 1.2-((x*1.6)-1.1)^2 + final float inner = (t * 1.55f) - 1.1f; + + return 1.2f - inner * inner; + } + }); + + + mAnimStyle = ANIM_AUTO; + mAnimateTrack = true; + mChildPos = 0; + + setRootViewId(R.layout.tooltip_view); + } + + public void setRootViewId(int ddeskPopup) { + mRootView = (ViewGroup) inflater.inflate(ddeskPopup, null); + + + + // mtrack + mArrowDown = (ImageView) mRootView.findViewById(R.id.arrow_down); + mArrowUp = (ImageView) mRootView.findViewById(R.id.arrow_up); + mArrowLeft = (ImageView) mRootView.findViewById(R.id.arrow_left); + mArrowRight = (ImageView) mRootView.findViewById(R.id.arrow_right); + rootLayout = (LinearLayout) mRootView.findViewById(R.id.content); + + mRootView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, + LayoutParams.WRAP_CONTENT)); + + setContentView(mRootView); + } + + private int getNavBarHeight() { + Resources resources = mContext.getResources(); + int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", + "android"); + if (resourceId > 0) { + return resources.getDimensionPixelSize(resourceId); + } + return 0; + } + + + public void show(View anchor, AlignMode alignMode) { + preShow(); + + int[] location = new int[2]; + + // getting clicked view params + anchor.getLocationOnScreen(location); + Rect anchorRect = new Rect(location[0], location[1], location[0] + + anchor.getWidth(), location[1] + anchor.getHeight()); + + mRootView.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); + + int rootWidth = mRootView.getMeasuredWidth(); + int rootHeight = mRootView.getMeasuredHeight(); + int screenWidth = mWindowManager.getDefaultDisplay().getWidth(); + int screenHeight = mWindowManager.getDefaultDisplay().getHeight(); + + int xPos = 0; + int yPos = 0; + int arrowMargin = 0; + + int anchorMidX = location[0] + anchor.getMeasuredWidth() / 2; + int anchorMidY = location[1] + anchor.getMeasuredHeight() / 2; + + boolean onTop = true; + + // display on bottom + + AlignMode mode = alignMode; + if (mode == AlignMode.TOP) { + xPos = anchorMidX - rootWidth / 2; + yPos = anchor.getBottom(); + if (rootWidth / 2 > anchorMidX) { + arrowMargin = anchorMidX - mArrowUp.getMeasuredWidth() / 2 + - mArrowLeft.getMeasuredWidth(); + } else if (rootWidth / 2 > (screenWidth - anchorMidX)) { + arrowMargin = (rootWidth - (screenWidth - anchorMidX)) + - mArrowUp.getMeasuredWidth() / 2 + - mArrowLeft.getMeasuredWidth(); + } else { + arrowMargin = rootWidth / 2 - mArrowUp.getMeasuredWidth() / 2 + - mArrowLeft.getMeasuredWidth(); + } + showArrow(R.id.arrow_up, arrowMargin); + setAnimationStyle(screenWidth, anchorRect.centerX(), onTop); + } else if (mode == AlignMode.BOTTOM) { + + xPos = anchorMidX - rootWidth / 2; + yPos = location[1] - rootHeight; + if (rootWidth / 2 > anchorMidX) { + arrowMargin = anchorMidX - mArrowDown.getMeasuredWidth() / 2 + - mArrowLeft.getMeasuredWidth(); + } else if (rootWidth / 2 > (screenWidth - anchorMidX)) { + arrowMargin = (rootWidth - (screenWidth - anchorMidX)) + - mArrowDown.getMeasuredWidth() / 2 + - mArrowLeft.getMeasuredWidth(); + } else { + arrowMargin = rootWidth / 2 - mArrowDown.getMeasuredWidth() / 2 + - mArrowLeft.getMeasuredWidth(); + } + showArrow(R.id.arrow_down, arrowMargin); + mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Center + : R.style.Animations_PopDownMenu_Center); + + } else if (mode == AlignMode.LEFT) { + // ok finish + xPos = anchor.getRight(); + yPos = anchorMidY - rootHeight / 2; + if (rootHeight / 2 > anchorMidY) { + arrowMargin = anchorMidY - mArrowLeft.getMeasuredHeight() / 2; + } else if (rootHeight / 2 > (screenHeight - anchorMidY)) { + arrowMargin = (rootHeight - (screenHeight - anchorMidY)) + - mArrowLeft.getMeasuredHeight() / 2; + } else { + arrowMargin = rootHeight / 2 - mArrowRight.getMeasuredHeight() + / 2; + } + showArrow(R.id.arrow_left, arrowMargin); + mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Left + : R.style.Animations_PopDownMenu_Left); + } else if (mode == AlignMode.RIGHT) { + xPos = screenWidth - rootWidth - anchor.getWidth() - anchor.getLeft(); + yPos = anchorMidY - rootHeight / 2; + if (rootHeight / 2 > anchorMidY) { + arrowMargin = anchorMidY - mArrowRight.getMeasuredHeight() / 2; + } else if (rootHeight / 2 > (screenHeight - anchorMidY)) { + arrowMargin = (rootHeight - (screenHeight - anchorMidY)) + - mArrowRight.getMeasuredHeight() / 2; + } else { + arrowMargin = rootHeight / 2 - mArrowRight.getMeasuredHeight() + / 2; + } + showArrow(R.id.arrow_right, arrowMargin); + setAnimationStyle(screenWidth, anchorRect.centerX(), onTop); + } else { + + } + + mWindow.showAtLocation(anchor, Gravity.NO_GRAVITY, xPos, yPos); + + } + + private void showArrow(int whichArrow, int requestedX) { + ViewGroup.MarginLayoutParams param = null; + switch (whichArrow) { + case R.id.arrow_up: + param = (MarginLayoutParams) mArrowUp.getLayoutParams(); + param.leftMargin = requestedX; + mArrowLeft.setVisibility(View.INVISIBLE); + mArrowUp.setVisibility(View.VISIBLE); + mArrowDown.setVisibility(View.INVISIBLE); + mArrowRight.setVisibility(View.INVISIBLE); + break; + case R.id.arrow_down: + param = (MarginLayoutParams) mArrowDown.getLayoutParams(); + param.leftMargin = requestedX; + mArrowLeft.setVisibility(View.INVISIBLE); + mArrowUp.setVisibility(View.INVISIBLE); + mArrowDown.setVisibility(View.VISIBLE); + mArrowRight.setVisibility(View.INVISIBLE); + break; + case R.id.arrow_left: + param = (MarginLayoutParams) mArrowLeft.getLayoutParams(); + param.topMargin = requestedX; + mArrowLeft.setVisibility(View.VISIBLE); + mArrowUp.setVisibility(View.INVISIBLE); + mArrowDown.setVisibility(View.INVISIBLE); + mArrowRight.setVisibility(View.INVISIBLE); + break; + case R.id.arrow_right: + param = (MarginLayoutParams) mArrowRight.getLayoutParams(); + param.topMargin = requestedX; + mArrowLeft.setVisibility(View.INVISIBLE); + mArrowUp.setVisibility(View.INVISIBLE); + mArrowDown.setVisibility(View.INVISIBLE); + mArrowRight.setVisibility(View.VISIBLE); + break; + + default: + break; + } + } + + private void setAnimationStyle(int screenWidth, int requestedX, + boolean onTop) { + int arrowPos = requestedX - mArrowUp.getMeasuredWidth() / 2; + + switch (mAnimStyle) { + case ANIM_GROW_FROM_LEFT: + mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Left + : R.style.Animations_PopDownMenu_Left); + break; + + case ANIM_GROW_FROM_RIGHT: + mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Right + : R.style.Animations_PopDownMenu_Right); + break; + + case ANIM_GROW_FROM_CENTER: + mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Center + : R.style.Animations_PopDownMenu_Center); + break; + + case ANIM_AUTO: + if (arrowPos <= screenWidth / 4) { + mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Left + : R.style.Animations_PopDownMenu_Left); + } else if (arrowPos > screenWidth / 4 + && arrowPos < 3 * (screenWidth / 4)) { + mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Center + : R.style.Animations_PopDownMenu_Center); + } else { + mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopDownMenu_Right + : R.style.Animations_PopDownMenu_Right); + } + + break; + } + } + + public void setAnimStyle(int mAnimStyle) { + this.mAnimStyle = mAnimStyle; + } + + public void mAnimateTrack(boolean mAnimateTrack) { + this.mAnimateTrack = mAnimateTrack; + } + + public void setOnDismissListener(CustomTooltip.OnDismissListener listener) { + setOnDismissListener(this); + + mDismissListener = listener; + } + + @Override + public void onDismiss() { + } + + public interface OnDismissListener { + public abstract void onDismiss(); + } + + public enum AlignMode { + TOP, BOTTOM, LEFT, RIGHT; + } + + protected void addView(View view) { + rootLayout.addView(view, new LayoutParams(LayoutParams.WRAP_CONTENT, + LayoutParams.WRAP_CONTENT)); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/tooltipkit/InfoTooltip.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/tooltipkit/InfoTooltip.java new file mode 100644 index 00000000..8e5f83b0 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/tooltipkit/InfoTooltip.java @@ -0,0 +1,48 @@ +package com.buildmlearn.labeldiagram.tooltipkit; + +import com.example.labelthediagram.R; + +import android.content.Context; +import android.view.Gravity; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.LinearLayout; +import android.widget.RelativeLayout.LayoutParams; +import android.widget.TextView; + + +public class InfoTooltip extends CustomTooltip implements OnClickListener { + + LinearLayout view_main; + TextView tv_label; + String message; + + private static final String TEXT_COLOR = "#009FE3"; + + public InfoTooltip(Context context, String message) { + super(context); + this.message = message; + initLayout(); + } + + private void initLayout() { + view_main = new LinearLayout(mContext); + tv_label = new TextView(mContext); + tv_label.setText(message); + tv_label.setGravity(Gravity.CENTER); + view_main.setBackgroundResource(R.drawable.tooltip_background); + + LayoutParams tvParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); + + view_main.setOrientation(LinearLayout.VERTICAL); + view_main.addView(tv_label, tvParams); + + addView(view_main); + + } + + @Override + public void onClick(View v) { + + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/tooltipkit/Tooltip.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/tooltipkit/Tooltip.java new file mode 100644 index 00000000..a93893a2 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/tooltipkit/Tooltip.java @@ -0,0 +1,93 @@ +package com.buildmlearn.labeldiagram.tooltipkit; + +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnTouchListener; +import android.view.WindowManager; +import android.widget.PopupWindow; + +public class Tooltip { + + protected Context mContext; + protected PopupWindow mWindow; + protected View mRootView; + protected Drawable mBackground = null; + protected WindowManager mWindowManager; + + public Tooltip(Context context) { + mContext = context; + mWindow = new PopupWindow(context); + + mWindow.setTouchInterceptor(new OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { + mWindow.dismiss(); + return true; + } + return false; + } + }); + + mWindowManager = (WindowManager) context + .getSystemService(Context.WINDOW_SERVICE); + } + + protected void onDismiss() { + + } + + protected void onShow() { + + } + + protected void preShow() { + if (mRootView == null) + throw new IllegalStateException( + "setContentView was not called with a view to display."); + + onShow(); + + if (mBackground == null) + mWindow.setBackgroundDrawable(new BitmapDrawable()); + else + mWindow.setBackgroundDrawable(mBackground); + + mWindow.setWidth(WindowManager.LayoutParams.WRAP_CONTENT); + mWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT); + mWindow.setTouchable(true); + mWindow.setFocusable(true); + mWindow.setOutsideTouchable(true); + mWindow.setContentView(mRootView); + + } + + public void setContentView(View root) { + mRootView = root; + mWindow.setContentView(root); + } + + public void setBackgroundDrawable(Drawable background) { + mBackground = background; + } + + public void setContentView(int layoutResID) { + LayoutInflater inflator = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + + setContentView(inflator.inflate(layoutResID, null)); + } + + public void setOnDismissListener(PopupWindow.OnDismissListener listener) { + mWindow.setOnDismissListener(listener); + } + + public void dismiss() { + mWindow.dismiss(); + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/widget/CustomFontManager.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/widget/CustomFontManager.java new file mode 100644 index 00000000..aa2da0b1 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/widget/CustomFontManager.java @@ -0,0 +1,172 @@ +package com.buildmlearn.labeldiagram.widget; + +import com.example.labelthediagram.R; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Typeface; +import android.util.AttributeSet; +import android.util.SparseArray; +import android.widget.TextView; + +/** + * This class is for defining and generating custom fonts for + * the entire application + * + * @author Akilaz + * + */ + +public class CustomFontManager extends TextView { + + private final static int ROBOTO_THIN = 0; + private final static int ROBOTO_LIGHT = 1; + private final static int ROBOTO_REGULAR = 2; + private final static int ROBOTO_BOLD = 3; + private final static int ROBOTO_CONDENSED_LIGHT = 4; + private final static int ROBOTO_CONDENSED_LIGHT_ITALIC = 5; + private final static int ROBOTO_CONDENSED_REGULAR = 6; + + private final static SparseArray mTypefaces = new SparseArray( + 7); + + /** + * Simple constructor to use when creating a view from code. + * + * @param context + * The Context the view is running in, through which it can + * access the current theme, resources, etc. + */ + public CustomFontManager(Context context) { + super(context); + } + + /** + * @param context + * The Context the view is running in, through which it can + * access the current theme, resources, etc. + * @param attrs + * The attributes of the XML tag that is inflating the view. + * @param defStyle + * The default style to apply to this view. If 0, no style will + * be applied (beyond what is included in the theme). This may + * either be an attribute resource, whose value will be retrieved + * from the current theme, or an explicit style resource. + */ + public CustomFontManager(Context context, AttributeSet attrs, + int defStyleAttr) { + super(context, attrs, defStyleAttr); + if(!isInEditMode()){ + parseAttributes(context, attrs); + } + } + + /** + * @param context + * The Context the view is running in, through which it can + * access the current theme, resources, etc. + * @param attrs + * The attributes of the XML tag that is inflating the view. + * @see #CustomFontManager(Context, AttributeSet, int) + * + */ + public CustomFontManager(Context context, AttributeSet attrs) { + super(context, attrs); + if(!isInEditMode()){ + parseAttributes(context, attrs); + } + } + + /** + * Parse the attributes. + * + * @param context + * The Context the view is running in, through which it can + * access the current theme, resources, etc. + * @param attrs + * The attributes of the XML tag that is inflating the view. + */ + private void parseAttributes(Context context, AttributeSet attrs) { + TypedArray values = context.obtainStyledAttributes(attrs, + R.styleable.CustomFontManager); + + int typefaceValue = values.getInt( + R.styleable.CustomFontManager_typeface, 0); + values.recycle(); + + setTypeface(obtaintTypeface(context, typefaceValue)); + } + + /** + * Obtain typeface. + * + * @param context + * The Context the view is running in, through which it can + * access the current theme, resources, etc. + * @param typefaceValue + * values for the typeface attribute + * @return Roboto {@link Typeface} + * @throws IllegalArgumentException + * if unknown `typeface` attribute value + */ + private Typeface obtaintTypeface(Context context, int typefaceValue) + throws IllegalArgumentException { + Typeface typeface = mTypefaces.get(typefaceValue); + if (typeface == null) { + typeface = createTypeface(context, typefaceValue); + mTypefaces.put(typefaceValue, typeface); + } + return typeface; + } + + /** + * Create typeface from assets. + * + * @param context + * The Context the view is running in, through which it can + * access the current theme, resources, etc. + * @param typefaceValue + * values for the typeface attribute + * @return Roboto {@link Typeface} + * @throws IllegalArgumentException + * if unknown `typeface` attribute value + */ + private Typeface createTypeface(Context context, int typefaceValue) + throws IllegalArgumentException { + Typeface typeface; + switch (typefaceValue) { + case ROBOTO_THIN: + typeface = Typeface.createFromAsset(context.getAssets(), + "fonts/Roboto-Thin.ttf"); + break; + case ROBOTO_LIGHT: + typeface = Typeface.createFromAsset(context.getAssets(), + "fonts/Roboto-Light.ttf"); + break; + case ROBOTO_REGULAR: + typeface = Typeface.createFromAsset(context.getAssets(), + "fonts/Roboto-Regular.ttf"); + break; + case ROBOTO_BOLD: + typeface = Typeface.createFromAsset(context.getAssets(), + "fonts/Roboto-Bold.ttf"); + break; + case ROBOTO_CONDENSED_LIGHT: + typeface = Typeface.createFromAsset(context.getAssets(), + "fonts/RobotoCondensed-Light.ttf"); + break; + case ROBOTO_CONDENSED_LIGHT_ITALIC: + typeface = Typeface.createFromAsset(context.getAssets(), + "fonts/RobotoCondensed-LightItalic.ttf"); + break; + case ROBOTO_CONDENSED_REGULAR: + typeface = Typeface.createFromAsset(context.getAssets(), + "fonts/RobotoCondensed-Regular.ttf"); + break; + default: + throw new IllegalArgumentException( + "Unknown `typeface` attribute value " + typefaceValue); + } + return typeface; + } +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/widget/DiagramAlertDialogFragment.java b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/widget/DiagramAlertDialogFragment.java new file mode 100644 index 00000000..50e17f57 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/java/com/buildmlearn/labeldiagram/widget/DiagramAlertDialogFragment.java @@ -0,0 +1,60 @@ +package com.buildmlearn.labeldiagram.widget; + +import com.buildmlearn.labeldiagram.DiagramCategory; +import com.buildmlearn.labeldiagram.DiagramCategoryViewer; +import com.buildmlearn.labeldiagram.ScoreboardResult; +import com.buildmlearn.labeldiagram.ScoreboardViewer; +import com.example.labelthediagram.R; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.DialogFragment; + +public class DiagramAlertDialogFragment extends DialogFragment { + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + return new AlertDialog.Builder(getActivity()) + // Set Dialog Icon + .setIcon(R.drawable.incorrect_btn) + // Set Dialog Title + .setTitle("Not Complete") + // Set Dialog Message + .setMessage( + "You have not yet take the challenge to view the score." + + "\n\nDo you take the challenge now ?") + + // Positive button + .setPositiveButton("Yes", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + + launchIntent(DiagramCategoryViewer.class); + + } + }) + + // Negative Button + .setNegativeButton("No", + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, + int which) { + + launchIntent(ScoreboardViewer.class); + + } + }).create(); + } + + protected void launchIntent(Class dispatchedClass) { + + Intent intent = new Intent(getActivity(), dispatchedClass); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + getActivity().finish(); + + } + +} diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/disappear.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/disappear.xml new file mode 100644 index 00000000..b1fd5e3a --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/disappear.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/grow_from_bottom.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/grow_from_bottom.xml new file mode 100644 index 00000000..d2a371d1 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/grow_from_bottom.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/grow_from_bottomleft_to_topright.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/grow_from_bottomleft_to_topright.xml new file mode 100644 index 00000000..c4511f76 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/grow_from_bottomleft_to_topright.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/grow_from_bottomright_to_topleft.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/grow_from_bottomright_to_topleft.xml new file mode 100644 index 00000000..1922b2b0 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/grow_from_bottomright_to_topleft.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/grow_from_top.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/grow_from_top.xml new file mode 100644 index 00000000..ffd722c3 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/grow_from_top.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/grow_from_topleft_to_bottomright.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/grow_from_topleft_to_bottomright.xml new file mode 100644 index 00000000..b67ebe5e --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/grow_from_topleft_to_bottomright.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/grow_from_topright_to_bottomleft.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/grow_from_topright_to_bottomleft.xml new file mode 100644 index 00000000..fb19004a --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/grow_from_topright_to_bottomleft.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/pump_bottom.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/pump_bottom.xml new file mode 100644 index 00000000..f681951a --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/pump_bottom.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/pump_top.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/pump_top.xml new file mode 100644 index 00000000..65637b56 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/pump_top.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/rail.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/rail.xml new file mode 100644 index 00000000..2fdbe383 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/rail.xml @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/shrink_from_bottom.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/shrink_from_bottom.xml new file mode 100644 index 00000000..a98d592a --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/shrink_from_bottom.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/shrink_from_bottomleft_to_topright.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/shrink_from_bottomleft_to_topright.xml new file mode 100644 index 00000000..ebde343e --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/shrink_from_bottomleft_to_topright.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/shrink_from_bottomright_to_topleft.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/shrink_from_bottomright_to_topleft.xml new file mode 100644 index 00000000..d4ed5134 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/shrink_from_bottomright_to_topleft.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/shrink_from_top.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/shrink_from_top.xml new file mode 100644 index 00000000..89cd8f4f --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/shrink_from_top.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/shrink_from_topleft_to_bottomright.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/shrink_from_topleft_to_bottomright.xml new file mode 100644 index 00000000..a39681a8 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/shrink_from_topleft_to_bottomright.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/shrink_from_topright_to_bottomleft.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/shrink_from_topright_to_bottomleft.xml new file mode 100644 index 00000000..d4064fcc --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/anim/shrink_from_topright_to_bottomleft.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/animals_icon.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/animals_icon.9.png new file mode 100644 index 00000000..9050568f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/animals_icon.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/bacteria.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/bacteria.9.png new file mode 100644 index 00000000..468263c1 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/bacteria.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/bacteria_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/bacteria_unlabel.9.png new file mode 100644 index 00000000..2225311a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/bacteria_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/bio.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/bio.9.png new file mode 100644 index 00000000..06b6c020 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/bio.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/carbon_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/carbon_cycle.9.png new file mode 100644 index 00000000..e51250c5 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/carbon_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/carbon_cycle_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/carbon_cycle_unlabel.9.png new file mode 100644 index 00000000..064e1da2 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/carbon_cycle_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/champion.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/champion.9.png new file mode 100644 index 00000000..6fcc3ae3 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/champion.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/circuit.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/circuit.9.png new file mode 100644 index 00000000..dff3a564 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/circuit.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/circuit_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/circuit_unlabel.9.png new file mode 100644 index 00000000..84d98e41 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/circuit_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/close_btn.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/close_btn.9.png new file mode 100644 index 00000000..5d42e3d7 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/close_btn.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/correct_btn.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/correct_btn.9.png new file mode 100644 index 00000000..ea03c00b Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/correct_btn.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/diagrams.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/diagrams.9.png new file mode 100644 index 00000000..3a552a8a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/diagrams.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/diagrams1.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/diagrams1.9.png new file mode 100644 index 00000000..3a552a8a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/diagrams1.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/dry_cell.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/dry_cell.9.png new file mode 100644 index 00000000..8e477d84 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/dry_cell.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/dry_cell_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/dry_cell_unlabel.9.png new file mode 100644 index 00000000..2e20fd70 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/dry_cell_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/eight.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/eight.9.png new file mode 100644 index 00000000..5a659289 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/eight.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/electricity_icon.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/electricity_icon.9.png new file mode 100644 index 00000000..c390c73f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/electricity_icon.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/five.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/five.9.png new file mode 100644 index 00000000..18089479 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/five.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/flame_badge.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/flame_badge.9.png new file mode 100644 index 00000000..db0ac90f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/flame_badge.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/four.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/four.9.png new file mode 100644 index 00000000..89f67548 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/four.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help.9.png new file mode 100644 index 00000000..235f0cce Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_1.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_1.9.png new file mode 100644 index 00000000..150d92ca Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_1.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_10.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_10.9.png new file mode 100644 index 00000000..0698358d Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_10.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_2.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_2.9.png new file mode 100644 index 00000000..4efd6918 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_2.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_3.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_3.9.png new file mode 100644 index 00000000..e4d7574e Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_3.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_4.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_4.9.png new file mode 100644 index 00000000..e787e78d Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_4.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_5.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_5.9.png new file mode 100644 index 00000000..02f4c589 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_5.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_6.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_6.9.png new file mode 100644 index 00000000..694d3d30 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_6.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_7.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_7.9.png new file mode 100644 index 00000000..4a801662 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_7.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_8.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_8.9.png new file mode 100644 index 00000000..7c6d7b0a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_8.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_9.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_9.9.png new file mode 100644 index 00000000..5c3452e0 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/help_9.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/holder.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/holder.9.png new file mode 100644 index 00000000..cc5a9e35 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/holder.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/human_body.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/human_body.9.png new file mode 100644 index 00000000..662ec38f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/human_body.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/human_ear.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/human_ear.9.png new file mode 100644 index 00000000..ffc0e00f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/human_ear.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/human_eye.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/human_eye.9.png new file mode 100644 index 00000000..f4ace3a1 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/human_eye.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/human_eye_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/human_eye_unlabel.9.png new file mode 100644 index 00000000..9136c4be Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/human_eye_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/human_heart1.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/human_heart1.9.png new file mode 100644 index 00000000..7c8c956c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/human_heart1.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/human_heart_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/human_heart_unlabel.9.png new file mode 100644 index 00000000..c7cecdeb Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/human_heart_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/humanear.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/humanear.9.png new file mode 100644 index 00000000..a7d64f69 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/humanear.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/humanearunlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/humanearunlabel.9.png new file mode 100644 index 00000000..47686507 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/humanearunlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/hydrolic_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/hydrolic_cycle.9.png new file mode 100644 index 00000000..8a48b2c9 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/hydrolic_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/ic_done_white.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/ic_done_white.png new file mode 100644 index 00000000..e389d253 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/ic_done_white.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/ic_launcher.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 00000000..c66dffa4 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/ic_launcher.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/ic_warning_white.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/ic_warning_white.png new file mode 100644 index 00000000..a8889659 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/ic_warning_white.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_bacteria.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_bacteria.9.png new file mode 100644 index 00000000..02b75c49 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_bacteria.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_circuit.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_circuit.9.png new file mode 100644 index 00000000..ce8abd32 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_circuit.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_corban_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_corban_cycle.9.png new file mode 100644 index 00000000..a2cbcf20 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_corban_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_drycell.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_drycell.9.png new file mode 100644 index 00000000..b2c34eb5 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_drycell.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_ear.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_ear.9.png new file mode 100644 index 00000000..d54a659d Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_ear.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_electric_motor.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_electric_motor.9.png new file mode 100644 index 00000000..f3fe96b5 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_electric_motor.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_eye.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_eye.9.png new file mode 100644 index 00000000..0c9ca874 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_eye.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_flower.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_flower.9.png new file mode 100644 index 00000000..f627279d Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_flower.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_heart.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_heart.9.png new file mode 100644 index 00000000..1927f613 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_heart.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_lens.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_lens.9.png new file mode 100644 index 00000000..f2e357c4 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_lens.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_plant_cell.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_plant_cell.9.png new file mode 100644 index 00000000..d43c72d0 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_plant_cell.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_prism.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_prism.9.png new file mode 100644 index 00000000..19c8d0b3 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_prism.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_solar_system.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_solar_system.9.png new file mode 100644 index 00000000..5ca8df1c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_solar_system.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_spectrum.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_spectrum.9.png new file mode 100644 index 00000000..410f8ae6 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_spectrum.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_stars_pattern.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_stars_pattern.9.png new file mode 100644 index 00000000..13b7d7ce Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_stars_pattern.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_virus.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_virus.9.png new file mode 100644 index 00000000..0f1f9e01 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_virus.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_water_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_water_cycle.9.png new file mode 100644 index 00000000..6564779b Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/icon_water_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/incorrect_btn.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/incorrect_btn.9.png new file mode 100644 index 00000000..f2878c6c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/incorrect_btn.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/inner_holder.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/inner_holder.9.png new file mode 100644 index 00000000..2555cfc3 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/inner_holder.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/lens.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/lens.9.png new file mode 100644 index 00000000..67d39838 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/lens.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/lens_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/lens_unlabel.9.png new file mode 100644 index 00000000..12108280 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/lens_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/lesson.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/lesson.9.png new file mode 100644 index 00000000..ee1700cc Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/lesson.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/logo.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/logo.9.png new file mode 100644 index 00000000..0f7c2299 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/logo.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/marker.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/marker.png new file mode 100644 index 00000000..9d98f7ea Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/marker.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/marker_white.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/marker_white.9.png new file mode 100644 index 00000000..b1b08b27 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/marker_white.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/medle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/medle.9.png new file mode 100644 index 00000000..7f24a2f9 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/medle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/micro.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/micro.9.png new file mode 100644 index 00000000..c14a6d13 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/micro.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/motor.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/motor.9.png new file mode 100644 index 00000000..5d0f7cf0 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/motor.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/motor_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/motor_unlabel.9.png new file mode 100644 index 00000000..a4b3b448 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/motor_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/natural_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/natural_cycle.9.png new file mode 100644 index 00000000..11ff9f3e Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/natural_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/nine.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/nine.9.png new file mode 100644 index 00000000..4ae5a5bc Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/nine.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/notification.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/notification.png new file mode 100644 index 00000000..c4606a42 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/notification.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/one.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/one.9.png new file mode 100644 index 00000000..8bbccdf0 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/one.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/optics_icon.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/optics_icon.9.png new file mode 100644 index 00000000..a5500d3c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/optics_icon.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/persistence.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/persistence.9.png new file mode 100644 index 00000000..c97b765a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/persistence.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/physics.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/physics.9.png new file mode 100644 index 00000000..aab8cdd3 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/physics.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/plant_cell.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/plant_cell.9.png new file mode 100644 index 00000000..a269001e Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/plant_cell.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/plant_cell_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/plant_cell_unlabel.9.png new file mode 100644 index 00000000..21d48d45 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/plant_cell_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/plant_flower.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/plant_flower.9.png new file mode 100644 index 00000000..12014625 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/plant_flower.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/plant_flower_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/plant_flower_unlabel.9.png new file mode 100644 index 00000000..fb453d31 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/plant_flower_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/plants.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/plants.9.png new file mode 100644 index 00000000..34df08da Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/plants.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/prism.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/prism.9.png new file mode 100644 index 00000000..9ee46ab4 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/prism.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/prism_label.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/prism_label.9.png new file mode 100644 index 00000000..b7283681 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/prism_label.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/prism_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/prism_unlabel.9.png new file mode 100644 index 00000000..a70aae3d Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/prism_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/proceed_btn.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/proceed_btn.png new file mode 100644 index 00000000..88096034 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/proceed_btn.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/quickaction_arrow_down.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/quickaction_arrow_down.png new file mode 100644 index 00000000..0e7adc8e Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/quickaction_arrow_down.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/quickaction_arrow_left.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/quickaction_arrow_left.png new file mode 100644 index 00000000..ace5763e Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/quickaction_arrow_left.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/quickaction_arrow_right.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/quickaction_arrow_right.png new file mode 100644 index 00000000..ae02376c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/quickaction_arrow_right.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/quickaction_arrow_up.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/quickaction_arrow_up.png new file mode 100644 index 00000000..179cfe4c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/quickaction_arrow_up.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/rate.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/rate.png new file mode 100644 index 00000000..b07a1a46 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/rate.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/science.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/science.9.png new file mode 100644 index 00000000..624e8b43 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/science.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/score_board.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/score_board.9.png new file mode 100644 index 00000000..06731b53 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/score_board.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/settings.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/settings.9.png new file mode 100644 index 00000000..2a715b88 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/settings.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/seven.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/seven.9.png new file mode 100644 index 00000000..bb4e671c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/seven.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/shadow_card.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/shadow_card.png new file mode 100644 index 00000000..d0612b1d Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/shadow_card.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/six.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/six.9.png new file mode 100644 index 00000000..3c49d9c9 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/six.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/sky_icon.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/sky_icon.9.png new file mode 100644 index 00000000..b4931944 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/sky_icon.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/solar_system.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/solar_system.9.png new file mode 100644 index 00000000..19c707f0 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/solar_system.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/solar_system_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/solar_system_unlabel.9.png new file mode 100644 index 00000000..5f3a453f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/solar_system_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/sound.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/sound.png new file mode 100644 index 00000000..b6bd5ded Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/sound.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/spalsh.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/spalsh.9.png new file mode 100644 index 00000000..18bbdfdd Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/spalsh.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/spectrum.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/spectrum.9.png new file mode 100644 index 00000000..c9390de1 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/spectrum.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/spectrum_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/spectrum_unlabel.9.png new file mode 100644 index 00000000..ed589768 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/spectrum_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/splash2.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/splash2.png new file mode 100644 index 00000000..2b492dbb Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/splash2.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/splash3.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/splash3.png new file mode 100644 index 00000000..e6a5b6ed Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/splash3.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/star_full_new.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/star_full_new.png new file mode 100644 index 00000000..9de1f329 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/star_full_new.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/star_new.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/star_new.png new file mode 100644 index 00000000..81420b68 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/star_new.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/stars.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/stars.9.png new file mode 100644 index 00000000..af36a649 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/stars.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/stars_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/stars_unlabel.9.png new file mode 100644 index 00000000..b27c392e Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/stars_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/streak.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/streak.9.png new file mode 100644 index 00000000..c694fcec Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/streak.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/ten.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/ten.9.png new file mode 100644 index 00000000..27256c3f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/ten.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/three.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/three.9.png new file mode 100644 index 00000000..b00c725d Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/three.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/trans_inner_holder.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/trans_inner_holder.9.png new file mode 100644 index 00000000..ff89a22e Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/trans_inner_holder.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/two.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/two.9.png new file mode 100644 index 00000000..48463e50 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/two.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/update.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/update.png new file mode 100644 index 00000000..c9fec931 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/update.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/view_btn.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/view_btn.png new file mode 100644 index 00000000..905c07f3 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/view_btn.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/virus.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/virus.9.png new file mode 100644 index 00000000..dd323617 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/virus.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/virus_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/virus_unlabel.9.png new file mode 100644 index 00000000..91808c11 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-hdpi/virus_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/animals_icon.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/animals_icon.9.png new file mode 100644 index 00000000..5bb962a2 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/animals_icon.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/bacteria.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/bacteria.9.png new file mode 100644 index 00000000..49188a91 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/bacteria.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/bacteria_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/bacteria_unlabel.9.png new file mode 100644 index 00000000..4bc2410d Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/bacteria_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/bio.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/bio.9.png new file mode 100644 index 00000000..8250a5cc Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/bio.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/carbon_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/carbon_cycle.9.png new file mode 100644 index 00000000..345e6024 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/carbon_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/carbon_cycle_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/carbon_cycle_unlabel.9.png new file mode 100644 index 00000000..db0462b8 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/carbon_cycle_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/champion.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/champion.9.png new file mode 100644 index 00000000..881f3937 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/champion.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/circuit.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/circuit.9.png new file mode 100644 index 00000000..83be77a0 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/circuit.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/circuit_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/circuit_unlabel.9.png new file mode 100644 index 00000000..256776a2 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/circuit_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/close_btn.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/close_btn.9.png new file mode 100644 index 00000000..5f221e04 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/close_btn.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/correct_btn.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/correct_btn.9.png new file mode 100644 index 00000000..cdfb2cc2 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/correct_btn.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/diagrams1.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/diagrams1.9.png new file mode 100644 index 00000000..209131e2 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/diagrams1.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/dry_cell.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/dry_cell.9.png new file mode 100644 index 00000000..9cc4abf9 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/dry_cell.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/dry_cell_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/dry_cell_unlabel.9.png new file mode 100644 index 00000000..37a3da70 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/dry_cell_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/eight.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/eight.9.png new file mode 100644 index 00000000..da453c87 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/eight.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/electricity_icon.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/electricity_icon.9.png new file mode 100644 index 00000000..b582cacc Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/electricity_icon.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/five.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/five.9.png new file mode 100644 index 00000000..1860620f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/five.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/flame_badge.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/flame_badge.9.png new file mode 100644 index 00000000..421a00d1 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/flame_badge.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/four.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/four.9.png new file mode 100644 index 00000000..96fccca5 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/four.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help.9.png new file mode 100644 index 00000000..73db556a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_1.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_1.9.png new file mode 100644 index 00000000..410e0ff8 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_1.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_10.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_10.9.png new file mode 100644 index 00000000..f04fe58c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_10.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_2.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_2.9.png new file mode 100644 index 00000000..0f7f35b8 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_2.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_3.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_3.9.png new file mode 100644 index 00000000..fdc081f8 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_3.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_4.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_4.9.png new file mode 100644 index 00000000..86ffa418 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_4.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_5.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_5.9.png new file mode 100644 index 00000000..19e041e3 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_5.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_6.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_6.9.png new file mode 100644 index 00000000..ea48a28d Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_6.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_7.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_7.9.png new file mode 100644 index 00000000..dff276ec Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_7.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_8.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_8.9.png new file mode 100644 index 00000000..41342fea Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_8.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_9.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_9.9.png new file mode 100644 index 00000000..7d21c777 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/help_9.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/holder.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/holder.9.png new file mode 100644 index 00000000..cf4c7c6b Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/holder.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/human_body.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/human_body.9.png new file mode 100644 index 00000000..9360069e Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/human_body.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/human_ear.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/human_ear.9.png new file mode 100644 index 00000000..ffc0e00f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/human_ear.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/human_eye.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/human_eye.9.png new file mode 100644 index 00000000..608edfe9 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/human_eye.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/human_eye_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/human_eye_unlabel.9.png new file mode 100644 index 00000000..35280702 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/human_eye_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/human_heart1.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/human_heart1.9.png new file mode 100644 index 00000000..6b723bad Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/human_heart1.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/human_heart_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/human_heart_unlabel.9.png new file mode 100644 index 00000000..afc6cffb Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/human_heart_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/humanear.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/humanear.9.png new file mode 100644 index 00000000..10a04881 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/humanear.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/humanearunlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/humanearunlabel.9.png new file mode 100644 index 00000000..44abed1f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/humanearunlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/hydrolic_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/hydrolic_cycle.9.png new file mode 100644 index 00000000..8a48b2c9 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/hydrolic_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/ic_done_white.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/ic_done_white.png new file mode 100644 index 00000000..c278b6c2 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/ic_done_white.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/ic_launcher.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 00000000..48ff06ea Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/ic_launcher.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/ic_warning_white.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/ic_warning_white.png new file mode 100644 index 00000000..a43fa3c2 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/ic_warning_white.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_bacteria.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_bacteria.9.png new file mode 100644 index 00000000..dd702c60 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_bacteria.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_circuit.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_circuit.9.png new file mode 100644 index 00000000..f059572b Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_circuit.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_corban_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_corban_cycle.9.png new file mode 100644 index 00000000..a67d7c0a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_corban_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_drycell.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_drycell.9.png new file mode 100644 index 00000000..ceac9f85 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_drycell.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_ear.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_ear.9.png new file mode 100644 index 00000000..cbcbfefc Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_ear.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_electric_motor.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_electric_motor.9.png new file mode 100644 index 00000000..2af4163b Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_electric_motor.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_eye.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_eye.9.png new file mode 100644 index 00000000..59b423a9 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_eye.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_flower.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_flower.9.png new file mode 100644 index 00000000..567e5d43 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_flower.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_heart.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_heart.9.png new file mode 100644 index 00000000..e9b640d6 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_heart.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_lens.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_lens.9.png new file mode 100644 index 00000000..7fe2824d Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_lens.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_plant_cell.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_plant_cell.9.png new file mode 100644 index 00000000..21cb8e08 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_plant_cell.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_prism.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_prism.9.png new file mode 100644 index 00000000..eb39b604 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_prism.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_solar_system.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_solar_system.9.png new file mode 100644 index 00000000..efc1c21a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_solar_system.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_spectrum.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_spectrum.9.png new file mode 100644 index 00000000..cbf62656 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_spectrum.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_stars_pattern.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_stars_pattern.9.png new file mode 100644 index 00000000..d2d57d8a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_stars_pattern.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_virus.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_virus.9.png new file mode 100644 index 00000000..c80611cd Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_virus.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_water_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_water_cycle.9.png new file mode 100644 index 00000000..54cdd4d1 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/icon_water_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/incorrect_btn.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/incorrect_btn.9.png new file mode 100644 index 00000000..968b189c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/incorrect_btn.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/inner_holder.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/inner_holder.9.png new file mode 100644 index 00000000..823963b9 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/inner_holder.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/lens.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/lens.9.png new file mode 100644 index 00000000..a0d609de Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/lens.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/lens_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/lens_unlabel.9.png new file mode 100644 index 00000000..5c0842a6 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/lens_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/lesson.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/lesson.9.png new file mode 100644 index 00000000..c7f95b89 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/lesson.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/logo.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/logo.9.png new file mode 100644 index 00000000..197a6c94 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/logo.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/marker.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/marker.png new file mode 100644 index 00000000..2f9f8605 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/marker.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/marker_white.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/marker_white.9.png new file mode 100644 index 00000000..9866c9bf Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/marker_white.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/medle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/medle.9.png new file mode 100644 index 00000000..0e749743 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/medle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/micro.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/micro.9.png new file mode 100644 index 00000000..6ae580cc Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/micro.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/motor.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/motor.9.png new file mode 100644 index 00000000..7a4d7606 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/motor.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/motor_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/motor_unlabel.9.png new file mode 100644 index 00000000..e4a148c5 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/motor_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/natural_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/natural_cycle.9.png new file mode 100644 index 00000000..4d60f327 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/natural_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/nine.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/nine.9.png new file mode 100644 index 00000000..26d6f2cf Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/nine.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/notification.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/notification.png new file mode 100644 index 00000000..7ec41052 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/notification.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/one.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/one.9.png new file mode 100644 index 00000000..23874590 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/one.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/optics_icon.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/optics_icon.9.png new file mode 100644 index 00000000..0c585c07 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/optics_icon.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/persistence.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/persistence.9.png new file mode 100644 index 00000000..52cfe7d8 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/persistence.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/physics.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/physics.9.png new file mode 100644 index 00000000..525c741b Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/physics.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/plant_cell.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/plant_cell.9.png new file mode 100644 index 00000000..477ef3c6 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/plant_cell.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/plant_cell_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/plant_cell_unlabel.9.png new file mode 100644 index 00000000..c9bc2c6c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/plant_cell_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/plant_flower.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/plant_flower.9.png new file mode 100644 index 00000000..984fd101 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/plant_flower.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/plant_flower_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/plant_flower_unlabel.9.png new file mode 100644 index 00000000..faa8b50c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/plant_flower_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/plants.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/plants.9.png new file mode 100644 index 00000000..3a0d9258 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/plants.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/prism.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/prism.9.png new file mode 100644 index 00000000..179db8de Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/prism.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/prism_label.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/prism_label.9.png new file mode 100644 index 00000000..472f5264 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/prism_label.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/prism_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/prism_unlabel.9.png new file mode 100644 index 00000000..5b319615 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/prism_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/proceed_btn.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/proceed_btn.png new file mode 100644 index 00000000..2b037db8 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/proceed_btn.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/rate.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/rate.png new file mode 100644 index 00000000..309fa531 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/rate.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/science.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/science.9.png new file mode 100644 index 00000000..c6cfc4cf Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/science.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/score_board.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/score_board.9.png new file mode 100644 index 00000000..3c11dd29 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/score_board.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/settings.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/settings.9.png new file mode 100644 index 00000000..6b324055 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/settings.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/seven.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/seven.9.png new file mode 100644 index 00000000..fd528d8c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/seven.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/shadow_card.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/shadow_card.png new file mode 100644 index 00000000..7371bade Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/shadow_card.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/six.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/six.9.png new file mode 100644 index 00000000..e44e489a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/six.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/sky_icon.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/sky_icon.9.png new file mode 100644 index 00000000..78a18de2 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/sky_icon.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/solar_system.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/solar_system.9.png new file mode 100644 index 00000000..4922112e Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/solar_system.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/solar_system_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/solar_system_unlabel.9.png new file mode 100644 index 00000000..ba013abd Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/solar_system_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/sound.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/sound.png new file mode 100644 index 00000000..0e0bc3e1 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/sound.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/spalsh.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/spalsh.9.png new file mode 100644 index 00000000..60b46306 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/spalsh.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/spectrum.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/spectrum.9.png new file mode 100644 index 00000000..7e05754b Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/spectrum.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/spectrum_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/spectrum_unlabel.9.png new file mode 100644 index 00000000..026225c3 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/spectrum_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/splash2.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/splash2.png new file mode 100644 index 00000000..4e2996cd Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/splash2.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/splash3.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/splash3.png new file mode 100644 index 00000000..5dfd1f64 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/splash3.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/stars.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/stars.9.png new file mode 100644 index 00000000..11736174 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/stars.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/stars_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/stars_unlabel.9.png new file mode 100644 index 00000000..91a28a93 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/stars_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/streak.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/streak.9.png new file mode 100644 index 00000000..dbdd7d81 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/streak.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/ten.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/ten.9.png new file mode 100644 index 00000000..c2b37081 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/ten.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/three.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/three.9.png new file mode 100644 index 00000000..b0c0402a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/three.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/trans_inner_holder.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/trans_inner_holder.9.png new file mode 100644 index 00000000..bfb1145f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/trans_inner_holder.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/two.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/two.9.png new file mode 100644 index 00000000..c4d9f23b Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/two.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/update.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/update.png new file mode 100644 index 00000000..a2934479 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/update.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/view_btn.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/view_btn.png new file mode 100644 index 00000000..3a2b0b57 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/view_btn.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/virus.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/virus.9.png new file mode 100644 index 00000000..80eef115 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/virus.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/virus_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/virus_unlabel.9.png new file mode 100644 index 00000000..236d0fd7 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-mdpi/virus_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/animals_icon.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/animals_icon.9.png new file mode 100644 index 00000000..da87b024 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/animals_icon.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/bacteria.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/bacteria.9.png new file mode 100644 index 00000000..794d5d23 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/bacteria.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/bacteria_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/bacteria_unlabel.9.png new file mode 100644 index 00000000..1f7a0420 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/bacteria_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/bio.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/bio.9.png new file mode 100644 index 00000000..6377ad96 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/bio.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/carbon_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/carbon_cycle.9.png new file mode 100644 index 00000000..47506ec6 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/carbon_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/carbon_cycle_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/carbon_cycle_unlabel.9.png new file mode 100644 index 00000000..f389a687 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/carbon_cycle_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/champion.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/champion.9.png new file mode 100644 index 00000000..5c28746f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/champion.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/circuit.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/circuit.9.png new file mode 100644 index 00000000..d847771b Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/circuit.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/circuit_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/circuit_unlabel.9.png new file mode 100644 index 00000000..efda402f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/circuit_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/close_btn.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/close_btn.9.png new file mode 100644 index 00000000..a5bdbf1b Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/close_btn.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/correct_btn.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/correct_btn.9.png new file mode 100644 index 00000000..d87cd69a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/correct_btn.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/diagrams.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/diagrams.9.png new file mode 100644 index 00000000..c59cb6f1 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/diagrams.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/diagrams1.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/diagrams1.9.png new file mode 100644 index 00000000..3fb4aa47 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/diagrams1.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/dry_cell.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/dry_cell.9.png new file mode 100644 index 00000000..52ad59b2 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/dry_cell.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/dry_cell_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/dry_cell_unlabel.9.png new file mode 100644 index 00000000..7a9ffb1b Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/dry_cell_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/eight.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/eight.9.png new file mode 100644 index 00000000..7fd11c37 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/eight.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/electricity_icon.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/electricity_icon.9.png new file mode 100644 index 00000000..2952c2bf Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/electricity_icon.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/five.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/five.9.png new file mode 100644 index 00000000..30a454ea Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/five.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/flame_badge.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/flame_badge.9.png new file mode 100644 index 00000000..44662463 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/flame_badge.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/four.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/four.9.png new file mode 100644 index 00000000..a16cd1e2 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/four.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/heading.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/heading.png new file mode 100644 index 00000000..e4872bdf Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/heading.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help.9.png new file mode 100644 index 00000000..2f10a6a4 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_1.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_1.9.png new file mode 100644 index 00000000..742b0f67 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_1.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_10.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_10.9.png new file mode 100644 index 00000000..d878bedb Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_10.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_2.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_2.9.png new file mode 100644 index 00000000..cb87fa86 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_2.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_3.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_3.9.png new file mode 100644 index 00000000..fb588d16 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_3.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_4.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_4.9.png new file mode 100644 index 00000000..97b3dae2 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_4.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_5.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_5.9.png new file mode 100644 index 00000000..c739ea9f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_5.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_6.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_6.9.png new file mode 100644 index 00000000..74e6b764 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_6.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_7.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_7.9.png new file mode 100644 index 00000000..8fad400d Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_7.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_8.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_8.9.png new file mode 100644 index 00000000..ba97aeba Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_8.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_9.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_9.9.png new file mode 100644 index 00000000..ddef6f99 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/help_9.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/holder.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/holder.9.png new file mode 100644 index 00000000..ddcfc1b3 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/holder.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/human_ear.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/human_ear.9.png new file mode 100644 index 00000000..ffc0e00f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/human_ear.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/human_eye.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/human_eye.9.png new file mode 100644 index 00000000..39fbdecb Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/human_eye.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/human_eye_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/human_eye_unlabel.9.png new file mode 100644 index 00000000..683cc882 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/human_eye_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/human_heart1.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/human_heart1.9.png new file mode 100644 index 00000000..a53f7c07 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/human_heart1.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/human_heart_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/human_heart_unlabel.9.png new file mode 100644 index 00000000..a2037341 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/human_heart_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/humanear.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/humanear.9.png new file mode 100644 index 00000000..e49be73e Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/humanear.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/humanearunlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/humanearunlabel.9.png new file mode 100644 index 00000000..01bf0773 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/humanearunlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/hydrolic_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/hydrolic_cycle.9.png new file mode 100644 index 00000000..8a48b2c9 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/hydrolic_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/ic_done_white.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/ic_done_white.png new file mode 100644 index 00000000..0ebb5555 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/ic_done_white.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/ic_launcher.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 00000000..c00774a7 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/ic_launcher.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/ic_warning_white.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/ic_warning_white.png new file mode 100644 index 00000000..8683a2ea Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/ic_warning_white.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_bacteria.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_bacteria.9.png new file mode 100644 index 00000000..0d7a9b1c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_bacteria.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_circuit.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_circuit.9.png new file mode 100644 index 00000000..ae9d74a8 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_circuit.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_corban_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_corban_cycle.9.png new file mode 100644 index 00000000..4936cb37 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_corban_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_drycell.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_drycell.9.png new file mode 100644 index 00000000..09f846a0 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_drycell.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_ear.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_ear.9.png new file mode 100644 index 00000000..ee4de236 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_ear.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_electric_motor.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_electric_motor.9.png new file mode 100644 index 00000000..0a77f917 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_electric_motor.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_eye.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_eye.9.png new file mode 100644 index 00000000..b7d0708b Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_eye.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_flower.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_flower.9.png new file mode 100644 index 00000000..c98e0bf8 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_flower.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_heart.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_heart.9.png new file mode 100644 index 00000000..b919b34b Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_heart.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_lens.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_lens.9.png new file mode 100644 index 00000000..404536bd Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_lens.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_plant_cell.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_plant_cell.9.png new file mode 100644 index 00000000..541c1517 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_plant_cell.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_prism.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_prism.9.png new file mode 100644 index 00000000..0d6d1ed7 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_prism.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_solar_system.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_solar_system.9.png new file mode 100644 index 00000000..d9ad72bd Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_solar_system.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_spectrum.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_spectrum.9.png new file mode 100644 index 00000000..2e217700 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_spectrum.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_stars_pattern.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_stars_pattern.9.png new file mode 100644 index 00000000..3d44c9b1 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_stars_pattern.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_virus.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_virus.9.png new file mode 100644 index 00000000..2900412a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_virus.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_water_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_water_cycle.9.png new file mode 100644 index 00000000..a9fc2d28 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/icon_water_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/incorrect_btn.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/incorrect_btn.9.png new file mode 100644 index 00000000..d6dd7868 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/incorrect_btn.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/inner_holder.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/inner_holder.9.png new file mode 100644 index 00000000..c195f214 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/inner_holder.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/lens.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/lens.9.png new file mode 100644 index 00000000..176e6722 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/lens.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/lens_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/lens_unlabel.9.png new file mode 100644 index 00000000..0d4a20e6 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/lens_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/lesson.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/lesson.9.png new file mode 100644 index 00000000..da113ac8 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/lesson.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/logo.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/logo.9.png new file mode 100644 index 00000000..680c4d84 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/logo.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/marker.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/marker.png new file mode 100644 index 00000000..5d316220 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/marker.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/marker_white.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/marker_white.9.png new file mode 100644 index 00000000..c4b81290 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/marker_white.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/medle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/medle.9.png new file mode 100644 index 00000000..a6892158 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/medle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/micro.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/micro.9.png new file mode 100644 index 00000000..32639657 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/micro.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/motor.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/motor.9.png new file mode 100644 index 00000000..bb5bc20e Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/motor.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/motor_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/motor_unlabel.9.png new file mode 100644 index 00000000..102bf44c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/motor_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/natural_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/natural_cycle.9.png new file mode 100644 index 00000000..5acbae8d Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/natural_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/nine.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/nine.9.png new file mode 100644 index 00000000..79c776bc Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/nine.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/notification.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/notification.png new file mode 100644 index 00000000..ea145ead Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/notification.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/one.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/one.9.png new file mode 100644 index 00000000..897266d5 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/one.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/optics_icon.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/optics_icon.9.png new file mode 100644 index 00000000..0469261c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/optics_icon.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/persistence.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/persistence.9.png new file mode 100644 index 00000000..eba93294 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/persistence.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/physics.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/physics.9.png new file mode 100644 index 00000000..91f09b5f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/physics.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/plant_cell.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/plant_cell.9.png new file mode 100644 index 00000000..44f874af Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/plant_cell.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/plant_cell_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/plant_cell_unlabel.9.png new file mode 100644 index 00000000..98827b91 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/plant_cell_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/plant_flower.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/plant_flower.9.png new file mode 100644 index 00000000..5d9b2e6a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/plant_flower.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/plant_flower_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/plant_flower_unlabel.9.png new file mode 100644 index 00000000..44099a12 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/plant_flower_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/plants.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/plants.9.png new file mode 100644 index 00000000..3be6907f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/plants.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/prism.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/prism.9.png new file mode 100644 index 00000000..2a0d9d4c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/prism.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/prism_label.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/prism_label.9.png new file mode 100644 index 00000000..2c94259b Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/prism_label.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/prism_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/prism_unlabel.9.png new file mode 100644 index 00000000..2b9811a0 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/prism_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/proceed_btn.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/proceed_btn.png new file mode 100644 index 00000000..f6ef84d5 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/proceed_btn.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/rate.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/rate.png new file mode 100644 index 00000000..a8b0ae6e Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/rate.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/science.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/science.9.png new file mode 100644 index 00000000..7808a2f3 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/science.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/score_board.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/score_board.9.png new file mode 100644 index 00000000..037caa11 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/score_board.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/settings.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/settings.9.png new file mode 100644 index 00000000..d4e3a18a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/settings.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/seven.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/seven.9.png new file mode 100644 index 00000000..5d4c9ad3 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/seven.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/shadow_card.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/shadow_card.png new file mode 100644 index 00000000..bfe8e9e3 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/shadow_card.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/six.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/six.9.png new file mode 100644 index 00000000..d8fb4dba Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/six.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/sky_icon.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/sky_icon.9.png new file mode 100644 index 00000000..552cf827 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/sky_icon.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/solar_system.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/solar_system.9.png new file mode 100644 index 00000000..e3f9bdbc Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/solar_system.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/solar_system_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/solar_system_unlabel.9.png new file mode 100644 index 00000000..d07d7f6f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/solar_system_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/sound.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/sound.png new file mode 100644 index 00000000..540ff428 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/sound.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/spalsh.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/spalsh.9.png new file mode 100644 index 00000000..0ffc0d61 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/spalsh.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/spectrum.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/spectrum.9.png new file mode 100644 index 00000000..0c5f7cb7 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/spectrum.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/spectrum_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/spectrum_unlabel.9.png new file mode 100644 index 00000000..a47c108a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/spectrum_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/splash2.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/splash2.png new file mode 100644 index 00000000..cfdfff2a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/splash2.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/splash3.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/splash3.png new file mode 100644 index 00000000..bc8d97e2 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/splash3.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/star_empty.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/star_empty.png new file mode 100644 index 00000000..c9882973 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/star_empty.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/star_filled.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/star_filled.png new file mode 100644 index 00000000..d751852b Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/star_filled.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/stars.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/stars.9.png new file mode 100644 index 00000000..a32f3af3 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/stars.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/stars_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/stars_unlabel.9.png new file mode 100644 index 00000000..3fd6f433 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/stars_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/streak.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/streak.9.png new file mode 100644 index 00000000..50fbe6f0 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/streak.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/ten.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/ten.9.png new file mode 100644 index 00000000..ee9a74a2 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/ten.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/three.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/three.9.png new file mode 100644 index 00000000..7834c942 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/three.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/trans_inner_holder.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/trans_inner_holder.9.png new file mode 100644 index 00000000..14630745 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/trans_inner_holder.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/two.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/two.9.png new file mode 100644 index 00000000..2177a1fc Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/two.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/update.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/update.png new file mode 100644 index 00000000..e0768cf5 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/update.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/view_btn.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/view_btn.png new file mode 100644 index 00000000..5d041f28 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/view_btn.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/virus.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/virus.9.png new file mode 100644 index 00000000..a2b64aa3 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/virus.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/virus_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/virus_unlabel.9.png new file mode 100644 index 00000000..2e02d318 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xhdpi/virus_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/animals_icon.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/animals_icon.9.png new file mode 100644 index 00000000..80470393 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/animals_icon.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/bacteria.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/bacteria.9.png new file mode 100644 index 00000000..df00fd5d Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/bacteria.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/bacteria_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/bacteria_unlabel.9.png new file mode 100644 index 00000000..125dd2a5 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/bacteria_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/bio.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/bio.9.png new file mode 100644 index 00000000..c21026fd Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/bio.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/carbon_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/carbon_cycle.9.png new file mode 100644 index 00000000..54304fda Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/carbon_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/carbon_cycle_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/carbon_cycle_unlabel.9.png new file mode 100644 index 00000000..8524b53f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/carbon_cycle_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/champion.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/champion.9.png new file mode 100644 index 00000000..3a932316 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/champion.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/circuit.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/circuit.9.png new file mode 100644 index 00000000..822e4769 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/circuit.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/circuit_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/circuit_unlabel.9.png new file mode 100644 index 00000000..5410cd2c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/circuit_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/close_btn.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/close_btn.9.png new file mode 100644 index 00000000..0650401a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/close_btn.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/correct_btn.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/correct_btn.9.png new file mode 100644 index 00000000..6c2fd094 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/correct_btn.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/diagrams.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/diagrams.9.png new file mode 100644 index 00000000..c59cb6f1 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/diagrams.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/diagrams1.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/diagrams1.9.png new file mode 100644 index 00000000..c59cb6f1 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/diagrams1.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/dry_cell.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/dry_cell.9.png new file mode 100644 index 00000000..01d383de Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/dry_cell.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/dry_cell_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/dry_cell_unlabel.9.png new file mode 100644 index 00000000..feaa4740 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/dry_cell_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/eight.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/eight.9.png new file mode 100644 index 00000000..2501eca6 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/eight.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/electricity_icon.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/electricity_icon.9.png new file mode 100644 index 00000000..8600a1f5 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/electricity_icon.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/five.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/five.9.png new file mode 100644 index 00000000..ed9c8cda Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/five.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/flame_badge.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/flame_badge.9.png new file mode 100644 index 00000000..eda7a3b2 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/flame_badge.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/four.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/four.9.png new file mode 100644 index 00000000..737a950f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/four.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help.9.png new file mode 100644 index 00000000..fd28d4a1 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_1.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_1.9.png new file mode 100644 index 00000000..8fb46403 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_1.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_10.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_10.9.png new file mode 100644 index 00000000..63ec2e79 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_10.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_2.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_2.9.png new file mode 100644 index 00000000..82e19d39 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_2.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_3.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_3.9.png new file mode 100644 index 00000000..0bd7d1a3 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_3.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_4.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_4.9.png new file mode 100644 index 00000000..9278ee7a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_4.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_5.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_5.9.png new file mode 100644 index 00000000..2fa09174 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_5.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_6.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_6.9.png new file mode 100644 index 00000000..22e2bf77 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_6.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_7.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_7.9.png new file mode 100644 index 00000000..94cd0a6a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_7.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_8.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_8.9.png new file mode 100644 index 00000000..c15df6dd Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_8.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_9.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_9.9.png new file mode 100644 index 00000000..fad73a27 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/help_9.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/holder.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/holder.9.png new file mode 100644 index 00000000..9ffa394d Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/holder.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/human_body.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/human_body.9.png new file mode 100644 index 00000000..1177ee41 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/human_body.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/human_ear.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/human_ear.9.png new file mode 100644 index 00000000..ffc0e00f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/human_ear.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/human_eye.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/human_eye.9.png new file mode 100644 index 00000000..8bfb7d54 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/human_eye.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/human_eye_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/human_eye_unlabel.9.png new file mode 100644 index 00000000..3c7c7966 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/human_eye_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/human_heart1.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/human_heart1.9.png new file mode 100644 index 00000000..a8ca6382 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/human_heart1.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/human_heart_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/human_heart_unlabel.9.png new file mode 100644 index 00000000..673d7f04 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/human_heart_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/humanear.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/humanear.9.png new file mode 100644 index 00000000..32bb7faf Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/humanear.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/humanearunlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/humanearunlabel.9.png new file mode 100644 index 00000000..ee48049c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/humanearunlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/hydrolic_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/hydrolic_cycle.9.png new file mode 100644 index 00000000..8a48b2c9 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/hydrolic_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/hydrolic_cycle_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/hydrolic_cycle_unlabel.9.png new file mode 100644 index 00000000..2791e802 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/hydrolic_cycle_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/ic_done_white.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/ic_done_white.png new file mode 100644 index 00000000..200dc733 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/ic_done_white.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/ic_launcher.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..2093a982 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/ic_launcher.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/ic_warning_white.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/ic_warning_white.png new file mode 100644 index 00000000..88c22324 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/ic_warning_white.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_bacteria.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_bacteria.9.png new file mode 100644 index 00000000..4b869907 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_bacteria.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_circuit.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_circuit.9.png new file mode 100644 index 00000000..4b167b77 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_circuit.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_corban_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_corban_cycle.9.png new file mode 100644 index 00000000..015918d6 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_corban_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_drycell.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_drycell.9.png new file mode 100644 index 00000000..8b44570a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_drycell.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_ear.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_ear.9.png new file mode 100644 index 00000000..9fe6050e Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_ear.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_electric_motor.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_electric_motor.9.png new file mode 100644 index 00000000..b15dbe67 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_electric_motor.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_eye.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_eye.9.png new file mode 100644 index 00000000..bb3777a4 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_eye.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_flower.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_flower.9.png new file mode 100644 index 00000000..3558ea05 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_flower.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_heart.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_heart.9.png new file mode 100644 index 00000000..34deb67d Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_heart.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_lens.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_lens.9.png new file mode 100644 index 00000000..f159b7db Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_lens.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_plant_cell.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_plant_cell.9.png new file mode 100644 index 00000000..5e810a23 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_plant_cell.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_prism.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_prism.9.png new file mode 100644 index 00000000..742e6e94 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_prism.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_solar_system.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_solar_system.9.png new file mode 100644 index 00000000..19eb33db Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_solar_system.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_spectrum.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_spectrum.9.png new file mode 100644 index 00000000..75c46024 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_spectrum.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_stars_pattern.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_stars_pattern.9.png new file mode 100644 index 00000000..17ecffef Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_stars_pattern.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_virus.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_virus.9.png new file mode 100644 index 00000000..9cfd4c08 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_virus.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_water_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_water_cycle.9.png new file mode 100644 index 00000000..2040225e Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/icon_water_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/incorrect_btn.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/incorrect_btn.9.png new file mode 100644 index 00000000..de9c69a5 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/incorrect_btn.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/inner_holder.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/inner_holder.9.png new file mode 100644 index 00000000..c005d8bf Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/inner_holder.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/lens.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/lens.9.png new file mode 100644 index 00000000..760bb71c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/lens.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/lens_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/lens_unlabel.9.png new file mode 100644 index 00000000..c352e9c7 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/lens_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/lesson.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/lesson.9.png new file mode 100644 index 00000000..7427f273 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/lesson.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/lesson_eye.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/lesson_eye.xml new file mode 100644 index 00000000..4b5572b8 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/lesson_eye.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/logo.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/logo.9.png new file mode 100644 index 00000000..b13d901b Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/logo.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/marker.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/marker.png new file mode 100644 index 00000000..147e0bb2 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/marker.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/marker_white.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/marker_white.9.png new file mode 100644 index 00000000..04b8d72a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/marker_white.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/medle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/medle.9.png new file mode 100644 index 00000000..6553fa92 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/medle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/micro.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/micro.9.png new file mode 100644 index 00000000..ac349461 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/micro.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/motor.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/motor.9.png new file mode 100644 index 00000000..be5ae10c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/motor.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/motor_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/motor_unlabel.9.png new file mode 100644 index 00000000..f1aeb146 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/motor_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/natural_cycle.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/natural_cycle.9.png new file mode 100644 index 00000000..a36903d9 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/natural_cycle.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/nine.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/nine.9.png new file mode 100644 index 00000000..15302823 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/nine.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/notification.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/notification.png new file mode 100644 index 00000000..1faebb30 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/notification.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/one.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/one.9.png new file mode 100644 index 00000000..d77b27b0 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/one.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/optics_icon.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/optics_icon.9.png new file mode 100644 index 00000000..9842c38f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/optics_icon.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/persistence.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/persistence.9.png new file mode 100644 index 00000000..521eb1af Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/persistence.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/physics.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/physics.9.png new file mode 100644 index 00000000..5e1e7123 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/physics.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/plant_cell.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/plant_cell.9.png new file mode 100644 index 00000000..7dce0a35 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/plant_cell.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/plant_cell_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/plant_cell_unlabel.9.png new file mode 100644 index 00000000..2e04bd40 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/plant_cell_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/plant_flower.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/plant_flower.9.png new file mode 100644 index 00000000..0b0b94f0 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/plant_flower.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/plant_flower_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/plant_flower_unlabel.9.png new file mode 100644 index 00000000..3d9dee47 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/plant_flower_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/plants.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/plants.9.png new file mode 100644 index 00000000..53f7857c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/plants.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/prism.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/prism.9.png new file mode 100644 index 00000000..c7dd143d Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/prism.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/prism_label.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/prism_label.9.png new file mode 100644 index 00000000..a4ce6b63 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/prism_label.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/prism_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/prism_unlabel.9.png new file mode 100644 index 00000000..075c9ce1 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/prism_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/proceed_btn.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/proceed_btn.png new file mode 100644 index 00000000..36f44d3c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/proceed_btn.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/rate.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/rate.png new file mode 100644 index 00000000..eb963c54 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/rate.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/science.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/science.9.png new file mode 100644 index 00000000..58ded99f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/science.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/score_board.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/score_board.9.png new file mode 100644 index 00000000..b162318a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/score_board.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/settings.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/settings.9.png new file mode 100644 index 00000000..159c6f47 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/settings.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/seven.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/seven.9.png new file mode 100644 index 00000000..b89cd010 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/seven.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/six.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/six.9.png new file mode 100644 index 00000000..1fa9eaae Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/six.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/sky_icon.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/sky_icon.9.png new file mode 100644 index 00000000..4c376819 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/sky_icon.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/solar_system.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/solar_system.9.png new file mode 100644 index 00000000..82b5721a Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/solar_system.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/solar_system_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/solar_system_unlabel.9.png new file mode 100644 index 00000000..c9fcd625 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/solar_system_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/sound.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/sound.png new file mode 100644 index 00000000..faa44e61 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/sound.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/spalsh.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/spalsh.9.png new file mode 100644 index 00000000..f42b83aa Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/spalsh.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/spectrum.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/spectrum.9.png new file mode 100644 index 00000000..606c2cb4 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/spectrum.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/spectrum_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/spectrum_unlabel.9.png new file mode 100644 index 00000000..613deef8 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/spectrum_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/splash2.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/splash2.png new file mode 100644 index 00000000..78a7af51 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/splash2.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/splash3.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/splash3.png new file mode 100644 index 00000000..6d76d6c0 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/splash3.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/stars.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/stars.9.png new file mode 100644 index 00000000..c02a0ab4 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/stars.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/stars_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/stars_unlabel.9.png new file mode 100644 index 00000000..12ad3af3 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/stars_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/streak.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/streak.9.png new file mode 100644 index 00000000..b37c7185 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/streak.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/ten.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/ten.9.png new file mode 100644 index 00000000..d90c012e Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/ten.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/three.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/three.9.png new file mode 100644 index 00000000..e5921d73 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/three.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/trans_inner_holder.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/trans_inner_holder.9.png new file mode 100644 index 00000000..14630745 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/trans_inner_holder.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/two.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/two.9.png new file mode 100644 index 00000000..aa16c37f Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/two.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/update.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/update.png new file mode 100644 index 00000000..97043f42 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/update.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/view_btn.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/view_btn.png new file mode 100644 index 00000000..39a194f0 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/view_btn.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/virus.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/virus.9.png new file mode 100644 index 00000000..1ea36a00 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/virus.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/virus_unlabel.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/virus_unlabel.9.png new file mode 100644 index 00000000..4740562e Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable-xxhdpi/virus_unlabel.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/badge_tab_indicator.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/badge_tab_indicator.xml new file mode 100644 index 00000000..fe237fdd --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/badge_tab_indicator.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/badge_tab_pressed.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/badge_tab_pressed.xml new file mode 100644 index 00000000..02e28317 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/badge_tab_pressed.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/badge_tab_selected.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/badge_tab_selected.xml new file mode 100644 index 00000000..247a672e --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/badge_tab_selected.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/badge_tab_unselected.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/badge_tab_unselected.xml new file mode 100644 index 00000000..9b550b85 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/badge_tab_unselected.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/border_button.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/border_button.xml new file mode 100644 index 00000000..a6c9ee32 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/border_button.xml @@ -0,0 +1,44 @@ + + + + + + + + + + > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_ratingbar_full.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_ratingbar_full.xml new file mode 100644 index 00000000..edfc84af --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_ratingbar_full.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_textview.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_textview.xml new file mode 100644 index 00000000..520595f8 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_textview.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_textview_correct.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_textview_correct.xml new file mode 100644 index 00000000..82737127 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_textview_correct.xml @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_textview_incorrect.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_textview_incorrect.xml new file mode 100644 index 00000000..4ab1e593 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_textview_incorrect.xml @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_textview_large.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_textview_large.xml new file mode 100644 index 00000000..0252bb4b --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_textview_large.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_textview_result.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_textview_result.xml new file mode 100644 index 00000000..dd746947 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_textview_result.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_textview_scoreboard.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_textview_scoreboard.xml new file mode 100644 index 00000000..a4e6dac8 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/custom_textview_scoreboard.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/diagram_shadow.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/diagram_shadow.xml new file mode 100644 index 00000000..1991f837 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/diagram_shadow.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/layout_bg.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/layout_bg.xml new file mode 100644 index 00000000..b0ecfdf6 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/layout_bg.xml @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/layout_bg_bottom.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/layout_bg_bottom.xml new file mode 100644 index 00000000..42955634 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/layout_bg_bottom.xml @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow.9.png new file mode 100644 index 00000000..84908ad1 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow_16.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow_16.9.png new file mode 100644 index 00000000..662ae2b5 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow_16.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow_4.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow_4.9.png new file mode 100644 index 00000000..fd45d928 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow_4.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow_on.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow_on.9.png new file mode 100644 index 00000000..2f851a17 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow_on.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow_small.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow_small.9.png new file mode 100644 index 00000000..996d533c Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow_small.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow_view.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow_view.9.png new file mode 100644 index 00000000..df9fcf87 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow_view.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow_view1.9.png b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow_view1.9.png new file mode 100644 index 00000000..58763a59 Binary files /dev/null and b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/shadow_view1.9.png differ diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/tab_indicator.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/tab_indicator.xml new file mode 100644 index 00000000..e4e66c5d --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/tab_indicator.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/tab_pressed.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/tab_pressed.xml new file mode 100644 index 00000000..02e28317 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/tab_pressed.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/tab_selected.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/tab_selected.xml new file mode 100644 index 00000000..e1d17323 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/tab_selected.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/tab_unselected.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/tab_unselected.xml new file mode 100644 index 00000000..a22d8960 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/tab_unselected.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/tooltip_background.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/tooltip_background.xml new file mode 100644 index 00000000..46aa7784 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/drawable/tooltip_background.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/layout-large/bacteria_view.xml b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/layout-large/bacteria_view.xml new file mode 100644 index 00000000..7f291f61 --- /dev/null +++ b/Practice Handwriting/source-code/LabeltheDiagram/labeltheDiagram/src/main/res/layout-large/bacteria_view.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + +