From 28a34e31efa2637ccdc17b145c2231edd5601439 Mon Sep 17 00:00:00 2001 From: dt170 Date: Mon, 29 Feb 2016 22:35:25 +0200 Subject: [PATCH] Aware Android application to locate places of interest the user - by location . using google places API. --- .gitignore | 8 + .idea/.name | 1 + .idea/compiler.xml | 22 + .idea/copyright/profiles_settings.xml | 3 + .idea/encodings.xml | 6 + .idea/gradle.xml | 19 + .idea/misc.xml | 46 ++ .idea/modules.xml | 9 + .idea/runConfigurations.xml | 12 + .idea/vcs.xml | 6 + app/.gitignore | 1 + app/build.gradle | 32 + app/proguard-rules.pro | 17 + .../java/com/dt/project/ApplicationTest.java | 13 + app/src/main/AndroidManifest.xml | 46 ++ .../AsyncTasks/AutoCompleteAsyncTask.java | 83 +++ .../AsyncTasks/DownloadImageAsyncTask.java | 39 ++ .../AsyncTasks/InfoOnPlaceAsyncTask.java | 90 +++ .../AsyncTasks/SearchByTextAsyncTask.java | 88 +++ .../AsyncTasks/SearchNearYouAsyncTask.java | 89 +++ .../CircleTransform.java | 44 ++ .../com/dt/project/DataBase/BaseLogic.java | 26 + .../java/com/dt/project/DataBase/DAL.java | 62 ++ .../main/java/com/dt/project/DataBase/DB.java | 87 +++ .../project/DataBase/FavoritePlaceLogic.java | 111 +++ .../com/dt/project/DataBase/PlaceLogic.java | 102 +++ .../project/FavoritePlace/FavoriteHolder.java | 204 ++++++ .../project/FavoritePlace/FavoritePlace.java | 13 + .../FavoritePlace/FavoritePlaceAdapter.java | 56 ++ app/src/main/java/com/dt/project/Helper.java | 232 +++++++ .../java/com/dt/project/MainActivity.java | 643 ++++++++++++++++++ .../dt/project/Phone/InfoPlaceActivity.java | 264 +++++++ .../Phone/MapAndInfoPhoneActivity.java | 125 ++++ .../main/java/com/dt/project/Place/Place.java | 154 +++++ .../com/dt/project/Place/PlaceAdapter.java | 48 ++ .../com/dt/project/Place/PlaceHolder.java | 162 +++++ .../dt/project/Receiver/PhoneReceiver.java | 27 + .../com/dt/project/Tablet/MapFragment.java | 173 +++++ .../dt/project/Tablet/TabletPlaceInfo.java | 162 +++++ .../project/ViewPager/ViewPagerAdapter.java | 70 ++ .../ViewPager/ZoomOutPageTransformer.java | 43 ++ .../main/java/layout/FavoriteFragment.java | 57 ++ app/src/main/java/layout/ResultFragment.java | 115 ++++ app/src/main/java/layout/SearchFragment.java | 61 ++ app/src/main/res/chrome.png | Bin 0 -> 6068 bytes .../ic_account_balance_black_48dp.png | Bin 0 -> 290 bytes .../drawable-hdpi/ic_alarm_on_black_48dp.png | Bin 0 -> 1179 bytes .../ic_arrow_back_black_48dp.png | Bin 0 -> 194 bytes .../drawable-hdpi/ic_delete_black_48dp.png | Bin 0 -> 191 bytes .../drawable-hdpi/ic_drive_eta_black_48dp.png | Bin 0 -> 469 bytes .../ic_favorite_border_black_48dp.png | Bin 0 -> 981 bytes .../ic_fitness_center_black_48dp.png | Bin 0 -> 483 bytes .../res/drawable-hdpi/ic_grade_black_48dp.png | Bin 0 -> 668 bytes .../res/drawable-hdpi/ic_home_black_48dp.png | Bin 0 -> 303 bytes .../ic_info_outline_black_48dp.png | Bin 0 -> 940 bytes .../drawable-hdpi/ic_language_black_48dp.png | Bin 0 -> 1166 bytes .../ic_local_airport_black_48dp.png | Bin 0 -> 461 bytes .../drawable-hdpi/ic_local_atm_black_48dp.png | Bin 0 -> 301 bytes .../drawable-hdpi/ic_local_bar_black_48dp.png | Bin 0 -> 348 bytes .../ic_local_cafe_black_48dp.png | Bin 0 -> 283 bytes .../ic_local_gas_station_black_48dp.png | Bin 0 -> 504 bytes .../ic_local_hospital_black_48dp.png | Bin 0 -> 241 bytes .../ic_local_movies_black_48dp.png | Bin 0 -> 120 bytes .../res/drawable-hdpi/ic_phone_black_48dp.png | Bin 0 -> 574 bytes .../ic_restaurant_menu_black_48dp.png | Bin 0 -> 692 bytes .../res/drawable-hdpi/ic_share_black_48dp.png | Bin 0 -> 675 bytes .../ic_shopping_cart_black_48dp.png | Bin 0 -> 519 bytes .../res/drawable-hdpi/ic_spa_black_48dp.png | Bin 0 -> 767 bytes .../drawable-hdpi/ic_star_rate_black_18dp.png | Bin 0 -> 255 bytes app/src/main/res/drawable-hdpi/map.png | Bin 0 -> 3886 bytes .../ic_arrow_back_black_48dp.png | Bin 0 -> 197 bytes .../ic_arrow_back_black_48dp.png | Bin 0 -> 140 bytes .../ic_arrow_back_black_48dp.png | Bin 0 -> 201 bytes .../ic_arrow_back_black_48dp.png | Bin 0 -> 290 bytes .../drawable-hdpi/ic_share_black_48dp.png | Bin 0 -> 675 bytes .../drawable-mdpi/ic_share_black_48dp.png | Bin 0 -> 483 bytes .../drawable-xhdpi/ic_share_black_48dp.png | Bin 0 -> 888 bytes .../drawable-xxhdpi/ic_share_black_48dp.png | Bin 0 -> 1249 bytes .../drawable-xxxhdpi/ic_share_black_48dp.png | Bin 0 -> 1818 bytes .../ic_arrow_back_black_48dp.png | Bin 0 -> 343 bytes .../ic_account_balance_black_48dp.png | Bin 0 -> 235 bytes .../drawable-mdpi/ic_alarm_on_black_48dp.png | Bin 0 -> 801 bytes .../ic_arrow_back_black_48dp.png | Bin 0 -> 134 bytes .../drawable-mdpi/ic_delete_black_48dp.png | Bin 0 -> 148 bytes .../drawable-mdpi/ic_drive_eta_black_48dp.png | Bin 0 -> 331 bytes .../ic_favorite_border_black_48dp.png | Bin 0 -> 673 bytes .../ic_fitness_center_black_48dp.png | Bin 0 -> 375 bytes .../res/drawable-mdpi/ic_grade_black_48dp.png | Bin 0 -> 474 bytes .../res/drawable-mdpi/ic_home_black_48dp.png | Bin 0 -> 239 bytes .../ic_info_outline_black_48dp.png | Bin 0 -> 640 bytes .../drawable-mdpi/ic_language_black_48dp.png | Bin 0 -> 776 bytes .../ic_local_airport_black_48dp.png | Bin 0 -> 357 bytes .../drawable-mdpi/ic_local_atm_black_48dp.png | Bin 0 -> 227 bytes .../drawable-mdpi/ic_local_bar_black_48dp.png | Bin 0 -> 265 bytes .../ic_local_cafe_black_48dp.png | Bin 0 -> 215 bytes .../ic_local_gas_station_black_48dp.png | Bin 0 -> 305 bytes .../ic_local_hospital_black_48dp.png | Bin 0 -> 184 bytes .../ic_local_movies_black_48dp.png | Bin 0 -> 114 bytes .../res/drawable-mdpi/ic_phone_black_48dp.png | Bin 0 -> 408 bytes .../ic_restaurant_menu_black_48dp.png | Bin 0 -> 471 bytes .../res/drawable-mdpi/ic_share_black_48dp.png | Bin 0 -> 483 bytes .../ic_shopping_cart_black_48dp.png | Bin 0 -> 375 bytes .../res/drawable-mdpi/ic_spa_black_48dp.png | Bin 0 -> 532 bytes .../drawable-mdpi/ic_star_rate_black_18dp.png | Bin 0 -> 175 bytes app/src/main/res/drawable-mdpi/map.png | Bin 0 -> 2221 bytes .../ic_account_balance_black_48dp.png | Bin 0 -> 338 bytes .../drawable-xhdpi/ic_alarm_on_black_48dp.png | Bin 0 -> 1602 bytes .../ic_arrow_back_black_48dp.png | Bin 0 -> 199 bytes .../drawable-xhdpi/ic_delete_black_48dp.png | Bin 0 -> 237 bytes .../ic_drive_eta_black_48dp.png | Bin 0 -> 591 bytes .../ic_favorite_border_black_48dp.png | Bin 0 -> 1286 bytes .../ic_fitness_center_black_48dp.png | Bin 0 -> 623 bytes .../drawable-xhdpi/ic_grade_black_48dp.png | Bin 0 -> 881 bytes .../res/drawable-xhdpi/ic_home_black_48dp.png | Bin 0 -> 356 bytes .../ic_info_outline_black_48dp.png | Bin 0 -> 1256 bytes .../drawable-xhdpi/ic_language_black_48dp.png | Bin 0 -> 1530 bytes .../ic_local_airport_black_48dp.png | Bin 0 -> 545 bytes .../ic_local_atm_black_48dp.png | Bin 0 -> 384 bytes .../ic_local_bar_black_48dp.png | Bin 0 -> 431 bytes .../ic_local_cafe_black_48dp.png | Bin 0 -> 362 bytes .../ic_local_gas_station_black_48dp.png | Bin 0 -> 554 bytes .../ic_local_hospital_black_48dp.png | Bin 0 -> 309 bytes .../ic_local_movies_black_48dp.png | Bin 0 -> 121 bytes .../drawable-xhdpi/ic_phone_black_48dp.png | Bin 0 -> 758 bytes .../ic_restaurant_menu_black_48dp.png | Bin 0 -> 801 bytes .../drawable-xhdpi/ic_share_black_48dp.png | Bin 0 -> 888 bytes .../ic_shopping_cart_black_48dp.png | Bin 0 -> 672 bytes .../res/drawable-xhdpi/ic_spa_black_48dp.png | Bin 0 -> 1008 bytes .../ic_star_rate_black_18dp.png | Bin 0 -> 303 bytes app/src/main/res/drawable-xhdpi/map.png | Bin 0 -> 6501 bytes .../ic_account_balance_black_48dp.png | Bin 0 -> 459 bytes .../ic_alarm_on_black_48dp.png | Bin 0 -> 2382 bytes .../ic_arrow_back_black_48dp.png | Bin 0 -> 286 bytes .../drawable-xxhdpi/ic_delete_black_48dp.png | Bin 0 -> 348 bytes .../ic_drive_eta_black_48dp.png | Bin 0 -> 892 bytes .../ic_favorite_border_black_48dp.png | Bin 0 -> 1913 bytes .../ic_fitness_center_black_48dp.png | Bin 0 -> 821 bytes .../drawable-xxhdpi/ic_grade_black_48dp.png | Bin 0 -> 1318 bytes .../drawable-xxhdpi/ic_home_black_48dp.png | Bin 0 -> 485 bytes .../ic_info_outline_black_48dp.png | Bin 0 -> 1945 bytes .../ic_language_black_48dp.png | Bin 0 -> 2346 bytes .../ic_local_airport_black_48dp.png | Bin 0 -> 743 bytes .../ic_local_atm_black_48dp.png | Bin 0 -> 571 bytes .../ic_local_bar_black_48dp.png | Bin 0 -> 602 bytes .../ic_local_cafe_black_48dp.png | Bin 0 -> 542 bytes .../ic_local_gas_station_black_48dp.png | Bin 0 -> 833 bytes .../ic_local_hospital_black_48dp.png | Bin 0 -> 473 bytes .../ic_local_movies_black_48dp.png | Bin 0 -> 137 bytes .../drawable-xxhdpi/ic_phone_black_48dp.png | Bin 0 -> 1099 bytes .../ic_restaurant_menu_black_48dp.png | Bin 0 -> 1144 bytes .../drawable-xxhdpi/ic_share_black_48dp.png | Bin 0 -> 1249 bytes .../ic_shopping_cart_black_48dp.png | Bin 0 -> 986 bytes .../res/drawable-xxhdpi/ic_spa_black_48dp.png | Bin 0 -> 1500 bytes .../ic_star_rate_black_18dp.png | Bin 0 -> 432 bytes app/src/main/res/drawable-xxhdpi/map.png | Bin 0 -> 10746 bytes .../drawable-hdpi/ic_home_black_48dp.png | Bin 0 -> 303 bytes .../drawable-hdpi/nophoto.jpg | Bin 0 -> 43164 bytes .../drawable-mdpi/ic_home_black_48dp.png | Bin 0 -> 239 bytes .../drawable-mdpi/nophoto.jpg | Bin 0 -> 22274 bytes .../drawable-xhdpi/ic_home_black_48dp.png | Bin 0 -> 356 bytes .../drawable-xhdpi/nophoto.jpg | Bin 0 -> 74878 bytes .../drawable-xxhdpi/ic_home_black_48dp.png | Bin 0 -> 485 bytes .../drawable-xxhdpi/nophoto.jpg | Bin 0 -> 253759 bytes .../drawable-xxxhdpi/ic_home_black_48dp.png | Bin 0 -> 589 bytes .../ic_account_balance_black_48dp.png | Bin 0 -> 549 bytes .../ic_alarm_on_black_48dp.png | Bin 0 -> 3108 bytes .../ic_arrow_back_black_48dp.png | Bin 0 -> 344 bytes .../drawable-xxxhdpi/ic_delete_black_48dp.png | Bin 0 -> 498 bytes .../ic_drive_eta_black_48dp.png | Bin 0 -> 1178 bytes .../ic_favorite_border_black_48dp.png | Bin 0 -> 2546 bytes .../ic_fitness_center_black_48dp.png | Bin 0 -> 1124 bytes .../drawable-xxxhdpi/ic_grade_black_48dp.png | Bin 0 -> 1748 bytes .../drawable-xxxhdpi/ic_home_black_48dp.png | Bin 0 -> 589 bytes .../ic_info_outline_black_48dp.png | Bin 0 -> 2557 bytes .../ic_language_black_48dp.png | Bin 0 -> 3119 bytes .../ic_local_airport_black_48dp.png | Bin 0 -> 926 bytes .../ic_local_atm_black_48dp.png | Bin 0 -> 832 bytes .../ic_local_bar_black_48dp.png | Bin 0 -> 715 bytes .../ic_local_cafe_black_48dp.png | Bin 0 -> 723 bytes .../ic_local_gas_station_black_48dp.png | Bin 0 -> 1189 bytes .../ic_local_hospital_black_48dp.png | Bin 0 -> 694 bytes .../ic_local_movies_black_48dp.png | Bin 0 -> 146 bytes .../drawable-xxxhdpi/ic_phone_black_48dp.png | Bin 0 -> 1478 bytes .../ic_restaurant_menu_black_48dp.png | Bin 0 -> 1416 bytes .../drawable-xxxhdpi/ic_share_black_48dp.png | Bin 0 -> 1818 bytes .../ic_shopping_cart_black_48dp.png | Bin 0 -> 1269 bytes .../drawable-xxxhdpi/ic_spa_black_48dp.png | Bin 0 -> 2010 bytes .../ic_star_rate_black_18dp.png | Bin 0 -> 540 bytes .../ic_local_movies_black_48dp.png | Bin 0 -> 120 bytes .../ic_local_movies_black_48dp.png | Bin 0 -> 114 bytes .../ic_local_movies_black_48dp.png | Bin 0 -> 121 bytes .../ic_local_movies_black_48dp.png | Bin 0 -> 137 bytes .../ic_local_movies_black_48dp.png | Bin 0 -> 146 bytes .../main/res/drawable/hyperlink_underline.xml | 12 + app/src/main/res/drawable/map.png | Bin 0 -> 14121 bytes .../res/layout-sw600dp-land/activity_main.xml | 73 ++ .../main/res/layout-sw600dp/activity_main.xml | 71 ++ app/src/main/res/layout/activity_info.xml | 221 ++++++ app/src/main/res/layout/activity_main.xml | 56 ++ .../main/res/layout/activity_map_and_info.xml | 35 + .../res/layout/activity_tablet_place_info.xml | 173 +++++ .../main/res/layout/content_map_and_info.xml | 17 + app/src/main/res/layout/favorite_item.xml | 115 ++++ app/src/main/res/layout/fragment_favorite.xml | 12 + app/src/main/res/layout/fragment_map.xml | 5 + app/src/main/res/layout/fragment_result.xml | 13 + app/src/main/res/layout/fragment_search.xml | 299 ++++++++ app/src/main/res/layout/place_item.xml | 65 ++ app/src/main/res/menu/long_click_menu.xml | 12 + app/src/main/res/menu/menu_main.xml | 23 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4523 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2831 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6344 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9885 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13973 bytes app/src/main/res/values-iw/strings.xml | 45 ++ app/src/main/res/values-v21/styles.xml | 9 + app/src/main/res/values-w820dp/dimens.xml | 6 + app/src/main/res/values/colors.xml | 6 + app/src/main/res/values/dimens.xml | 6 + app/src/main/res/values/strings.xml | 45 ++ app/src/main/res/values/styles.xml | 29 + .../java/com/dt/project/ExampleUnitTest.java | 15 + build.gradle | 23 + gradle.properties | 18 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53637 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 160 +++++ gradlew.bat | 90 +++ settings.gradle | 1 + 230 files changed, 5332 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.name create mode 100644 .idea/compiler.xml create mode 100644 .idea/copyright/profiles_settings.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 .idea/vcs.xml create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/dt/project/ApplicationTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/dt/project/AsyncTasks/AutoCompleteAsyncTask.java create mode 100644 app/src/main/java/com/dt/project/AsyncTasks/DownloadImageAsyncTask.java create mode 100644 app/src/main/java/com/dt/project/AsyncTasks/InfoOnPlaceAsyncTask.java create mode 100644 app/src/main/java/com/dt/project/AsyncTasks/SearchByTextAsyncTask.java create mode 100644 app/src/main/java/com/dt/project/AsyncTasks/SearchNearYouAsyncTask.java create mode 100644 app/src/main/java/com/dt/project/CircleTransformPicasso/CircleTransform.java create mode 100644 app/src/main/java/com/dt/project/DataBase/BaseLogic.java create mode 100644 app/src/main/java/com/dt/project/DataBase/DAL.java create mode 100644 app/src/main/java/com/dt/project/DataBase/DB.java create mode 100644 app/src/main/java/com/dt/project/DataBase/FavoritePlaceLogic.java create mode 100644 app/src/main/java/com/dt/project/DataBase/PlaceLogic.java create mode 100644 app/src/main/java/com/dt/project/FavoritePlace/FavoriteHolder.java create mode 100644 app/src/main/java/com/dt/project/FavoritePlace/FavoritePlace.java create mode 100644 app/src/main/java/com/dt/project/FavoritePlace/FavoritePlaceAdapter.java create mode 100644 app/src/main/java/com/dt/project/Helper.java create mode 100644 app/src/main/java/com/dt/project/MainActivity.java create mode 100644 app/src/main/java/com/dt/project/Phone/InfoPlaceActivity.java create mode 100644 app/src/main/java/com/dt/project/Phone/MapAndInfoPhoneActivity.java create mode 100644 app/src/main/java/com/dt/project/Place/Place.java create mode 100644 app/src/main/java/com/dt/project/Place/PlaceAdapter.java create mode 100644 app/src/main/java/com/dt/project/Place/PlaceHolder.java create mode 100644 app/src/main/java/com/dt/project/Receiver/PhoneReceiver.java create mode 100644 app/src/main/java/com/dt/project/Tablet/MapFragment.java create mode 100644 app/src/main/java/com/dt/project/Tablet/TabletPlaceInfo.java create mode 100644 app/src/main/java/com/dt/project/ViewPager/ViewPagerAdapter.java create mode 100644 app/src/main/java/com/dt/project/ViewPager/ZoomOutPageTransformer.java create mode 100644 app/src/main/java/layout/FavoriteFragment.java create mode 100644 app/src/main/java/layout/ResultFragment.java create mode 100644 app/src/main/java/layout/SearchFragment.java create mode 100644 app/src/main/res/chrome.png create mode 100644 app/src/main/res/drawable-hdpi/ic_account_balance_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_alarm_on_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_arrow_back_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_delete_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_drive_eta_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_favorite_border_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_fitness_center_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_grade_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_home_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_info_outline_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_language_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_local_airport_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_local_atm_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_local_bar_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_local_cafe_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_local_gas_station_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_local_hospital_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_local_movies_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_phone_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_restaurant_menu_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_share_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_shopping_cart_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_spa_black_48dp.png create mode 100644 app/src/main/res/drawable-hdpi/ic_star_rate_black_18dp.png create mode 100644 app/src/main/res/drawable-hdpi/map.png create mode 100644 app/src/main/res/drawable-ldrtl-hdpi/ic_arrow_back_black_48dp.png create mode 100644 app/src/main/res/drawable-ldrtl-mdpi/ic_arrow_back_black_48dp.png create mode 100644 app/src/main/res/drawable-ldrtl-xhdpi/ic_arrow_back_black_48dp.png create mode 100644 app/src/main/res/drawable-ldrtl-xxhdpi/ic_arrow_back_black_48dp.png create mode 100644 app/src/main/res/drawable-ldrtl-xxxhdpi/drawable-hdpi/ic_share_black_48dp.png create mode 100644 app/src/main/res/drawable-ldrtl-xxxhdpi/drawable-mdpi/ic_share_black_48dp.png create mode 100644 app/src/main/res/drawable-ldrtl-xxxhdpi/drawable-xhdpi/ic_share_black_48dp.png create mode 100644 app/src/main/res/drawable-ldrtl-xxxhdpi/drawable-xxhdpi/ic_share_black_48dp.png create mode 100644 app/src/main/res/drawable-ldrtl-xxxhdpi/drawable-xxxhdpi/ic_share_black_48dp.png create mode 100644 app/src/main/res/drawable-ldrtl-xxxhdpi/ic_arrow_back_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_account_balance_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_alarm_on_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_arrow_back_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_delete_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_drive_eta_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_favorite_border_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_fitness_center_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_grade_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_home_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_info_outline_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_language_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_local_airport_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_local_atm_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_local_bar_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_local_cafe_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_local_gas_station_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_local_hospital_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_local_movies_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_phone_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_restaurant_menu_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_share_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_shopping_cart_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_spa_black_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_star_rate_black_18dp.png create mode 100644 app/src/main/res/drawable-mdpi/map.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_account_balance_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_alarm_on_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_arrow_back_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_delete_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_drive_eta_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_favorite_border_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_fitness_center_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_grade_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_home_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_info_outline_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_language_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_local_airport_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_local_atm_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_local_bar_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_local_cafe_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_local_gas_station_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_local_hospital_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_local_movies_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_phone_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_restaurant_menu_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_share_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_shopping_cart_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_spa_black_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_star_rate_black_18dp.png create mode 100644 app/src/main/res/drawable-xhdpi/map.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_account_balance_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_alarm_on_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_arrow_back_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_delete_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_drive_eta_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_favorite_border_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_fitness_center_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_grade_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_home_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_info_outline_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_language_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_local_airport_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_local_atm_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_local_bar_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_local_cafe_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_local_gas_station_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_local_hospital_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_local_movies_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_phone_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_restaurant_menu_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_share_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_shopping_cart_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_spa_black_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_star_rate_black_18dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/map.png create mode 100644 app/src/main/res/drawable-xxxhdpi/drawable-hdpi/ic_home_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/drawable-hdpi/nophoto.jpg create mode 100644 app/src/main/res/drawable-xxxhdpi/drawable-mdpi/ic_home_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/drawable-mdpi/nophoto.jpg create mode 100644 app/src/main/res/drawable-xxxhdpi/drawable-xhdpi/ic_home_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/drawable-xhdpi/nophoto.jpg create mode 100644 app/src/main/res/drawable-xxxhdpi/drawable-xxhdpi/ic_home_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/drawable-xxhdpi/nophoto.jpg create mode 100644 app/src/main/res/drawable-xxxhdpi/drawable-xxxhdpi/ic_home_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_account_balance_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_alarm_on_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_arrow_back_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_delete_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_drive_eta_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_favorite_border_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_fitness_center_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_grade_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_home_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_info_outline_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_language_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_local_airport_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_local_atm_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_local_bar_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_local_cafe_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_local_gas_station_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_local_hospital_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_local_movies_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_phone_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_restaurant_menu_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_share_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_shopping_cart_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_spa_black_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_star_rate_black_18dp.png create mode 100644 app/src/main/res/drawable/drawable-hdpi/ic_local_movies_black_48dp.png create mode 100644 app/src/main/res/drawable/drawable-mdpi/ic_local_movies_black_48dp.png create mode 100644 app/src/main/res/drawable/drawable-xhdpi/ic_local_movies_black_48dp.png create mode 100644 app/src/main/res/drawable/drawable-xxhdpi/ic_local_movies_black_48dp.png create mode 100644 app/src/main/res/drawable/drawable-xxxhdpi/ic_local_movies_black_48dp.png create mode 100644 app/src/main/res/drawable/hyperlink_underline.xml create mode 100644 app/src/main/res/drawable/map.png create mode 100644 app/src/main/res/layout-sw600dp-land/activity_main.xml create mode 100644 app/src/main/res/layout-sw600dp/activity_main.xml create mode 100644 app/src/main/res/layout/activity_info.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/activity_map_and_info.xml create mode 100644 app/src/main/res/layout/activity_tablet_place_info.xml create mode 100644 app/src/main/res/layout/content_map_and_info.xml create mode 100644 app/src/main/res/layout/favorite_item.xml create mode 100644 app/src/main/res/layout/fragment_favorite.xml create mode 100644 app/src/main/res/layout/fragment_map.xml create mode 100644 app/src/main/res/layout/fragment_result.xml create mode 100644 app/src/main/res/layout/fragment_search.xml create mode 100644 app/src/main/res/layout/place_item.xml create mode 100644 app/src/main/res/menu/long_click_menu.xml create mode 100644 app/src/main/res/menu/menu_main.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/values-iw/strings.xml create mode 100644 app/src/main/res/values-v21/styles.xml create mode 100644 app/src/main/res/values-w820dp/dimens.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/dimens.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/styles.xml create mode 100644 app/src/test/java/com/dt/project/ExampleUnitTest.java create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c6cbe56 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..e3f094e --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +project \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..96cc43e --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..fc132b2 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..5d19981 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..f0d7c37 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..6564d52 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..e50614a --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,32 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 23 + buildToolsVersion "23.0.2" + + defaultConfig { + applicationId "com.dt.project" + minSdkVersion 15 + targetSdkVersion 23 + versionCode 1 + versionName "1.0" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(include: ['*.jar'], dir: 'libs') + testCompile 'junit:junit:4.12' + compile 'com.android.support:appcompat-v7:23.1.1' + compile 'com.android.support:support-v4:23.1.1' + compile 'com.android.support:design:23.1.1' + compile 'com.google.android.gms:play-services:8.4.0' + compile 'com.android.support:recyclerview-v7:23.1.1' + compile 'com.android.support:cardview-v7:23.1.1' + compile 'com.squareup.picasso:picasso:2.3.2' +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..675623a --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in D:\Programs\Android\sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/app/src/androidTest/java/com/dt/project/ApplicationTest.java b/app/src/androidTest/java/com/dt/project/ApplicationTest.java new file mode 100644 index 0000000..cad874b --- /dev/null +++ b/app/src/androidTest/java/com/dt/project/ApplicationTest.java @@ -0,0 +1,13 @@ +package com.dt.project; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase { + public ApplicationTest() { + super(Application.class); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e54beb5 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/dt/project/AsyncTasks/AutoCompleteAsyncTask.java b/app/src/main/java/com/dt/project/AsyncTasks/AutoCompleteAsyncTask.java new file mode 100644 index 0000000..c304d04 --- /dev/null +++ b/app/src/main/java/com/dt/project/AsyncTasks/AutoCompleteAsyncTask.java @@ -0,0 +1,83 @@ +package com.dt.project.AsyncTasks; + +import android.os.AsyncTask; +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + + +//Start an asynctask the bring all the information on the user options when he types +public class AutoCompleteAsyncTask extends AsyncTask { + + private Callbacks callbacks; + private String errorMessage = null; + + public AutoCompleteAsyncTask(Callbacks callbacks) { + this.callbacks = callbacks; + } + + protected String doInBackground(URL... params) { + + try { + + URL url = params[0]; + + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + + int httpStatusCode = connection.getResponseCode(); + + if (httpStatusCode == HttpURLConnection.HTTP_BAD_REQUEST) { + errorMessage = "No Such Symbol"; + return null; + } + if (httpStatusCode != HttpURLConnection.HTTP_OK) { + errorMessage = connection.getResponseMessage(); + return null; + } + + InputStream inputStream = connection.getInputStream(); + InputStreamReader inputStreamReader = new InputStreamReader(inputStream); + BufferedReader bufferedReader = new BufferedReader(inputStreamReader); + + String result = ""; + + String oneLine = bufferedReader.readLine(); + + while (oneLine != null) { + result += oneLine + "\n"; + oneLine = bufferedReader.readLine(); + } + bufferedReader.close(); + inputStreamReader.close(); + inputStream.close(); + + return result; + + } catch (Exception ex) { + errorMessage = ex.getMessage(); + return null; + } + } + + protected void onPostExecute(String result) { + + if (errorMessage != null) { + callbacks.onError(errorMessage); + } else { + try { + callbacks.onSuccessWords(result); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + public interface Callbacks { + + void onSuccessWords(String result); + + void onError(String errorMessage); + } +} diff --git a/app/src/main/java/com/dt/project/AsyncTasks/DownloadImageAsyncTask.java b/app/src/main/java/com/dt/project/AsyncTasks/DownloadImageAsyncTask.java new file mode 100644 index 0000000..d907a3c --- /dev/null +++ b/app/src/main/java/com/dt/project/AsyncTasks/DownloadImageAsyncTask.java @@ -0,0 +1,39 @@ +package com.dt.project.AsyncTasks; + + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.AsyncTask; +import android.util.Log; +import java.io.InputStream; + +//Taking url String and preform AsyncTask in order to show the image +public class DownloadImageAsyncTask extends AsyncTask { + + private Callbacks callbacks; + + public DownloadImageAsyncTask(Callbacks callbacks) { + this.callbacks = callbacks; + } + + protected Bitmap doInBackground(String... urls) { + String url = urls[0]; + Bitmap mIcon11 = null; + try { + InputStream in = new java.net.URL(url).openStream(); + mIcon11 = BitmapFactory.decodeStream(in); + } catch (Exception ex) { + Log.e("Error", ex.getMessage()); + ex.printStackTrace(); + } + + return mIcon11; + } + + protected void onPostExecute(Bitmap result) { + callbacks.onSuccess(result); + } + public interface Callbacks{ + void onSuccess(Bitmap result); + } +} diff --git a/app/src/main/java/com/dt/project/AsyncTasks/InfoOnPlaceAsyncTask.java b/app/src/main/java/com/dt/project/AsyncTasks/InfoOnPlaceAsyncTask.java new file mode 100644 index 0000000..dd41fdb --- /dev/null +++ b/app/src/main/java/com/dt/project/AsyncTasks/InfoOnPlaceAsyncTask.java @@ -0,0 +1,90 @@ +package com.dt.project.AsyncTasks; + + +import android.os.AsyncTask; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + +//Searching more information on the place and manage the information in callbacks +public class InfoOnPlaceAsyncTask extends AsyncTask { + + private Callbacks callbacks; + private String errorMessage = null; + + public InfoOnPlaceAsyncTask(Callbacks callbacks) { + this.callbacks = callbacks; + } + + protected void onPreExecute() { + callbacks.onAboutToStart(); + } + + protected String doInBackground(URL... params) { + + try { + + URL url = params[0]; + + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + + int httpStatusCode = connection.getResponseCode(); + + if (httpStatusCode == HttpURLConnection.HTTP_BAD_REQUEST) { + errorMessage = "No Such Symbol"; + return null; + } + if (httpStatusCode != HttpURLConnection.HTTP_OK) { + errorMessage = connection.getResponseMessage(); + return null; + } + + InputStream inputStream = connection.getInputStream(); + InputStreamReader inputStreamReader = new InputStreamReader(inputStream); + BufferedReader bufferedReader = new BufferedReader(inputStreamReader); + + String result = ""; + + String oneLine = bufferedReader.readLine(); + + while (oneLine != null) { + result += oneLine + "\n"; + oneLine = bufferedReader.readLine(); + } + + bufferedReader.close(); + inputStreamReader.close(); + inputStream.close(); + + return result; + + } catch (Exception ex) { + errorMessage = ex.getMessage(); + return null; + } + } + + protected void onPostExecute(String result) { + + if (errorMessage != null) { + callbacks.onError(errorMessage); + } else { + try { + callbacks.onSuccessInfoOnPlace(result); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + public interface Callbacks { + void onAboutToStart(); + + void onSuccessInfoOnPlace(String result); + + void onError(String errorMessage); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dt/project/AsyncTasks/SearchByTextAsyncTask.java b/app/src/main/java/com/dt/project/AsyncTasks/SearchByTextAsyncTask.java new file mode 100644 index 0000000..0294f1e --- /dev/null +++ b/app/src/main/java/com/dt/project/AsyncTasks/SearchByTextAsyncTask.java @@ -0,0 +1,88 @@ +package com.dt.project.AsyncTasks; + + +import android.os.AsyncTask; +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +//searching by user text word +public class SearchByTextAsyncTask extends AsyncTask { + + private Callbacks callbacks; + private String errorMessage = null; + + public SearchByTextAsyncTask(Callbacks callbacks) { + this.callbacks = callbacks; + } + + protected void onPreExecute() { + callbacks.onAboutToStart(); + } + + protected String doInBackground(URL... params) { + + try { + + URL url = params[0]; + + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + + int httpStatusCode = connection.getResponseCode(); + + if (httpStatusCode == HttpURLConnection.HTTP_BAD_REQUEST) { + errorMessage = "No Such Symbol"; + return null; + } + if (httpStatusCode != HttpURLConnection.HTTP_OK) { + errorMessage = connection.getResponseMessage(); + return null; + } + + InputStream inputStream = connection.getInputStream(); + InputStreamReader inputStreamReader = new InputStreamReader(inputStream); + BufferedReader bufferedReader = new BufferedReader(inputStreamReader); + + String result = ""; + + String oneLine = bufferedReader.readLine(); + + while (oneLine != null) { + result += oneLine + "\n"; + oneLine = bufferedReader.readLine(); + } + + bufferedReader.close(); + inputStreamReader.close(); + inputStream.close(); + + return result; + + } catch (Exception ex) { + errorMessage = ex.getMessage(); + return null; + } + } + + protected void onPostExecute(String result) { + + if (errorMessage != null) { + callbacks.onError(errorMessage); + } else { + try { + callbacks.onSuccessSearchByTextAsyncTask(result); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + public interface Callbacks { + void onAboutToStart(); + + void onSuccessSearchByTextAsyncTask(String result); + + void onError(String errorMessage); + } +} diff --git a/app/src/main/java/com/dt/project/AsyncTasks/SearchNearYouAsyncTask.java b/app/src/main/java/com/dt/project/AsyncTasks/SearchNearYouAsyncTask.java new file mode 100644 index 0000000..6b8e984 --- /dev/null +++ b/app/src/main/java/com/dt/project/AsyncTasks/SearchNearYouAsyncTask.java @@ -0,0 +1,89 @@ +package com.dt.project.AsyncTasks; + + +import android.os.AsyncTask; +import org.json.JSONException; +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +//search near user by types or location +public class SearchNearYouAsyncTask extends AsyncTask { + + private Callbacks callbacks; + private String errorMessage = null; + + public SearchNearYouAsyncTask(Callbacks callbacks) { + this.callbacks = callbacks; + } + + protected void onPreExecute() { + callbacks.onAboutToStart(); + } + + protected String doInBackground(URL... params) { + + try { + + URL url = params[0]; + + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + + int httpStatusCode = connection.getResponseCode(); + + if (httpStatusCode == HttpURLConnection.HTTP_BAD_REQUEST) { + errorMessage = "No Such Symbol"; + return null; + } + if (httpStatusCode != HttpURLConnection.HTTP_OK) { + errorMessage = connection.getResponseMessage(); + return null; + } + + InputStream inputStream = connection.getInputStream(); + InputStreamReader inputStreamReader = new InputStreamReader(inputStream); + BufferedReader bufferedReader = new BufferedReader(inputStreamReader); + + String result = ""; + + String oneLine = bufferedReader.readLine(); + + while (oneLine != null) { + result += oneLine + "\n"; + oneLine = bufferedReader.readLine(); + } + + bufferedReader.close(); + inputStreamReader.close(); + inputStream.close(); + + return result; + + } catch (Exception ex) { + errorMessage = ex.getMessage(); + return null; + } + } + + protected void onPostExecute(String result) { + + if (errorMessage != null) { + callbacks.onError(errorMessage); + } else { + try { + callbacks.onSuccess(result); + } catch (JSONException e) { + e.printStackTrace(); + } + } + } + + public interface Callbacks { + void onAboutToStart(); + + void onSuccess(String result) throws JSONException; + + void onError(String errorMessage); + } +} diff --git a/app/src/main/java/com/dt/project/CircleTransformPicasso/CircleTransform.java b/app/src/main/java/com/dt/project/CircleTransformPicasso/CircleTransform.java new file mode 100644 index 0000000..dbc8ec2 --- /dev/null +++ b/app/src/main/java/com/dt/project/CircleTransformPicasso/CircleTransform.java @@ -0,0 +1,44 @@ +package com.dt.project.CircleTransformPicasso; + +import android.graphics.Bitmap; +import android.graphics.BitmapShader; +import android.graphics.Canvas; +import android.graphics.Paint; + +import com.squareup.picasso.Transformation; + +//using canvas in order to show the image as circle calling this class only in picasso +public class CircleTransform implements Transformation { + @Override + public Bitmap transform(Bitmap source) { + int size = Math.min(source.getWidth(), source.getHeight()); + + int x = (source.getWidth() - size) / 2; + int y = (source.getHeight() - size) / 2; + + Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size); + if (squaredBitmap != source) { + source.recycle(); + } + + Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig()); + + Canvas canvas = new Canvas(bitmap); + Paint paint = new Paint(); + BitmapShader shader = new BitmapShader(squaredBitmap, + BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP); + paint.setShader(shader); + paint.setAntiAlias(true); + + float r = size / 2f; + canvas.drawCircle(r, r, r, paint); + + squaredBitmap.recycle(); + return bitmap; + } + + @Override + public String key() { + return "circle"; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dt/project/DataBase/BaseLogic.java b/app/src/main/java/com/dt/project/DataBase/BaseLogic.java new file mode 100644 index 0000000..a0fdd50 --- /dev/null +++ b/app/src/main/java/com/dt/project/DataBase/BaseLogic.java @@ -0,0 +1,26 @@ +package com.dt.project.DataBase; + + +import android.app.Activity; + +// The base class for all business logic classes: +public abstract class BaseLogic { + + // The dal object: + protected DAL dal; + + // constructor: + public BaseLogic(Activity activity) { + dal = new DAL(activity); + } + + // Open the database: + public void open() { + dal.open(); + } + + // close the database: + public void close() { + dal.close(); + } +} diff --git a/app/src/main/java/com/dt/project/DataBase/DAL.java b/app/src/main/java/com/dt/project/DataBase/DAL.java new file mode 100644 index 0000000..582b164 --- /dev/null +++ b/app/src/main/java/com/dt/project/DataBase/DAL.java @@ -0,0 +1,62 @@ +package com.dt.project.DataBase; + +import android.app.Activity; +import android.content.ContentValues; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +public class DAL extends SQLiteOpenHelper { + + // An object which can access the database: + private SQLiteDatabase database; + + // Constructor: + public DAL(Activity activity) { + super(activity, DB.NAME, null, DB.VERSION); + } + + // Will be called when the app is first running: + public void onCreate(SQLiteDatabase db) { + db.execSQL(DB.Places.CREATION_STATEMENT); // Execute sql statement + + db.execSQL(DB.FavoritePlaces.CREATION_STATEMENT); // Execute sql statement + } + + // Will be called when the app is being upgraded if our version will be different: + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + + db.execSQL(DB.Places.DELETION_STATEMENT); + db.execSQL(DB.Places.CREATION_STATEMENT); + + db.execSQL(DB.FavoritePlaces.DELETION_STATEMENT); + db.execSQL(DB.FavoritePlaces.CREATION_STATEMENT); + } + + // Opening the database for any action: + public void open() { + database = getWritableDatabase(); // This is the open method. + } + + // Closing the database: + public void close() { + super.close(); // This is the close method. + } + + // Add a new row to a table: + public long insert(String tableName, ContentValues values) { + return database.insert(tableName, null, values); + } + //delete + public long delete(String tableName, String where) { + return database.delete(tableName, where, null); + } + // We then can advanced the cursor to the next line + public Cursor getTable(String tableName, String[] columns, String where, String orderBy) { + return database.query(tableName, columns, where, null, null, null, orderBy); + } + // The update will return the number of rows affected. + public long update(String tableName, ContentValues values, String where) { + return (long) database.update(tableName, values, where, null); + } +} diff --git a/app/src/main/java/com/dt/project/DataBase/DB.java b/app/src/main/java/com/dt/project/DataBase/DB.java new file mode 100644 index 0000000..ecb96cf --- /dev/null +++ b/app/src/main/java/com/dt/project/DataBase/DB.java @@ -0,0 +1,87 @@ +package com.dt.project.DataBase; + + +public class DB { + public static final String NAME = "PlacesDatabase.db"; // Database file name. + public static final int VERSION = 1; // Places Database version. + + // Inner Class Places + public static class Places { + + public static final String TABLE_NAME = "Places"; // Table name. + public static final String SQL_ID = "sqlID"; // id column name (this is the primary key) + public static final String PLACE_ID = "placeId"; // id of the place column + public static final String PLACE_NAME = "placeName"; // name of the place column + public static final String PLACE_VICINITY = "placeVicinity"; // vicinity of the place column + public static final String PLACE_LATITUDE = "placeLatitude"; // latitude of the place column + public static final String PLACE_LONGITUDE = "placeLongitude"; // longitude of the place column + public static final String PLACE_DISTANCE = "placeDistance"; // distance of the place column + public static final String PLACE_REFERENCE = "placeReference"; // reference of the place column + public static final String PLACE_WEBSITE = "placeWebSite"; // website of the place column + public static final String PLACE_OPEN_HOURS = "placeOpenHours"; // open hours of the place column + public static final String PLACE_PHONE = "placePhone"; // phone of the place column + public static final String PLACE_PHOTO = "placePhoto"; // photo of the place column + public static final String PLACE_RATING = "placeRating"; // rating of the place column + + + public static final String[] ALL_COLUMNS = new String[]{SQL_ID, PLACE_ID, PLACE_NAME, PLACE_VICINITY,PLACE_LATITUDE,PLACE_LONGITUDE, PLACE_DISTANCE, PLACE_REFERENCE,PLACE_WEBSITE,PLACE_OPEN_HOURS,PLACE_PHONE, PLACE_PHOTO, PLACE_RATING}; + + // the creation table is a string. + public static final String CREATION_STATEMENT = "CREATE TABLE " + TABLE_NAME + + " ( " + SQL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + PLACE_ID + " TEXT, " + + PLACE_NAME + " TEXT, " + + PLACE_VICINITY + " TEXT, " + + PLACE_LATITUDE + " NUMERIC, " + + PLACE_LONGITUDE + " NUMERIC, " + + PLACE_DISTANCE + " NUMERIC, " + + PLACE_REFERENCE + " TEXT, " + + PLACE_WEBSITE + " TEXT, " + + PLACE_OPEN_HOURS + " TEXT, " + + PLACE_PHONE + " TEXT, " + + PLACE_PHOTO + " TEXT, " + + PLACE_RATING + " NUMERIC ) "; + + public static final String DELETION_STATEMENT = "DROP TABLE IF EXISTS " + TABLE_NAME; + } + + // Inner Class FavoritePlaces + public static class FavoritePlaces { + + public static final String TABLE_NAME = "FavoritePlaces"; // Table name. + public static final String SQL_ID = "sqlID"; // id column name (this is the primary key) + public static final String PLACE_ID = "placeId"; // id of the place column + public static final String PLACE_NAME = "placeName"; // name of the place column + public static final String PLACE_VICINITY = "placeVicinity"; // vicinity of the place column + public static final String PLACE_LATITUDE = "placeLatitude"; // latitude of the place column + public static final String PLACE_LONGITUDE = "placeLongitude"; // longitude of the place column + public static final String PLACE_DISTANCE = "placeDistance"; // distance of the place column + public static final String PLACE_REFERENCE = "placeReference"; // reference of the place column + public static final String PLACE_WEBSITE = "placeWebSite"; // website of the place column + public static final String PLACE_OPEN_HOURS = "placeOpenHours"; // open hours of the place column + public static final String PLACE_PHONE = "placePhone"; // phone of the place column + public static final String PLACE_PHOTO = "placePhoto"; // photo of the place column + public static final String PLACE_RATING = "placeRating"; // rating of the place column + + + public static final String[] ALL_COLUMNS = new String[]{SQL_ID, PLACE_ID, PLACE_NAME, PLACE_VICINITY,PLACE_LATITUDE,PLACE_LONGITUDE, PLACE_DISTANCE, PLACE_REFERENCE,PLACE_WEBSITE,PLACE_OPEN_HOURS,PLACE_PHONE, PLACE_PHOTO,PLACE_RATING}; + + // the creation table is a string. + public static final String CREATION_STATEMENT = "CREATE TABLE " + TABLE_NAME + + " ( " + SQL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + PLACE_ID + " TEXT, " + + PLACE_NAME + " TEXT, " + + PLACE_VICINITY + " TEXT, " + + PLACE_LATITUDE + " NUMERIC, " + + PLACE_LONGITUDE + " NUMERIC, " + + PLACE_DISTANCE + " NUMERIC, " + + PLACE_REFERENCE + " TEXT, " + + PLACE_WEBSITE + " TEXT, " + + PLACE_OPEN_HOURS + " TEXT, " + + PLACE_PHONE + " TEXT, " + + PLACE_PHOTO + " TEXT, " + + PLACE_RATING + " NUMERIC ) "; + + public static final String DELETION_STATEMENT = "DROP TABLE IF EXISTS " + TABLE_NAME; + } +} diff --git a/app/src/main/java/com/dt/project/DataBase/FavoritePlaceLogic.java b/app/src/main/java/com/dt/project/DataBase/FavoritePlaceLogic.java new file mode 100644 index 0000000..3af2362 --- /dev/null +++ b/app/src/main/java/com/dt/project/DataBase/FavoritePlaceLogic.java @@ -0,0 +1,111 @@ +package com.dt.project.DataBase; + +import android.app.Activity; +import android.content.ContentValues; +import android.database.Cursor; + +import com.dt.project.FavoritePlace.FavoritePlace; + +import java.util.ArrayList; + + +public class FavoritePlaceLogic extends BaseLogic{ + + public FavoritePlaceLogic(Activity activity) { + super(activity); + } + // adding the values of a favoritePlace to the DB + public long addFavoritePlace(FavoritePlace favoritePlace) { + + ContentValues contentValues = new ContentValues(); + contentValues.put(DB.FavoritePlaces.PLACE_ID, favoritePlace.getPlaceID()); + contentValues.put(DB.FavoritePlaces.PLACE_NAME, favoritePlace.getPlaceName()); + contentValues.put(DB.FavoritePlaces.PLACE_VICINITY, favoritePlace.getPlaceAddress()); + contentValues.put(DB.FavoritePlaces.PLACE_LATITUDE, favoritePlace.getPlaceLatitude()); + contentValues.put(DB.FavoritePlaces.PLACE_LONGITUDE, favoritePlace.getPlaceLongitude()); + contentValues.put(DB.FavoritePlaces.PLACE_DISTANCE, favoritePlace.getPlaceDistance()); + contentValues.put(DB.FavoritePlaces.PLACE_REFERENCE, favoritePlace.getPlaceReference()); + contentValues.put(DB.FavoritePlaces.PLACE_WEBSITE, favoritePlace.getPlaceWebSite()); + contentValues.put(DB.FavoritePlaces.PLACE_OPEN_HOURS, favoritePlace.getPlaceOpenHours()); + contentValues.put(DB.FavoritePlaces.PLACE_PHONE, favoritePlace.getPlacePhone()); + contentValues.put(DB.FavoritePlaces.PLACE_PHOTO, favoritePlace.getPlacePhoto()); + contentValues.put(DB.FavoritePlaces.PLACE_RATING, favoritePlace.getPlaceRating()); + + long createdId = dal.insert(DB.FavoritePlaces.TABLE_NAME, contentValues); + return createdId; + } +//geting all the favorite places from the DB + public ArrayList getFavoritePlaces(String where, String orderBy) { + + ArrayList places = new ArrayList<>(); + + Cursor cursor = dal.getTable(DB.FavoritePlaces.TABLE_NAME, DB.FavoritePlaces.ALL_COLUMNS,where,orderBy); + + while (cursor.moveToNext()) { + + int idIndex = cursor.getColumnIndex(DB.FavoritePlaces.SQL_ID); + long sqlID = cursor.getLong(idIndex); + String placeId = cursor.getString(cursor.getColumnIndex(DB.FavoritePlaces.PLACE_ID)); + String placeName = cursor.getString(cursor.getColumnIndex(DB.FavoritePlaces.PLACE_NAME)); + String placeVicinity = cursor.getString(cursor.getColumnIndex(DB.FavoritePlaces.PLACE_VICINITY)); + double placeLatitude = cursor.getDouble(cursor.getColumnIndex(DB.FavoritePlaces.PLACE_LATITUDE)); + double placeLongitude = cursor.getDouble(cursor.getColumnIndex(DB.FavoritePlaces.PLACE_LONGITUDE)); + double placeDistance = cursor.getDouble(cursor.getColumnIndex(DB.FavoritePlaces.PLACE_DISTANCE)); + String placeReference = cursor.getString(cursor.getColumnIndex(DB.FavoritePlaces.PLACE_REFERENCE)); + String placeWebSite = cursor.getString(cursor.getColumnIndex(DB.FavoritePlaces.PLACE_WEBSITE)); + String placeOpenHours = cursor.getString(cursor.getColumnIndex(DB.FavoritePlaces.PLACE_OPEN_HOURS)); + String placePhone = cursor.getString(cursor.getColumnIndex(DB.FavoritePlaces.PLACE_PHONE)); + String placePhoto = cursor.getString(cursor.getColumnIndex(DB.FavoritePlaces.PLACE_PHOTO)); + float placeRating = cursor.getFloat(cursor.getColumnIndex(DB.FavoritePlaces.PLACE_RATING)); + + FavoritePlace favoritePlace = new FavoritePlace(sqlID,placeId,placeName,placeVicinity,placeLatitude,placeLongitude,placeDistance,placeReference,placeWebSite,placeOpenHours,placePhone,placePhoto,placeRating); + places.add(favoritePlace); + + } + cursor.close(); + return places; + } +//delete all items from DB + public long deleteAllFavorites() { + + long affectedRows = dal.delete(DB.FavoritePlaces.TABLE_NAME,null); + + return affectedRows; + } +// delete one item from DB + public long deleteOneItemFavorite(long sql_id) { + String where =DB.FavoritePlaces.SQL_ID+" = "+sql_id; + + long affectedRows = dal.delete(DB.FavoritePlaces.TABLE_NAME,where); + + return affectedRows; + } + //updating favorite place +public long updateFavoritePlace(FavoritePlace favoritePlace){ + ContentValues contentValues = new ContentValues(); + contentValues.put(DB.FavoritePlaces.PLACE_ID, favoritePlace.getPlaceID()); + contentValues.put(DB.FavoritePlaces.PLACE_NAME, favoritePlace.getPlaceName()); + contentValues.put(DB.FavoritePlaces.PLACE_VICINITY, favoritePlace.getPlaceAddress()); + contentValues.put(DB.FavoritePlaces.PLACE_LATITUDE, favoritePlace.getPlaceLatitude()); + contentValues.put(DB.FavoritePlaces.PLACE_LONGITUDE, favoritePlace.getPlaceLongitude()); + contentValues.put(DB.FavoritePlaces.PLACE_DISTANCE, favoritePlace.getPlaceDistance()); + contentValues.put(DB.FavoritePlaces.PLACE_REFERENCE, favoritePlace.getPlaceReference()); + contentValues.put(DB.FavoritePlaces.PLACE_WEBSITE, favoritePlace.getPlaceWebSite()); + contentValues.put(DB.FavoritePlaces.PLACE_OPEN_HOURS, favoritePlace.getPlaceOpenHours()); + contentValues.put(DB.FavoritePlaces.PLACE_PHONE, favoritePlace.getPlacePhone()); + contentValues.put(DB.FavoritePlaces.PLACE_PHOTO, favoritePlace.getPlacePhoto()); + contentValues.put(DB.FavoritePlaces.PLACE_RATING, favoritePlace.getPlaceRating()); + + String where = DB.FavoritePlaces.SQL_ID + "=" + favoritePlace.getSqlID(); + + long affectedRows = dal.update(DB.FavoritePlaces.TABLE_NAME, contentValues, where); + + return affectedRows; + +} + +//bring all the favorite places by the distance + public ArrayList getAllPlaces(){ + return getFavoritePlaces(null, DB.FavoritePlaces.PLACE_DISTANCE); + } +} diff --git a/app/src/main/java/com/dt/project/DataBase/PlaceLogic.java b/app/src/main/java/com/dt/project/DataBase/PlaceLogic.java new file mode 100644 index 0000000..0352491 --- /dev/null +++ b/app/src/main/java/com/dt/project/DataBase/PlaceLogic.java @@ -0,0 +1,102 @@ +package com.dt.project.DataBase; + + +import android.app.Activity; +import android.content.ContentValues; +import android.database.Cursor; + +import com.dt.project.Place.Place; + +import java.util.ArrayList; + +public class PlaceLogic extends BaseLogic { + + public PlaceLogic(Activity activity) { + super(activity); + } + + // adding the values of a place to the DB + public long addPlace(Place place) { + + ContentValues contentValues = new ContentValues(); + contentValues.put(DB.Places.PLACE_ID, place.getPlaceID()); + contentValues.put(DB.Places.PLACE_NAME, place.getPlaceName()); + contentValues.put(DB.Places.PLACE_VICINITY, place.getPlaceAddress()); + contentValues.put(DB.Places.PLACE_LATITUDE, place.getPlaceLatitude()); + contentValues.put(DB.Places.PLACE_LONGITUDE, place.getPlaceLongitude()); + contentValues.put(DB.Places.PLACE_DISTANCE, place.getPlaceDistance()); + contentValues.put(DB.Places.PLACE_REFERENCE, place.getPlaceReference()); + contentValues.put(DB.Places.PLACE_WEBSITE, place.getPlaceWebSite()); + contentValues.put(DB.Places.PLACE_OPEN_HOURS, place.getPlaceOpenHours()); + contentValues.put(DB.Places.PLACE_PHONE, place.getPlacePhone()); + contentValues.put(DB.Places.PLACE_PHOTO, place.getPlacePhoto()); + contentValues.put(DB.Places.PLACE_RATING, place.getPlaceRating()); + + long createdId = dal.insert(DB.Places.TABLE_NAME, contentValues); + return createdId; + } +//bring all places from the DB + public ArrayList getPlaces(String where,String orderBy) { + + ArrayList places = new ArrayList<>(); + + Cursor cursor = dal.getTable(DB.Places.TABLE_NAME, DB.Places.ALL_COLUMNS,where,orderBy); + + while (cursor.moveToNext()) { + + int idIndex = cursor.getColumnIndex(DB.Places.SQL_ID); + long sqlID = cursor.getLong(idIndex); + String placeId = cursor.getString(cursor.getColumnIndex(DB.Places.PLACE_ID)); + String placeName = cursor.getString(cursor.getColumnIndex(DB.Places.PLACE_NAME)); + String placeVicinity = cursor.getString(cursor.getColumnIndex(DB.Places.PLACE_VICINITY)); + double placeLatitude = cursor.getDouble(cursor.getColumnIndex(DB.Places.PLACE_LATITUDE)); + double placeLongitude = cursor.getDouble(cursor.getColumnIndex(DB.Places.PLACE_LONGITUDE)); + double placeDistance = cursor.getDouble(cursor.getColumnIndex(DB.Places.PLACE_DISTANCE)); + String placeReference = cursor.getString(cursor.getColumnIndex(DB.Places.PLACE_REFERENCE)); + String placeWebSite = cursor.getString(cursor.getColumnIndex(DB.Places.PLACE_WEBSITE)); + String placeOpenHours = cursor.getString(cursor.getColumnIndex(DB.Places.PLACE_OPEN_HOURS)); + String placePhone = cursor.getString(cursor.getColumnIndex(DB.Places.PLACE_PHONE)); + String placePhoto = cursor.getString(cursor.getColumnIndex(DB.Places.PLACE_PHOTO)); + float placeRating = cursor.getFloat(cursor.getColumnIndex(DB.Places.PLACE_RATING)); + + Place place = new Place(sqlID,placeId,placeName,placeVicinity,placeLatitude,placeLongitude,placeDistance,placeReference,placeWebSite,placeOpenHours,placePhone,placePhoto,placeRating); + places.add(place); + } + cursor.close(); + return places; + } +// delete all places + public long deleteAll() { + + long affectedRows = dal.delete(DB.Places.TABLE_NAME,null); + + return affectedRows; + } + //updating the place information +public long updatePlace(Place place){ + ContentValues contentValues = new ContentValues(); + contentValues.put(DB.Places.PLACE_ID, place.getPlaceID()); + contentValues.put(DB.Places.PLACE_NAME, place.getPlaceName()); + contentValues.put(DB.Places.PLACE_VICINITY, place.getPlaceAddress()); + contentValues.put(DB.Places.PLACE_LATITUDE, place.getPlaceLatitude()); + contentValues.put(DB.Places.PLACE_LONGITUDE, place.getPlaceLongitude()); + contentValues.put(DB.Places.PLACE_DISTANCE, place.getPlaceDistance()); + contentValues.put(DB.Places.PLACE_REFERENCE, place.getPlaceReference()); + contentValues.put(DB.Places.PLACE_WEBSITE, place.getPlaceWebSite()); + contentValues.put(DB.Places.PLACE_OPEN_HOURS, place.getPlaceOpenHours()); + contentValues.put(DB.Places.PLACE_PHONE, place.getPlacePhone()); + contentValues.put(DB.Places.PLACE_PHOTO, place.getPlacePhoto()); + contentValues.put(DB.Places.PLACE_RATING, place.getPlaceRating()); + + String where = DB.Places.SQL_ID + "=" + place.getSqlID(); + + long affectedRows = dal.update(DB.Places.TABLE_NAME, contentValues, where); + + return affectedRows; +} +//brings all the places by distance + public ArrayList getAllPlaces(){ + return getPlaces(null,DB.Places.PLACE_DISTANCE); + } + +} diff --git a/app/src/main/java/com/dt/project/FavoritePlace/FavoriteHolder.java b/app/src/main/java/com/dt/project/FavoritePlace/FavoriteHolder.java new file mode 100644 index 0000000..1981ee2 --- /dev/null +++ b/app/src/main/java/com/dt/project/FavoritePlace/FavoriteHolder.java @@ -0,0 +1,204 @@ +package com.dt.project.FavoritePlace; + +import android.app.Activity; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.dt.project.AsyncTasks.InfoOnPlaceAsyncTask; +import com.dt.project.CircleTransformPicasso.CircleTransform; +import com.dt.project.DataBase.FavoritePlaceLogic; +import com.dt.project.Helper; +import com.dt.project.MainActivity; +import com.dt.project.Phone.MapAndInfoPhoneActivity; +import com.dt.project.R; +import com.squareup.picasso.Picasso; + +import java.net.URL; + + +public class FavoriteHolder extends RecyclerView.ViewHolder { + private Activity activity; + private TextView textViewFavoriteName; + private TextView textViewFavoriteAddress; + private ImageView imageViewFavoritePlace; + private ImageView imageViewFavoriteDrive; + private ImageView imageViewFavoriteWebPage; + private ImageView imageViewFavoritePhone; + private ImageView imageViewFavoriteShare; + private ImageView imageViewFavoriteDelete; + private View itemView; + private final static int UPDATE_INFORMATION = 3; + private FavoritePlaceLogic favoritePlaceLogic; + private Callbacks callbacks; + + + public FavoriteHolder(Activity activity, View itemView, Callbacks callbacks) { + super(itemView); + this.activity = activity; + this.itemView = itemView; + //finding the views + textViewFavoriteName = (TextView) itemView.findViewById(R.id.textViewFavoriteName); + textViewFavoriteAddress = (TextView) itemView.findViewById(R.id.textViewFavoriteAddress); + imageViewFavoritePlace = (ImageView) itemView.findViewById(R.id.imageViewFavoritePlace); + imageViewFavoriteDrive = (ImageView) itemView.findViewById(R.id.imageViewFravoriteDrive); + imageViewFavoriteWebPage = (ImageView) itemView.findViewById(R.id.imageViewFavoriteWebPage); + imageViewFavoritePhone = (ImageView) itemView.findViewById(R.id.imageViewFavoritePhone); + imageViewFavoriteShare = (ImageView) itemView.findViewById(R.id.imageViewFaviteShare); + imageViewFavoriteDelete = (ImageView) itemView.findViewById(R.id.imageViewFavoriteDelete); + + this.callbacks = callbacks; + } + + public void bindPlace(final FavoritePlace favoritePlace) { + + String placeName = favoritePlace.getPlaceName(); + String placeAddress = favoritePlace.getPlaceAddress(); + //setting name address and other information from the DB info + textViewFavoriteName.setText(placeName); + textViewFavoriteAddress.setText(placeAddress); + // Handles user press item in the recycler + itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //if device not a tablet open intent with result + if (!Helper.isTablet(activity)) { + Intent intent = new Intent(activity, MapAndInfoPhoneActivity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("place", favoritePlace); + intent.putExtras(bundle); + activity.startActivityForResult(intent, UPDATE_INFORMATION); + } + //if the device is tablet execute an async task that brings more info on the press place (the implements in MainActivity) + if (Helper.isTablet(activity)) { + + try { + URL url = new URL("https://maps.googleapis.com/maps/api/place/details/json?placeid=" + favoritePlace.getPlaceID() + "&key=AIzaSyBSg3o7puUY7kYHvIOg-VxKWX6c1cjjSII"); + InfoOnPlaceAsyncTask infoOnPlaceAsyncTask = new InfoOnPlaceAsyncTask(((MainActivity) activity)); + infoOnPlaceAsyncTask.execute(url); + } catch (Exception e) { + Toast.makeText(activity, e.getMessage(), Toast.LENGTH_LONG).show(); + } + } + } + }); + //default action when there is no photo to show in the intent + imageViewFavoritePlace.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Toast.makeText(activity, R.string.no_image, Toast.LENGTH_LONG).show(); + } + }); + //setting the default photo in case there is no photo of the place + imageViewFavoritePlace.setImageDrawable(activity.getResources().getDrawable(R.drawable.map)); + // if there is photo use picasso to set the image + if (favoritePlace.getPlacePhoto() != null) { + Picasso.with(activity) + .load("https://maps.googleapis.com/maps/api/place/photo?maxwidth=400&photoreference=" + favoritePlace.getPlacePhoto() + "&key=AIzaSyBSg3o7puUY7kYHvIOg-VxKWX6c1cjjSII") + .error(R.drawable.map)//setting that image if error happens + .placeholder(R.drawable.map)//show this pic before load + .transform(new CircleTransform())//make it round + .into(imageViewFavoritePlace); + //show the image of the place in normal size when you click on the image(intent) + showImageFavoritePlace(favoritePlace); + } + //Deleting item when user press trash + deleteOneFavoriteItem(favoritePlace); + //navigation to the favorite place + driveFavoritePlace(favoritePlace); + //if the favorite place have this data put visibility VISIBLE else it stays GONE + if (favoritePlace.getPlacePhone() != null) { + imageViewFavoritePhone.setVisibility(View.VISIBLE); + //calling the favorite place + callFavoritePlace(favoritePlace); + } + //if the favorite place have this data put visibility VISIBLE else it stays GONE + if (favoritePlace.getPlaceWebSite() != null) { + imageViewFavoriteWebPage.setVisibility(View.VISIBLE); + //open a web page with the website of the favorite place + webSiteFavoritePlace(favoritePlace); + } + //Share the name and address of the favorite place + imageViewFavoriteShare.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //using helper to trigger an intent + Helper.sharePlace(activity, favoritePlace); + } + }); + } + + //Callbacks in order to transfer data and refresh the adapter + public interface Callbacks { + void refreshAdapter(int position); + } + + //delete one item from favorite and notify the adapter that one item removed + public void deleteOneFavoriteItem(final FavoritePlace favoritePlace) { + imageViewFavoriteDelete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + favoritePlaceLogic = new FavoritePlaceLogic(activity); + favoritePlaceLogic.open(); + favoritePlaceLogic.deleteOneItemFavorite(favoritePlace.getSqlID()); + callbacks.refreshAdapter(getAdapterPosition()); + favoritePlaceLogic.close(); + } + }); + } + + //using intent to make a phone call if user press this + public void callFavoritePlace(final FavoritePlace favoritePlace) { + imageViewFavoritePhone.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //using helper to trigger an intent + Helper.sharePhoneNumber(activity, favoritePlace); + } + }); + } + + //using intent to open browser with the place website + public void webSiteFavoritePlace(final FavoritePlace favoritePlace) { + imageViewFavoriteWebPage.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent browse = new Intent(Intent.ACTION_VIEW, Uri.parse("" + favoritePlace.getPlaceWebSite())); + activity.startActivity(browse); + } + }); + } + + //sharing the geo location of the place and can navigate + public void driveFavoritePlace(final FavoritePlace favoritePlace) { + imageViewFavoriteDrive.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(android.content.Intent.ACTION_VIEW, + Uri.parse("http://maps.google.com/maps?daddr=" + favoritePlace.getPlaceLatitude() + "," + favoritePlace.getPlaceLongitude())); + activity.startActivity(intent); + } + }); + } + + // show the image by using intent + public void showImageFavoritePlace(final FavoritePlace favoritePlace) { + imageViewFavoritePlace.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String url = "https://maps.googleapis.com/maps/api/place/photo?maxwidth=400&photoreference=" + favoritePlace.getPlacePhoto() + "&key=AIzaSyBSg3o7puUY7kYHvIOg-VxKWX6c1cjjSII"; + Intent intent = new Intent(); + intent.setAction(android.content.Intent.ACTION_VIEW); + intent.addCategory(android.content.Intent.CATEGORY_DEFAULT); + intent.setDataAndType(Uri.parse(url), "image/*"); + activity.startActivity(intent); + } + }); + } + +} diff --git a/app/src/main/java/com/dt/project/FavoritePlace/FavoritePlace.java b/app/src/main/java/com/dt/project/FavoritePlace/FavoritePlace.java new file mode 100644 index 0000000..4d9e3cc --- /dev/null +++ b/app/src/main/java/com/dt/project/FavoritePlace/FavoritePlace.java @@ -0,0 +1,13 @@ +package com.dt.project.FavoritePlace; + +import com.dt.project.Place.Place; + +//favorite place +public class FavoritePlace extends Place { + + public FavoritePlace(long sqlID, String placeID, String placeName, String placeAddress, double placeLatitude, double placeLongitude, double placeDistance, String placeReference, String placeWebSite, String placeOpenHours, String placePhone, String placePhoto, float placeRating) { + super(sqlID, placeID, placeName, placeAddress, placeLatitude, placeLongitude, placeDistance, placeReference, placeWebSite, placeOpenHours, placePhone, placePhoto, placeRating); + + } + +} diff --git a/app/src/main/java/com/dt/project/FavoritePlace/FavoritePlaceAdapter.java b/app/src/main/java/com/dt/project/FavoritePlace/FavoritePlaceAdapter.java new file mode 100644 index 0000000..eb0bbb6 --- /dev/null +++ b/app/src/main/java/com/dt/project/FavoritePlace/FavoritePlaceAdapter.java @@ -0,0 +1,56 @@ +package com.dt.project.FavoritePlace; + +import android.app.Activity; +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; +import com.dt.project.R; +import java.util.ArrayList; + + +public class FavoritePlaceAdapter extends RecyclerView.Adapter implements FavoriteHolder.Callbacks { + private Activity activity; + private ArrayList places; + + + public FavoritePlaceAdapter(Activity activity, ArrayList places) { + this.activity = activity; + this.places = places; + } + + @Override + public FavoriteHolder onCreateViewHolder(ViewGroup parent, int viewType) { + LayoutInflater layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + + View linearLayout = layoutInflater.inflate(R.layout.favorite_item, null); + + return new FavoriteHolder(activity, linearLayout, this); + } + + @Override + public void onBindViewHolder(FavoriteHolder holder, int position) { + FavoritePlace favoritePlace = places.get(position); + + holder.bindPlace(favoritePlace); + } + + @Override + public int getItemCount() { + return places.size(); + } + + //this function being called when the user try to delete one item from the list + @Override + public void refreshAdapter(int position) { + try { + places.remove(position); + notifyItemRemoved(position); + } catch (Exception ex) { + Toast.makeText(activity, ex.getMessage(), Toast.LENGTH_LONG).show(); + } + } + +} diff --git a/app/src/main/java/com/dt/project/Helper.java b/app/src/main/java/com/dt/project/Helper.java new file mode 100644 index 0000000..5b330a3 --- /dev/null +++ b/app/src/main/java/com/dt/project/Helper.java @@ -0,0 +1,232 @@ +package com.dt.project; + + +import android.Manifest; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.res.Configuration; +import android.graphics.Color; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.net.Uri; +import android.provider.Settings; +import android.support.design.widget.Snackbar; +import android.support.v4.app.ActivityCompat; +import android.util.Log; +import android.view.View; +import android.widget.Toast; + +import com.dt.project.DataBase.FavoritePlaceLogic; +import com.dt.project.DataBase.PlaceLogic; +import com.dt.project.FavoritePlace.FavoritePlace; +import com.dt.project.Place.Place; +import com.google.android.gms.maps.model.LatLng; + +import org.json.JSONArray; +import org.json.JSONObject; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; + +public class Helper { +//Calculating the air distance between user location and place location + public static double calculationByDistance(LatLng startPoint, LatLng endPoint) { + int Radius = 6371;// radius of earth in Km + double lat1 = startPoint.latitude; + double lat2 = endPoint.latitude; + double lon1 = startPoint.longitude; + double lon2 = endPoint.longitude; + double dLat = Math.toRadians(lat2 - lat1); + double dLon = Math.toRadians(lon2 - lon1); + double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + + Math.cos(Math.toRadians(lat1)) + * Math.cos(Math.toRadians(lat2)) * Math.sin(dLon / 2) + * Math.sin(dLon / 2); + double c = 2 * Math.asin(Math.sqrt(a)); + double valueResult = Radius * c; + double km = valueResult / 1; + DecimalFormat newFormat = new DecimalFormat("####"); + int kmInDec = Integer.valueOf(newFormat.format(km)); + double meter = valueResult % 1000; + int meterInDec = Integer.valueOf(newFormat.format(meter)); + Log.i("Radius Value", "" + valueResult + " KM " + kmInDec + + " Meter " + meterInDec); + return Radius * c; + } + +//taking the result string from the async task and retrieve all the data on the specific place + public static ArrayList placeInformation(String result, LatLng startPoint,Activity activity) { + ArrayList places = new ArrayList<>(); + try { + JSONObject jsonObject = new JSONObject(result); + JSONArray jsonArray = jsonObject.getJSONArray("results"); + + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject JO = jsonArray.getJSONObject(i); + String id = JO.getString("place_id"); + // URL icon = new URL(JO.getString("icon")); + String name = JO.getString("name"); + String vicinity = JO.getString("vicinity"); + String reference = JO.getString("reference"); + float rating; + try { + rating = (float) JO.getDouble("rating"); + } catch (Exception ex) { + rating = 0; + } + + double latitude = JO.getJSONObject("geometry").getJSONObject("location").getDouble("lat"); + double longitude = JO.getJSONObject("geometry").getJSONObject("location").getDouble("lng"); + + String photo; + try { + JSONArray jsonArrayPhoto = JO.getJSONArray("photos"); + JSONObject JoPhotos = jsonArrayPhoto.getJSONObject(0); + photo = JoPhotos.getString("photo_reference"); + } catch (Exception e) { + photo = null; + } + + LatLng endPoint = new LatLng(latitude, longitude); + double distance = calculationByDistance(startPoint, endPoint); + //calculating 3 digits in order to show km + double placeDistanceInKm = (int) (distance * 1000) / 1000.0; + // putting null because those items don't have value in this search + Place place = new Place(id, name, vicinity, latitude, longitude, placeDistanceInKm, reference, null, null, null, photo, rating); + places.add(place); + } + } catch (Exception ex) { + Toast.makeText(activity, ex.getMessage(), Toast.LENGTH_SHORT).show(); + } + return places; + } +// checking if there is network connection + public static boolean isNetworkAvailable(Activity activity) { + ConnectivityManager connectivityManager + = (ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); + return activeNetworkInfo != null && activeNetworkInfo.isConnected(); + } +// taking the result of the async task and retrieve the information (lists of predictions ) + public static ArrayList autoComplete(String result) { + ArrayList words = new ArrayList<>(); + try { + JSONObject jsonObject = new JSONObject(result); + JSONArray jsonArray = jsonObject.getJSONArray("predictions"); + + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject JO = jsonArray.getJSONObject(i); + String description = JO.getString("description"); + words.add(description); + } + } catch (Exception ex) { + + } + // remove duplication words in the list + Set removeDuplication = new HashSet<>(); + removeDuplication.addAll(words); + words.clear(); + //Adding the array list back with out duplication + words.addAll(removeDuplication); + return words; + } +// taking the result of the async task and retrieve the information of the place from a text search + public static void PlaceInformationByText(String result, PlaceLogic placeLogic, LatLng startPoint) { + //clear the data base from information + placeLogic.open(); + placeLogic.deleteAll(); + try { + JSONObject jsonObject = new JSONObject(result); + JSONArray jsonArray = jsonObject.getJSONArray("results"); + + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject JO = jsonArray.getJSONObject(i); + String id = JO.getString("place_id"); + // URL icon = new URL(JO.getString("icon")); + String name = JO.getString("name"); + String address = JO.getString("formatted_address"); + String reference = JO.getString("reference"); + float rating; + try { + rating = (float) JO.getDouble("rating"); + } catch (Exception ex) { + rating = 0; + } + + double latitude = JO.getJSONObject("geometry").getJSONObject("location").getDouble("lat"); + double longitude = JO.getJSONObject("geometry").getJSONObject("location").getDouble("lng"); + + String photo; + try { + JSONArray jsonArrayPhoto = JO.getJSONArray("photos"); + JSONObject JoPhotoes = jsonArrayPhoto.getJSONObject(0); + photo = JoPhotoes.getString("photo_reference"); + } catch (Exception e) { + photo = null; + } + + LatLng endPoint = new LatLng(latitude, longitude); + double distance = calculationByDistance(startPoint, endPoint); + //calculating 3 digits in order to show km + double placeDistanceInKm = (int) (distance * 1000) / 1000.0; + + Place place = new Place(id, name, address, latitude, longitude, placeDistanceInKm, reference, null, null, null, photo, rating); + placeLogic.addPlace(place); + } + } catch (Exception ex) { + + } + placeLogic.close(); + } +//sharing the place name and address + public static void sharePlace(Activity activity, Place place) { + Intent sendIntent = new Intent(); + sendIntent.setAction(Intent.ACTION_SEND); + sendIntent.putExtra(Intent.EXTRA_TEXT, "Name: " + place.getPlaceName() + "\n" + "Address: " + place.getPlaceAddress()); + sendIntent.setType("text/plain"); + activity.startActivity(sendIntent); + } + +// checking if the device of the user is tablet + public static boolean isTablet(Activity activity) { + return ((activity.getResources().getConfiguration().screenLayout + & Configuration.SCREENLAYOUT_SIZE_MASK) + >= Configuration.SCREENLAYOUT_SIZE_LARGE); + //Check if landscape + + } +//make a call if there is a phone number + public static void sharePhoneNumber(Activity activity, Place place) { + Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + place.getPlacePhone())); + + if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { + return; + } + activity.startActivity(intent); + } +// adding a place to the favorite place DB + public static void addToFavoriteDB(Activity activity, Place place) { + FavoritePlaceLogic favoritePlaceLogic = new FavoritePlaceLogic(activity); + favoritePlaceLogic.open(); + FavoritePlace favoritePlace = new FavoritePlace(place.getSqlID(), place.getPlaceID(), place.getPlaceName(), place.getPlaceAddress(), place.getPlaceLatitude(), place.getPlaceLongitude(), place.getPlaceDistance(), place.getPlaceReference(), place.getPlaceWebSite(), place.getPlaceOpenHours(), place.getPlacePhone(), place.getPlacePhoto(), place.getPlaceRating()); + favoritePlaceLogic.addFavoritePlace(favoritePlace); + favoritePlaceLogic.close(); + } +// snack bar notification that let the user option to turn on wifi + public static void snackBarWifiSetting(final Activity activity){ + Snackbar.make(activity.findViewById(android.R.id.content), R.string.no_connection, Snackbar.LENGTH_LONG) + .setActionTextColor(Color.RED) + .setAction(R.string.try_wifi, new View.OnClickListener() { + @Override + public void onClick(View view) { + activity.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); + } + }).show(); + } + +} + diff --git a/app/src/main/java/com/dt/project/MainActivity.java b/app/src/main/java/com/dt/project/MainActivity.java new file mode 100644 index 0000000..e67f1a7 --- /dev/null +++ b/app/src/main/java/com/dt/project/MainActivity.java @@ -0,0 +1,643 @@ +package com.dt.project; + +import android.Manifest; +import android.app.Dialog; +import android.app.ProgressDialog; +import android.content.ComponentName; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; +import android.location.LocationProvider; +import android.provider.Settings; +import android.support.design.widget.TabLayout; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.FragmentManager; +import android.support.v4.view.ViewPager; +import android.support.v7.app.ActionBarActivity; +import android.os.Bundle; +import android.support.v7.app.AlertDialog; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.ListView; +import android.widget.SearchView; +import android.widget.Toast; + +import com.dt.project.AsyncTasks.AutoCompleteAsyncTask; +import com.dt.project.AsyncTasks.InfoOnPlaceAsyncTask; +import com.dt.project.AsyncTasks.SearchByTextAsyncTask; +import com.dt.project.AsyncTasks.SearchNearYouAsyncTask; +import com.dt.project.DataBase.FavoritePlaceLogic; +import com.dt.project.DataBase.PlaceLogic; +import com.dt.project.Place.Place; +import com.dt.project.Place.PlaceHolder; +import com.dt.project.Receiver.PhoneReceiver; +import com.dt.project.Tablet.MapFragment; +import com.dt.project.ViewPager.ViewPagerAdapter; +import com.dt.project.ViewPager.ZoomOutPageTransformer; +import com.google.android.gms.maps.model.LatLng; + +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Locale; + +import layout.FavoriteFragment; +import layout.ResultFragment; +import layout.SearchFragment; + +public class MainActivity extends ActionBarActivity implements SearchNearYouAsyncTask.Callbacks, LocationListener, SearchFragment.Callbacks, AutoCompleteAsyncTask.Callbacks, SearchByTextAsyncTask.Callbacks, InfoOnPlaceAsyncTask.Callbacks, PlaceHolder.Callbacks { + + //Data members + private ViewPager viewPagerHolder; + private LocationManager locationManager; + private ProgressDialog progressDialog; + private double latitude = 0; + private double longitude = 0; + private final static int FAVORITE_FRAGMENT = 0; + private final static int RESULT_FRAGMENT = 2; + private final static int SEARCH_FRAGMENT = 1; + private static final int UPDATE_PLACE = 5; + private static final int TWO_MINUTES = 1000 * 60 * 2; + private static final int MIN_AND_A_HALF = 90000; + private static final int TEN_METERS = 10; + private PlaceLogic placeLogic; + private ResultFragment resultFragment; + private FavoriteFragment favoriteFragment; + private SearchFragment searchFragment; + private SearchView searchView; + private ListView autoCompleteListView; + private ArrayList words; + private int FIRST_TIME_SEARCH = 0; + private static MapFragment mapFragment; + private ViewPagerAdapter viewPagerAdapter; + private Location currentBestLocation = null; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + //open DB + placeLogic = new PlaceLogic(this); + + if (savedInstanceState != null) { + FIRST_TIME_SEARCH = savedInstanceState.getInt("FIRST_TIME_SEARCH"); + //only happens if the device is tablet + + longitude = savedInstanceState.getDouble("longitude"); + latitude = savedInstanceState.getDouble("latitude"); + if (Helper.isTablet(this)) { + //opens the map with the user location + if (mapFragment == null) + mapFragment = new MapFragment(); + Bundle bundle = new Bundle(); + bundle.putDouble("latitude", latitude); + bundle.putDouble("longitude", longitude); + mapFragment.setArguments(bundle); + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.fragmentMap, mapFragment) + .commit(); + } + } + + //finding views + locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); + viewPagerHolder = (ViewPager) findViewById(R.id.viewPagerHolder); + + TabLayout tabLayoutHeaders = (TabLayout) findViewById(R.id.tabLayoutHeaders); + searchView = (SearchView) findViewById(R.id.searchView); + autoCompleteListView = (ListView) findViewById(R.id.autoCompleteListView); + //Setting view holder in order to let the user navigate between fragments and tabs + FragmentManager fragmentManager = getSupportFragmentManager(); + viewPagerAdapter = new ViewPagerAdapter(fragmentManager, this); + + //finding the result fragment and favorite fragment (making them static) not loosing data while rotate + resultFragment = (ResultFragment) viewPagerAdapter.getItem(RESULT_FRAGMENT); + favoriteFragment = (FavoriteFragment) viewPagerAdapter.getItem(FAVORITE_FRAGMENT); + searchFragment = (SearchFragment) viewPagerAdapter.getItem(SEARCH_FRAGMENT); + + + viewPagerHolder.setAdapter(viewPagerAdapter); + tabLayoutHeaders.setupWithViewPager(viewPagerHolder); + + // Setting the default tab to start in ResultFragment = tab "result" + viewPagerHolder.setCurrentItem(RESULT_FRAGMENT); + //setting animation when the user move from page result to search to favorite etc, + viewPagerHolder.setPageTransformer(true, new ZoomOutPageTransformer()); + //open DB + placeLogic.open(); + //checks if gps enable and if no , notify user with dialog + checkIfGpsEnabled(); + // find Current Location of the user + getUserLocation(); + //Calling this function will put search view on click (that contain autocomplete and search) + SearchViewOnClick(); + + } + + // inflate the custom menu + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_main, menu); + return true; + } + + @Override + protected void onDestroy() { + placeLogic.close(); + super.onDestroy(); + } + + // triggered when the user rotate the screen and save the values (latitude,longitude,FIRST_TIME_SEARCH) + @Override + protected void onRestoreInstanceState(Bundle savedInstanceState) { + super.onRestoreInstanceState(savedInstanceState); + } + + // handel the setting user have 3 options exit,change km to mile ,delete all favorite + @Override + public boolean onOptionsItemSelected(MenuItem item) { + SharedPreferences sharedPreferences = getSharedPreferences("preference", MODE_PRIVATE); + final SharedPreferences.Editor editor = sharedPreferences.edit(); + switch (item.getItemId()) { + //handel the user chose with alert dialog + case R.id.distancePreference: + android.app.AlertDialog dialog = new android.app.AlertDialog.Builder(this).create(); + dialog.setTitle(R.string.choose_unit); + dialog.setButton(Dialog.BUTTON_NEUTRAL, "Km", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + editor.putString("units", "km"); + editor.apply(); + } + }); + dialog.setButton(Dialog.BUTTON_POSITIVE, "Miles", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + editor.putString("units", "miles"); + editor.apply(); + } + }); + dialog.setCancelable(true); + dialog.show(); + break; + //delete all favorite + case R.id.deleteAll: + FavoritePlaceLogic favoritePlaceLogic = new FavoritePlaceLogic(this); + favoritePlaceLogic.open(); + favoritePlaceLogic.deleteAllFavorites(); + favoritePlaceLogic.close(); + favoriteFragment.refreshAdapter(); + break; + //exit the app + case R.id.exit: + finish(); + break; + } + return super.onOptionsItemSelected(item); + } + + @Override + protected void onPause() { + super.onPause(); + // placeLogic.close(); + //turn of the receiver (that check connection) + try { + ComponentName component = new ComponentName(this, PhoneReceiver.class); + getPackageManager() + .setComponentEnabledSetting(component, + PackageManager.COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP); + } catch (IllegalArgumentException e) { + Log.d("receiver", e.toString()); + } + // After we have the location of the user , remove the request for updating the user location + try { + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + return; + } + locationManager.removeUpdates(this); + } catch (Exception e) { + + } + } + + @Override + protected void onResume() { + super.onResume(); + //Start PhoneReceiver and Read phone state + ComponentName component = new ComponentName(this, PhoneReceiver.class); + getPackageManager() + .setComponentEnabledSetting(component, + PackageManager.COMPONENT_ENABLED_STATE_ENABLED, + PackageManager.DONT_KILL_APP); + + //finding user location and update if need to + getUserLocation(); + } + + //before tha async task starts open progress dialog + @Override + public void onAboutToStart() { + progressDialog = new ProgressDialog(this); + progressDialog.setTitle("Searching"); + progressDialog.setMessage("Please wait..."); + progressDialog.show(); + + } + + //on success of the info on place async task (work on tablet) sent the result string to trigger an intent + // white the place information + @Override + public void onSuccessInfoOnPlace(String result) { + progressDialog.dismiss(); + mapFragment.markerOnClickInformation(result); + } + + //on success of search by text async task that use helper to retrieve the information from the result string + @Override + public void onSuccessSearchByTextAsyncTask(String result) { + progressDialog.dismiss(); + //opens the DB access + placeLogic.open(); + placeLogic.deleteAll(); + //in order to Calculate distance in km from the user location to the place we need the startPoint = user location + LatLng startPoint = new LatLng(latitude, longitude); + // Taking the AsyncTask result string and use his information in order to create a place and add it to the Data Base + Helper.PlaceInformationByText(result, placeLogic, startPoint); + //refresh the result fragment adapter + resultFragment.refreshAdapter(); + //moving the uset to the result tab + viewPagerHolder.setCurrentItem(RESULT_FRAGMENT); + } + + // on success words async task taking the result and put in auto complete then create array list of string + //if the user press it puts the word in the search view and execute a search + @Override + public void onSuccessWords(String result) { + //Create an Array list of strings with the Helper function + words = Helper.autoComplete(result); + //only if there are items make the list visible + if (words.size() > 0) { + autoCompleteListView.setVisibility(View.VISIBLE); + } else { + autoCompleteListView.setVisibility(View.GONE); + } + ArrayAdapter adapter = new ArrayAdapter<>(this, + android.R.layout.simple_list_item_1, words); + autoCompleteListView.setAdapter(adapter); + // if the user press on a prediction word it activate an async task and search the place by the pressed prediction + autoCompleteListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + try { + //getting the String of the list from the position that the user pressed and turn it into a UTF-8 encode string for internet search + String text = URLEncoder.encode(words.get(position), "UTF-8"); + SearchByTextAsyncTask searchByTextAsyncTask = new SearchByTextAsyncTask(MainActivity.this); + URL url = new URL("https://maps.googleapis.com/maps/api/place/textsearch/json?query=" + text + "&location=" + latitude + "," + longitude + "&radius=50000&key=AIzaSyBSg3o7puUY7kYHvIOg-VxKWX6c1cjjSII"); + searchByTextAsyncTask.execute(url); + } catch (Exception ex) { + Toast.makeText(MainActivity.this, R.string.error, Toast.LENGTH_LONG).show(); + } + //Clear the text search and close the search view + searchView.setIconified(true); + searchView.clearFocus(); + searchView.onActionViewCollapsed(); + } + }); + } + + //on success async task of Search near you + public void onSuccess(String result) { + progressDialog.dismiss(); + ArrayList places = new ArrayList<>(); + //Calculating distance in km from the user location to the place + LatLng startPoint = new LatLng(latitude, longitude); + // Taking the AsyncTask result string and use his information in order to create a place and add it to the Data Base + places.addAll(Helper.placeInformation(result, startPoint, this)); + if (places.size() == 0) { + Toast.makeText(this, "Places not found , please try again", Toast.LENGTH_LONG).show(); + viewPagerHolder.setCurrentItem(SEARCH_FRAGMENT); + } + //Delete DB and insert the new results + try { + placeLogic.deleteAll(); + } catch (Exception e) { + placeLogic.open(); + } finally { + for (int i = 0; i < places.size(); i++) { + placeLogic.addPlace(places.get(i)); + } + } + //refresh the result adapter + resultFragment.takeFromDataBaseAndRefeshList(); + //setting the user in the result tab + viewPagerHolder.setCurrentItem(RESULT_FRAGMENT); + //In the first time opens the map in tablet + if (Helper.isTablet(this)) { + mapFragment = new MapFragment(); + Bundle bundle = new Bundle(); + bundle.putDouble("latitude", latitude); + bundle.putDouble("longitude", longitude); + mapFragment.setArguments(bundle); + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.fragmentMap, mapFragment) + .commit(); + } + } + + //Showing the error that happened in the asyncTask + @Override + public void onError(String errorMessage) { + if (progressDialog != null) { + progressDialog.dismiss(); + } + Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show(); + } + + + //getting the user location + //-------------------------------------------------------------------------------- + private void getUserLocation() { + // Activate getUserLocation function in order to bring the latitude and longitude of the user location. + String providerNetwork = null; + String providerGps = null; + // Create the desired provider: + try { + providerNetwork = LocationManager.NETWORK_PROVIDER; + } catch (Exception ex) { + Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show(); + } + try { + providerGps = LocationManager.GPS_PROVIDER; + } catch (Exception e) { + Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); + } + + // I had to add this code in order to get the latitude and longitude + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + return; + } + //use network + locationManager.requestLocationUpdates(providerNetwork, MIN_AND_A_HALF, TEN_METERS, this); + //use gps + locationManager.requestLocationUpdates(providerGps, TWO_MINUTES, TEN_METERS, this); + // in order to bring the best location + } + + //wakes in order to get the user location & can update his location if need to. + @Override + public void onLocationChanged(Location location) { + //using the best location we got from the user + if (isBetterLocation(location, currentBestLocation)) { + currentBestLocation = location; + latitude = location.getLatitude(); + longitude = location.getLongitude(); + } + //a flag that allow the search by location run only on time after the program started + if (FIRST_TIME_SEARCH == 0) { + searchNearYou(null); + FIRST_TIME_SEARCH = 1; + } + + } + + + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { +// as we talked no need for toast here + } + + @Override + public void onProviderEnabled(String provider) { + // as we talked no need for toast here + + } + + @Override + public void onProviderDisabled(String provider) { + // as we talked no need for toast here + + } + //------------------------------------------------------------------------------------- + + //save those value when the screen rotate + @Override + public void onSaveInstanceState(Bundle outState) { + outState.putInt("FIRST_TIME_SEARCH", FIRST_TIME_SEARCH); + outState.putDouble("latitude", latitude); + outState.putDouble("longitude", longitude); + super.onSaveInstanceState(outState); + } + + //Handles the onClick of current location to get the list of places near you + public void currentLocation_onClick(View view) { + //Calling the function to activate async task only by location(not with types search) this why we send null (null=no types) + searchNearYou(null); + } + + // A function to call the async task of searching a place by location and types + public void searchNearYou(String searchType) { + + try { + //Searching in the device language + String language = Locale.getDefault().getLanguage(); + + URL url = new URL("https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=" + latitude + "," + longitude + "&radius=5000&language=" + language + "&types=" + searchType + "&key=AIzaSyBSg3o7puUY7kYHvIOg-VxKWX6c1cjjSII"); + //Checking if there is an internet connection + if (Helper.isNetworkAvailable(this)) { + SearchNearYouAsyncTask searchNearYouAsyncTask = new SearchNearYouAsyncTask(this); + searchNearYouAsyncTask.execute(url); + } else { + //opens a snack bar that says no connection and give the user option to turn on wifi settings + Helper.snackBarWifiSetting(this); + } + + } catch (MalformedURLException e) { + e.printStackTrace(); + } + + + } + + //Searching by Images and types (Callbacks of the user press) returns string and activate asyncTask search by the user chose. + @Override + public void popularSearchType(String searchType) { + //Calling the search near you function that starts async task , and get the string to search by it . + searchNearYou(searchType); + } + + //Handle all the search view situations autocomplete and text search query + public void SearchViewOnClick() { + searchView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewPagerHolder.setCurrentItem(SEARCH_FRAGMENT); + } + }); + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String query) { + try { + //getting the String and turn it into a UTF-8 encode string for internet search + String text = URLEncoder.encode(query, "UTF-8"); + URL url = new URL("https://maps.googleapis.com/maps/api/place/textsearch/json?query=" + text + "&location=" + latitude + "," + longitude + "&radius=50000&key=AIzaSyBSg3o7puUY7kYHvIOg-VxKWX6c1cjjSII"); + //Checking if there is an internet connection + if (Helper.isNetworkAvailable(MainActivity.this)) { + SearchByTextAsyncTask searchByTextAsyncTask = new SearchByTextAsyncTask(MainActivity.this); + searchByTextAsyncTask.execute(url); + } else { + Toast.makeText(MainActivity.this, R.string.no_connection, Toast.LENGTH_LONG).show(); + } + + } catch (Exception ex) { + Toast.makeText(MainActivity.this, R.string.error, Toast.LENGTH_LONG).show(); + } + //Clear the text search and close the search view + searchView.setIconified(true); + searchView.clearFocus(); + searchView.onActionViewCollapsed(); + return false; + } + + @Override + public boolean onQueryTextChange(String newText) { + try { + URL url = new URL("https://maps.googleapis.com/maps/api/place/autocomplete/json?input=" + newText.replace(" ", "+") + "&location=32.044,34.926&radius=10000&key=AIzaSyBSg3o7puUY7kYHvIOg-VxKWX6c1cjjSII"); + if (Helper.isNetworkAvailable(MainActivity.this)) { + AutoCompleteAsyncTask autoCompleteAsyncTask = new AutoCompleteAsyncTask(MainActivity.this); + autoCompleteAsyncTask.execute(url); + } else { + Toast.makeText(MainActivity.this, R.string.no_connection, Toast.LENGTH_LONG).show(); + } + } catch (MalformedURLException e) { + Toast.makeText(MainActivity.this, R.string.error, Toast.LENGTH_LONG).show(); + } + return false; + } + }); + } + + //setting the new place that the user chose and add all markers from 0 in order to mark the place in red + @Override + public void showPressedLocation(Place place) { + mapFragment.showNewPlace(place); + } + + //checking if there is gps on if no i use dialog to offer the use to unable the GPS + public void checkIfGpsEnabled() { + LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); + boolean gps_enabled = false; + boolean network_enabled = false; + try { + gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); + } catch (Exception ex) { + } + + try { + network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER); + } catch (Exception ex) { + } + + if (!gps_enabled && !network_enabled) { + // notify user with dialog + AlertDialog.Builder dialog = new AlertDialog.Builder(this); + dialog.setMessage(getResources().getString(R.string.Gps_network_not_enabled)); + dialog.setPositiveButton(getResources().getString(R.string.Open_location_settings), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface paramDialogInterface, int paramInt) { + Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); + startActivity(myIntent); + //get gps + } + }); + dialog.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface paramDialogInterface, int paramInt) { + + } + }); + dialog.show(); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode != RESULT_OK) { + return; + } + if (requestCode == UPDATE_PLACE) { + //UPDATE the place add website and phone if have + favoriteFragment.refreshAdapter(); + } + } + + //checking the best location of the user + protected boolean isBetterLocation(Location location, Location currentBestLocation) { + if (currentBestLocation == null) { + // A new location is always better than no location + return true; + } + + // Check whether the new location fix is newer or older + long timeDelta = location.getTime() - currentBestLocation.getTime(); + boolean isSignificantlyNewer = timeDelta > TWO_MINUTES; + boolean isSignificantlyOlder = timeDelta < -TWO_MINUTES; + boolean isNewer = timeDelta > 0; + + // If it's been more than two minutes since the current location, use the new location + // because the user has likely moved + if (isSignificantlyNewer) { + return true; + // If the new location is more than two minutes older, it must be worse + } else if (isSignificantlyOlder) { + return false; + } + + // Check whether the new location fix is more or less accurate + int accuracyDelta = (int) (location.getAccuracy() - currentBestLocation.getAccuracy()); + boolean isLessAccurate = accuracyDelta > 0; + boolean isMoreAccurate = accuracyDelta < 0; + boolean isSignificantlyLessAccurate = accuracyDelta > 200; + + // Check if the old and new location are from the same provider + boolean isFromSameProvider = isSameProvider(location.getProvider(), + currentBestLocation.getProvider()); + + // Determine location quality using a combination of timeliness and accuracy + if (isMoreAccurate) { + return true; + } else if (isNewer && !isLessAccurate) { + return true; + } else if (isNewer && !isSignificantlyLessAccurate && isFromSameProvider) { + return true; + } + return false; + } + + /** + * Checks whether two providers are the same + */ + private boolean isSameProvider(String provider1, String provider2) { + if (provider1 == null) { + return provider2 == null; + } + return provider1.equals(provider2); + } + + +} + diff --git a/app/src/main/java/com/dt/project/Phone/InfoPlaceActivity.java b/app/src/main/java/com/dt/project/Phone/InfoPlaceActivity.java new file mode 100644 index 0000000..046a04c --- /dev/null +++ b/app/src/main/java/com/dt/project/Phone/InfoPlaceActivity.java @@ -0,0 +1,264 @@ +package com.dt.project.Phone; + +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.ComponentName; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Bundle; +import android.support.v7.widget.CardView; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.dt.project.AsyncTasks.DownloadImageAsyncTask; +import com.dt.project.AsyncTasks.InfoOnPlaceAsyncTask; +import com.dt.project.DataBase.FavoritePlaceLogic; +import com.dt.project.DataBase.PlaceLogic; +import com.dt.project.FavoritePlace.FavoritePlace; +import com.dt.project.Helper; +import com.dt.project.Place.Place; +import com.dt.project.R; +import com.dt.project.Receiver.PhoneReceiver; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.net.URL; +import java.util.ArrayList; + +public class InfoPlaceActivity extends Activity implements InfoOnPlaceAsyncTask.Callbacks, DownloadImageAsyncTask.Callbacks { + private ProgressDialog progressDialog; + private PlaceLogic placeLogic; + private ImageView imageViewHeader; + private TextView placeName; + private TextView placeAddress; + private TextView placePhone; + private TextView placeOpenHours; + private TextView placeWeb; + private TextView placeRating; + private Place place; + private CardView cardViewAddress; + private CardView cardViewWeb; + private CardView cardViewPhone; + private CardView cardViewOpenHours; + private CardView cardViewRating; + private CardView cardViewExit; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_info); + //finding the views + placeName = (TextView) findViewById(R.id.textViewName); + placeAddress = (TextView) findViewById(R.id.textViewAddress); + placePhone = (TextView) findViewById(R.id.textViewPhone); + placeOpenHours = (TextView) findViewById(R.id.textViewOpenHours); + placeWeb = (TextView) findViewById(R.id.textViewWebSite); + placeRating = (TextView) findViewById(R.id.textViewRating); + imageViewHeader = (ImageView) findViewById(R.id.imageViewPhoto); + cardViewWeb = (CardView) findViewById(R.id.cardViewWeb); + cardViewAddress = (CardView) findViewById(R.id.cardViewAddress); + cardViewPhone = (CardView) findViewById(R.id.cardViewPhone); + cardViewOpenHours = (CardView) findViewById(R.id.cardViewOpenHours); + cardViewRating = (CardView) findViewById(R.id.cardViewRating); + cardViewExit = (CardView) findViewById(R.id.cardViewExit); + //open DB + placeLogic = new PlaceLogic(this); + placeLogic.open(); + //getting the place + Intent intent = getIntent(); + Bundle bundle = intent.getExtras(); + place = (Place) bundle.getSerializable("place"); + //setting the place name if not null + assert place != null; + placeName.setText(place.getPlaceName()); + //retrieving more info on the current place + try { + URL url = new URL("https://maps.googleapis.com/maps/api/place/details/json?placeid=" + place.getPlaceID() + "&key=AIzaSyBSg3o7puUY7kYHvIOg-VxKWX6c1cjjSII"); + InfoOnPlaceAsyncTask infoOnPlaceAsyncTask = new InfoOnPlaceAsyncTask(this); + infoOnPlaceAsyncTask.execute(url); + } catch (Exception e) { + Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); + } + //setting the place image + try { + String url = "https://maps.googleapis.com/maps/api/place/photo?maxwidth=400&photoreference=" + place.getPlacePhoto() + "&key=AIzaSyBSg3o7puUY7kYHvIOg-VxKWX6c1cjjSII"; + DownloadImageAsyncTask infoOnPlaceAsyncTask = new DownloadImageAsyncTask(this); + infoOnPlaceAsyncTask.execute(url); + } catch (Exception e) { + Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); + } + } + + //before starting the async tasks + @Override + public void onAboutToStart() { + progressDialog = new ProgressDialog(this); + progressDialog.setTitle("Download"); + progressDialog.setMessage("Please wait..."); + progressDialog.show(); + } + + //after finish that async task take the result info and put in the user (checking and taking information that found ) + @Override + public void onSuccessInfoOnPlace(String result) { + progressDialog.dismiss(); + String openHours = null; + String phone_number = null; + String webSite = null; + JSONObject jsonObject = null; + +// checking what values we got + try { + jsonObject = new JSONObject(result).getJSONObject("result"); + } catch (JSONException e) { + e.printStackTrace(); + } + if (jsonObject != null) { + try { + phone_number = jsonObject.getString("formatted_phone_number"); + } catch (JSONException e) { + e.printStackTrace(); + } + try { + webSite = jsonObject.getString("website"); + } catch (JSONException e) { + e.printStackTrace(); + } + JSONArray jsonArray = null; + try { + jsonArray = jsonObject.getJSONObject("opening_hours").getJSONArray("weekday_text"); + } catch (JSONException e) { + e.printStackTrace(); + } + if (jsonArray != null) + for (int i = 0; i < jsonArray.length(); i++) { + if (i == 0) { + try { + openHours = jsonArray.getString(i) + "\n"; + } catch (JSONException e) { + e.printStackTrace(); + } + } + try { + openHours += jsonArray.getString(i) + "\n"; + } catch (JSONException e) { + e.printStackTrace(); + } + } + } + //checking if there are values that not null if it not null set visibility VISIBLE else GONE + if (place.getPlaceAddress() != null) { + cardViewAddress.setVisibility(View.VISIBLE); + placeAddress.setText(place.getPlaceAddress()); + } + //checking if there are values that not null if it not null set visibility VISIBLE else GONE + if (phone_number != null) { + place.setPlacePhone(phone_number); + cardViewPhone.setVisibility(View.VISIBLE); + placePhone.setText(place.getPlacePhone()); + } + //checking if there are values that not null if it not null set visibility VISIBLE else GONE + if (openHours != null) { + place.setPlaceOpenHours(openHours); + cardViewOpenHours.setVisibility(View.VISIBLE); + placeOpenHours.setText(place.getPlaceOpenHours()); + } + //checking if there are values that not null if it not null set visibility VISIBLE else GONE + if (webSite != null) { + place.setPlaceWebSite(webSite); + cardViewWeb.setVisibility(View.VISIBLE); + } + //checking if there are values that not null if it not null set visibility VISIBLE else GONE + if (place.getPlaceRating() != 0) { + cardViewRating.setVisibility(View.VISIBLE); + placeRating.setText(String.format("%s", place.getPlaceRating())); + } + + //Setting the website intent in order to let the user open the internet page + placeWeb.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent browse = new Intent(Intent.ACTION_VIEW, Uri.parse("" + place.getPlaceWebSite())); + startActivity(browse); + } + }); + //if user press the phone number that trigger an intent to make a phone call + placePhone.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //activate the intent + Helper.sharePhoneNumber(InfoPlaceActivity.this, place); + } + }); + //exit the current screen and go back to map + cardViewExit.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + + //Updating place information in the DB website,open hours, phone etc, + placeLogic.updatePlace(place); +// checking if we have this place in favorite place and update that place + FavoritePlaceLogic favoritePlaceLogic = new FavoritePlaceLogic(this); + favoritePlaceLogic.open(); + ArrayList favoritePlaces = favoritePlaceLogic.getAllPlaces(); + for (int i = 0; i < favoritePlaces.size(); i++) { + // checking if they have the same id if do set result ok to trigger favorite place to refresh adapter + if (favoritePlaces.get(i).getPlaceID().equals(place.getPlaceID())) { + FavoritePlace favoritePlace = new FavoritePlace(favoritePlaces.get(i).getSqlID(), place.getPlaceID(), place.getPlaceName(), place.getPlaceAddress(), place.getPlaceLatitude(), place.getPlaceLongitude(), place.getPlaceDistance(), place.getPlaceReference(), place.getPlaceWebSite(), place.getPlaceOpenHours(), place.getPlacePhone(), place.getPlacePhoto(), place.getPlaceRating()); + favoritePlaceLogic.updateFavoritePlace(favoritePlace); + setResult(RESULT_OK); + } + } + favoritePlaceLogic.close(); + } + + @Override + public void onError(String errorMessage) { + progressDialog.dismiss(); + } + + //if there is image setting it . + @Override + public void onSuccess(Bitmap result) { + imageViewHeader.setVisibility(View.VISIBLE); + imageViewHeader.setImageBitmap(result); + } + + @Override + protected void onPause() { + super.onPause(); + //turn of the receiver (that check connection) + try { + ComponentName component = new ComponentName(this, PhoneReceiver.class); + getPackageManager() + .setComponentEnabledSetting(component, + PackageManager.COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP); + } catch (IllegalArgumentException e) { + Log.d("receiver", e.toString()); + } + } + + @Override + protected void onResume() { + super.onResume(); + //Start PhoneReceiver and Read phone state + ComponentName component = new ComponentName(this, PhoneReceiver.class); + getPackageManager() + .setComponentEnabledSetting(component, + PackageManager.COMPONENT_ENABLED_STATE_ENABLED, + PackageManager.DONT_KILL_APP); + + } +} + diff --git a/app/src/main/java/com/dt/project/Phone/MapAndInfoPhoneActivity.java b/app/src/main/java/com/dt/project/Phone/MapAndInfoPhoneActivity.java new file mode 100644 index 0000000..65aa671 --- /dev/null +++ b/app/src/main/java/com/dt/project/Phone/MapAndInfoPhoneActivity.java @@ -0,0 +1,125 @@ +package com.dt.project.Phone; + +import android.content.ComponentName; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.support.design.widget.FloatingActionButton; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.MenuItem; +import android.view.View; +import android.widget.Toast; + +import com.dt.project.Tablet.MapFragment; +import com.dt.project.Place.Place; +import com.dt.project.R; +import com.dt.project.Receiver.PhoneReceiver; + +public class MapAndInfoPhoneActivity extends AppCompatActivity { + private static final int UPDATE_PLACE = 4; + private Place place; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_map_and_info); + + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + //getting the place information + Intent intent = getIntent(); + Bundle bundle = intent.getExtras(); + place = (Place) bundle.getSerializable("place"); +//setting the map by the user chose + MapFragment mapFragment = new MapFragment(); + Bundle bundleMap = new Bundle(); + bundleMap.putSerializable("place", place); + mapFragment.setArguments(bundleMap); + + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.fragmentMap, mapFragment) + .commit(); + //Sending the place information the the info activity to show more info on the place + FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(MapAndInfoPhoneActivity.this, InfoPlaceActivity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("place", place); + intent.putExtras(bundle); + startActivityForResult(intent, UPDATE_PLACE); + } + }); + + //Adding a back button + try { + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } catch (Exception e) { + Toast.makeText(this, R.string.error, Toast.LENGTH_LONG).show(); + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + //closing the activity + finish(); + break; + } + return super.onOptionsItemSelected(item); + } + + //checking if the place being update if it does if set result ok (in order to let the main activity handle this) + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode != RESULT_OK) { + return; + } + if (requestCode == UPDATE_PLACE) { + setResult(RESULT_OK); + } + } + + @Override + public void onBackPressed() { + finish(); + } + @Override + protected void onPause() { + super.onPause(); + //turn of the receiver (that check connection) + try { + ComponentName component = new ComponentName(this, PhoneReceiver.class); + getPackageManager() + .setComponentEnabledSetting(component, + PackageManager.COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP); + } catch (IllegalArgumentException e) { + Log.d("receiver", e.toString()); + } + } + + @Override + protected void onResume() { + super.onResume(); + //Start PhoneReceiver and Read phone state + ComponentName component = new ComponentName(this, PhoneReceiver.class); + getPackageManager() + .setComponentEnabledSetting(component, + PackageManager.COMPONENT_ENABLED_STATE_ENABLED, + PackageManager.DONT_KILL_APP); + + } + public void setPlace(Place place) { + this.place = place; + } +} + + + diff --git a/app/src/main/java/com/dt/project/Place/Place.java b/app/src/main/java/com/dt/project/Place/Place.java new file mode 100644 index 0000000..8511d2d --- /dev/null +++ b/app/src/main/java/com/dt/project/Place/Place.java @@ -0,0 +1,154 @@ +package com.dt.project.Place; + + +import java.io.Serializable; +import java.lang.Override; +import java.lang.String; + +//Place data members +public class Place implements Serializable { + private long sqlID; + private String placeName; + private String placeAddress; + private String placeID; + private String PlaceReference; + private String placePhoto; + private String placeOpenHours; + private String placeWebSite; + private String placePhone; + private double placeDistance; + private double placeLatitude; + private double placeLongitude; + private float placeRating; + + public Place(long sqlID, String placeID, String placeName, String placeAddress, double placeLatitude, double placeLongitude, double placeDistance, String placeReference, String placeWebSite, String placeOpenHours, String placePhone, String placePhoto, float placeRating) { + this(placeID, placeName, placeAddress, placeLatitude, placeLongitude, placeDistance, placeReference, placeWebSite, placeOpenHours, placePhone, placePhoto, placeRating); + setSqlID(sqlID); + + } + + public Place(String placeID, String placeName, String placeAddress, double placeLatitude, double placeLongitude, double placeDistance, String placeReference, String placeWebSite, String placeOpenHours, String placePhone, String placePhoto, float placeRating) { + setPlaceName(placeName); + setPlaceAddress(placeAddress); + setPlaceDistance(placeDistance); + setPlaceID(placeID); + setPlaceReference(placeReference); + setPlacePhoto(placePhoto); + setPlaceRating(placeRating); + setPlaceLatitude(placeLatitude); + setPlaceLongitude(placeLongitude); + setPlaceWebSite(placeWebSite); + setPlaceOpenHours(placeOpenHours); + setPlacePhone(placePhone); + } + + public String getPlaceOpenHours() { + return placeOpenHours; + } + + public void setPlaceOpenHours(String placeOpenHours) { + this.placeOpenHours = placeOpenHours; + } + + public String getPlacePhone() { + return placePhone; + } + + public void setPlacePhone(String placePhone) { + this.placePhone = placePhone; + } + + public String getPlaceWebSite() { + return placeWebSite; + } + + public void setPlaceWebSite(String placeWebSite) { + this.placeWebSite = placeWebSite; + } + + public double getPlaceLatitude() { + return placeLatitude; + } + + public void setPlaceLatitude(double placeLatitude) { + this.placeLatitude = placeLatitude; + } + + public double getPlaceLongitude() { + return placeLongitude; + } + + public void setPlaceLongitude(double placeLongitude) { + this.placeLongitude = placeLongitude; + } + + public long getSqlID() { + return sqlID; + } + + public void setSqlID(long sqlID) { + this.sqlID = sqlID; + } + + public String getPlaceID() { + return placeID; + } + + public void setPlaceID(String placeID) { + this.placeID = placeID; + } + + public String getPlaceName() { + return placeName; + } + + public void setPlaceName(String placeName) { + this.placeName = placeName; + } + + public String getPlaceAddress() { + return placeAddress; + } + + public void setPlaceAddress(String placeAddress) { + this.placeAddress = placeAddress; + } + + public double getPlaceDistance() { + return placeDistance; + } + + public void setPlaceDistance(double placeDistance) { + this.placeDistance = placeDistance; + } + + public String getPlaceReference() { + return PlaceReference; + } + + public void setPlaceReference(String placeReference) { + PlaceReference = placeReference; + } + + public String getPlacePhoto() { + return placePhoto; + } + + public void setPlacePhoto(String placePhoto) { + this.placePhoto = placePhoto; + } + + public float getPlaceRating() { + return placeRating; + } + + public void setPlaceRating(float placeRating) { + this.placeRating = placeRating; + } + + @Override + public String toString() { + return "Name: " + placeName + " Address: " + placeAddress + " Distance " + placeDistance; + } + +} diff --git a/app/src/main/java/com/dt/project/Place/PlaceAdapter.java b/app/src/main/java/com/dt/project/Place/PlaceAdapter.java new file mode 100644 index 0000000..c14733a --- /dev/null +++ b/app/src/main/java/com/dt/project/Place/PlaceAdapter.java @@ -0,0 +1,48 @@ +package com.dt.project.Place; + + +import android.app.Activity; +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.dt.project.Place.Place; +import com.dt.project.Place.PlaceHolder; +import com.dt.project.R; + +import java.util.ArrayList; + + +public class PlaceAdapter extends RecyclerView.Adapter { + private Activity activity; + private ArrayList places; + + public PlaceAdapter(Activity activity, ArrayList places) { + this.activity = activity; + this.places = places; + } + + @Override + public PlaceHolder onCreateViewHolder(ViewGroup parent, int viewType) { + + LayoutInflater layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + + View linearLayout = layoutInflater.inflate(R.layout.place_item, null); + + return new PlaceHolder(activity, linearLayout); + } + + @Override + public void onBindViewHolder(PlaceHolder holder, int position) { + Place place = places.get(position); + holder.bindPlace(place); + } + + @Override + public int getItemCount() { + return places.size(); + } + +} diff --git a/app/src/main/java/com/dt/project/Place/PlaceHolder.java b/app/src/main/java/com/dt/project/Place/PlaceHolder.java new file mode 100644 index 0000000..2f27505 --- /dev/null +++ b/app/src/main/java/com/dt/project/Place/PlaceHolder.java @@ -0,0 +1,162 @@ +package com.dt.project.Place; + + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.net.Uri; +import android.os.Bundle; +import android.support.v7.widget.RecyclerView; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.PopupMenu; +import android.widget.TextView; +import android.widget.Toast; +import com.dt.project.AsyncTasks.InfoOnPlaceAsyncTask; +import com.dt.project.CircleTransformPicasso.CircleTransform; +import com.dt.project.Helper; +import com.dt.project.MainActivity; +import com.dt.project.Phone.MapAndInfoPhoneActivity; +import com.dt.project.R; +import com.squareup.picasso.Picasso; + +import java.net.URL; + +public class PlaceHolder extends RecyclerView.ViewHolder { + private static final int UPDATE_PLACE = 5; + private Activity activity; + private TextView textViewPlaceName; + private TextView textViewPlaceAddress; + private TextView textViewPlaceDistance; + private View itemView; + private ImageView imageViewPlace; + + public PlaceHolder(Activity activity, View itemView) { + super(itemView); + this.activity = activity; + this.itemView = itemView; + //finding the views + textViewPlaceName = (TextView) itemView.findViewById(R.id.placeName); + textViewPlaceAddress = (TextView) itemView.findViewById(R.id.placeAddress); + textViewPlaceDistance = (TextView) itemView.findViewById(R.id.placeDistance); + imageViewPlace = (ImageView) itemView.findViewById(R.id.imageViewPlace); + } + + public void bindPlace(final Place place) { + //actions that had to do in order to use picasso in the right way and preventing images mixed between items + //default action when there is no photo to show in the intent + imageViewPlace.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Toast.makeText(activity,R.string.no_image,Toast.LENGTH_LONG).show(); + } + }); + //setting the default photo in case there is no photo of the place + imageViewPlace.setImageDrawable(activity.getResources().getDrawable(R.drawable.map)); + // if there is photo use picasso to set the image + if(place.getPlacePhoto()!=null) { + Picasso.with(activity) + .load("https://maps.googleapis.com/maps/api/place/photo?maxwidth=400&photoreference=" + place.getPlacePhoto() + "&key=AIzaSyBSg3o7puUY7kYHvIOg-VxKWX6c1cjjSII") + .error(R.drawable.map) + .placeholder(R.drawable.map)// show this pic before load + .transform(new CircleTransform())//make it round + .into(imageViewPlace); + //show the image of the place in normal size when you click on the image + showImageFavoritePlace(place); + } +// Handles user press item in the recycler + itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //if device not a tablet open intent with result + if (!Helper.isTablet(activity)) { + Intent intent = new Intent(activity, MapAndInfoPhoneActivity.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("place", place); + intent.putExtras(bundle); + activity.startActivityForResult(intent, UPDATE_PLACE); + } + //if the device is tablet execute an async task that brings more info on the press place (the implements in MainActivity) + if (Helper.isTablet(activity)) { + Callbacks callbacks = (Callbacks) (activity); + //using call backs to mark the press location on the map + callbacks.showPressedLocation(place); + try { + URL url = new URL("https://maps.googleapis.com/maps/api/place/details/json?placeid=" + place.getPlaceID() + "&key=AIzaSyBSg3o7puUY7kYHvIOg-VxKWX6c1cjjSII"); + InfoOnPlaceAsyncTask infoOnPlaceAsyncTask = new InfoOnPlaceAsyncTask(((MainActivity) activity)); + infoOnPlaceAsyncTask.execute(url); + } catch (Exception e) { + Toast.makeText(activity, e.getMessage(), Toast.LENGTH_LONG).show(); + } + } + } + }); + //in case of long press there are 2 options share the place name and address or add to favorite (using Popup) + itemView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + PopupMenu popupMenu = new PopupMenu(activity, v); + popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + switch (item.getItemId()) { + case R.id.shareItem: + //Sharing the name and address of the chosen place + Helper.sharePlace(activity, place); + break; + case R.id.addToFavorite: + //Saving the place into the favorites + Helper.addToFavoriteDB(activity, place); + break; + } + return false; + } + }); + popupMenu.inflate(R.menu.long_click_menu); + popupMenu.show(); + return true; + } + }); + + String placeName = place.getPlaceName(); + String placeAddress = place.getPlaceAddress(); + + String placeDistance; + //checking the user chose (Show Km or Show Miles ) + //and calculating the distance + SharedPreferences sharedPreferences = activity.getSharedPreferences("preference", Context.MODE_PRIVATE); + String units = sharedPreferences.getString("units", "km"); + double oneMileFromKM = 0.621371192; + double distance = place.getPlaceDistance(); + if (units.equals("miles")) + placeDistance = "" + Math.floor((distance * oneMileFromKM) * 100) / 100 + " miles"; + else + placeDistance = ((int) (distance)) == 0 ? ("" + ((int) (distance * 1000)) + " meter") : ("" + (distance) + " km"); + +//setting the name ,address and distance after calculating + textViewPlaceName.setText(placeName); + textViewPlaceAddress.setText(placeAddress); + textViewPlaceDistance.setText(placeDistance); + + } +//using call backs to transfer data and mark the chosen place (if its tablet) + public interface Callbacks { + void showPressedLocation(Place place); + } +// show the image of the place in intent (only if the user press this) else he will see it in circle + public void showImageFavoritePlace(final Place place){ + imageViewPlace.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String url = "https://maps.googleapis.com/maps/api/place/photo?maxwidth=400&photoreference=" + place.getPlacePhoto() + "&key=AIzaSyBSg3o7puUY7kYHvIOg-VxKWX6c1cjjSII"; + Intent intent = new Intent(); + intent.setAction(android.content.Intent.ACTION_VIEW); + intent.addCategory(android.content.Intent.CATEGORY_DEFAULT); + intent.setDataAndType(Uri.parse(url), "image/*"); + activity.startActivity(intent); + } + }); + } +} diff --git a/app/src/main/java/com/dt/project/Receiver/PhoneReceiver.java b/app/src/main/java/com/dt/project/Receiver/PhoneReceiver.java new file mode 100644 index 0000000..1c40a80 --- /dev/null +++ b/app/src/main/java/com/dt/project/Receiver/PhoneReceiver.java @@ -0,0 +1,27 @@ +package com.dt.project.Receiver; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.widget.Toast; +//checking if the phone or tablet is connected to power +public class PhoneReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + + if (intent.getAction() != null) { + + String state = intent.getAction(); + + if (state.equals(Intent.ACTION_POWER_CONNECTED)) { + + Toast.makeText(context,"Connected", Toast.LENGTH_LONG).show(); + } else if (state.equals(Intent.ACTION_POWER_DISCONNECTED)) { + Toast.makeText(context,"Disconnected", Toast.LENGTH_LONG).show(); + + } + } + + } + } + diff --git a/app/src/main/java/com/dt/project/Tablet/MapFragment.java b/app/src/main/java/com/dt/project/Tablet/MapFragment.java new file mode 100644 index 0000000..fa02d8f --- /dev/null +++ b/app/src/main/java/com/dt/project/Tablet/MapFragment.java @@ -0,0 +1,173 @@ +package com.dt.project.Tablet; + + +import android.Manifest; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import com.dt.project.AsyncTasks.InfoOnPlaceAsyncTask; +import com.dt.project.DataBase.PlaceLogic; +import com.dt.project.Helper; +import com.dt.project.MainActivity; +import com.dt.project.Phone.MapAndInfoPhoneActivity; +import com.dt.project.Place.Place; +import com.dt.project.R; +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.OnMapReadyCallback; +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; + +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; + +public class MapFragment extends Fragment implements OnMapReadyCallback, GoogleMap.OnMarkerClickListener { + + private GoogleMap googleMap; + private PlaceLogic placeLogic; + private ArrayList places = new ArrayList<>(); + private Place place; + private LatLng currentItem; + private HashMap markersId = new HashMap<>(); + private double latitude; + private double longitude; + + public MapFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_map, container, false); + Bundle bundle = getArguments(); + //if the device not a tablet + if (!Helper.isTablet(getActivity())) + place = (Place) bundle.getSerializable("place"); + //if the device a tablet + if (Helper.isTablet(getActivity())) { + latitude = bundle.getDouble("latitude"); + longitude = bundle.getDouble("longitude"); + } + + // Object for updating our UI: + SupportMapFragment supportMapFragment = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.fragmentMap)); + // Send the object for updating the UI: + supportMapFragment.getMapAsync(this); + placeLogic = new PlaceLogic(getActivity()); + + return view; + } + + @Override + public void onMapReady(GoogleMap googleMap) { + this.googleMap = googleMap; + //Calling add markers function + addMarkers(); + } + + // open the data base and take all the places in order to add there location to the map as markers + public void addMarkers() { + if (googleMap == null) { + return; + } +//open DB and clear array list + placeLogic.open(); + places.clear(); + places.addAll(placeLogic.getAllPlaces()); + //Adding 1 by 1 and if the location the user pressed is true the mark of his location will be marked as red + for (int i = 0; i < places.size(); i++) { + Place placeToMark = places.get(i); + LatLng location = new LatLng(placeToMark.getPlaceLatitude(), placeToMark.getPlaceLongitude()); + MarkerOptions markerOptions = new MarkerOptions() + .position(location) + .snippet(placeToMark.getPlaceAddress()) + .title(placeToMark.getPlaceName()); + Marker marker; + //checking the place id to find match to the user press + if (place != null && places.get(i).getPlaceID().equals(place.getPlaceID())) { + //taking the item location (user chose) and mark him red + currentItem = location; + markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)) + .alpha(1f); + marker = googleMap.addMarker(markerOptions); + //open the window of the place + marker.showInfoWindow(); + } else { + markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)) + .alpha(0.6f); + marker = googleMap.addMarker(markerOptions); + } +//if no place pressed (happens in tablet) use the user location + if (place == null) { + currentItem = new LatLng(latitude, longitude); + } + //setting onclick to all of the markers + googleMap.setOnMarkerClickListener(this); + //putting the place id in each marker + markersId.put(marker.getId(), placeToMark.getPlaceID()); + } + CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(currentItem, 12); + //a must have check + if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + return; + } + googleMap.setMyLocationEnabled(true); + try { + googleMap.animateCamera(cameraUpdate); + } catch (Exception e) { + + } + + } +// when user press on the markers + @Override + public boolean onMarkerClick(Marker marker) { + String id = markersId.get(marker.getId()); + //checking the place id and the marker id that we entered before in order to find a match + for (int i = 0; i < places.size(); i++) { + if (places.get(i).getPlaceID().equals(id)) + place = places.get(i); + //trigger a function that update the user chosen marker and bring info on the new place + if (getActivity() instanceof MapAndInfoPhoneActivity) + ((MapAndInfoPhoneActivity) getActivity()).setPlace(place); + } + // if the devise is tablet use async task to get plae information such as phone web ,etc (implement on main activity) + if (Helper.isTablet(getActivity())) { + try { + URL url = new URL("https://maps.googleapis.com/maps/api/place/details/json?placeid=" + place.getPlaceID() + "&key=AIzaSyBSg3o7puUY7kYHvIOg-VxKWX6c1cjjSII"); + InfoOnPlaceAsyncTask infoOnPlaceAsyncTask = new InfoOnPlaceAsyncTask(((MainActivity) getActivity())); + infoOnPlaceAsyncTask.execute(url); + } catch (Exception e) { + Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show(); + } + } + return false; + } + + //Happens only when the AsyncTask success the take the result and take the info and checks what info of the place we got and if we don't have its visibility stays Gone + public void markerOnClickInformation(String result) { + TabletPlaceInfo tabletPlaceInfo = new TabletPlaceInfo(getActivity(), result, place); + tabletPlaceInfo.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation; + tabletPlaceInfo.show(); + } +//setting the new place that the user chose and add all markers from 0 in order to mark the place in red + public void showNewPlace(Place place) { + this.place = place; + googleMap.clear(); + addMarkers(); + } +} diff --git a/app/src/main/java/com/dt/project/Tablet/TabletPlaceInfo.java b/app/src/main/java/com/dt/project/Tablet/TabletPlaceInfo.java new file mode 100644 index 0000000..8cb6429 --- /dev/null +++ b/app/src/main/java/com/dt/project/Tablet/TabletPlaceInfo.java @@ -0,0 +1,162 @@ +package com.dt.project.Tablet; + +import android.app.Activity; +import android.app.Dialog; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.dt.project.Helper; +import com.dt.project.Place.Place; +import com.dt.project.R; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +//only in tablet +public class TabletPlaceInfo extends Dialog { + private LinearLayout linearLayoutPhone; + private LinearLayout linearLayoutFavorite; + private LinearLayout linearLayoutOpenHours; + private LinearLayout linearLayoutShare; + private LinearLayout linearLayoutWeb; + private Place place; + private String result; + private Activity activity; + private Button buttonCancel; + private TextView textViewInformationName; + + //taking the place and result string of the info async task + public TabletPlaceInfo(Activity activity, String result, Place place) { + super(activity); + this.activity = activity; + this.result = result; + this.place = place; + + } + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_tablet_place_info); +//finding the views + linearLayoutPhone = (LinearLayout) findViewById(R.id.linearLayoutPhone); + linearLayoutFavorite = (LinearLayout) findViewById(R.id.linearLayoutFavorite); + linearLayoutOpenHours = (LinearLayout) findViewById(R.id.linearLayoutOpenHours); + linearLayoutShare = (LinearLayout) findViewById(R.id.linearLayoutShare); + linearLayoutWeb = (LinearLayout) findViewById(R.id.linearLayoutWeb); + buttonCancel = (Button) findViewById(R.id.buttonCancel); + textViewInformationName = (TextView) findViewById(R.id.textViewInformationName); + TextView textViewDialogAddFavorite = (TextView) findViewById(R.id.textViewDialogAddFavorite); + TextView textViewDialogOpenHours = (TextView) findViewById(R.id.textViewDialogOpenHours); + TextView textViewDialogPhone = (TextView) findViewById(R.id.textViewDialogPhone); +//using the result string to find more information of the place and show it to the user + String openHours = null; + String phone_number = null; + String webSite = null; + JSONObject jsonObject = null; + + + try { + jsonObject = new JSONObject(result).getJSONObject("result"); + } catch (JSONException e) { + e.printStackTrace(); + } + if (jsonObject != null) { + try { + phone_number = jsonObject.getString("formatted_phone_number"); + } catch (JSONException e) { + e.printStackTrace(); + } + try { + webSite = jsonObject.getString("website"); + } catch (JSONException e) { + e.printStackTrace(); + } + JSONArray jsonArray = null; + try { + jsonArray = jsonObject.getJSONObject("opening_hours").getJSONArray("weekday_text"); + } catch (JSONException e) { + e.printStackTrace(); + } + if (jsonArray != null) + for (int i = 0; i < jsonArray.length(); i++) { + if (i == 0) { + try { + openHours = jsonArray.getString(i) + "\n"; + } catch (JSONException e) { + e.printStackTrace(); + } + } + try { + openHours += jsonArray.getString(i) + "\n"; + } catch (JSONException e) { + e.printStackTrace(); + } + } + } + textViewInformationName.setText(place.getPlaceName()); + //checking those values if it's null visibility stays GONE else its VISIBLE + if (phone_number != null) { + place.setPlacePhone(phone_number); + linearLayoutPhone.setVisibility(View.VISIBLE); + textViewDialogPhone.setText(place.getPlacePhone()); + } + //checking those values if it's null visibility stays GONE else its VISIBLE + if (openHours != null) { + place.setPlaceOpenHours(openHours); + linearLayoutOpenHours.setVisibility(View.VISIBLE); + textViewDialogOpenHours.setText(place.getPlaceOpenHours()); + } + //checking those values if it's null visibility stays GONE else its VISIBLE + if (webSite != null) { + place.setPlaceWebSite(webSite); + linearLayoutWeb.setVisibility(View.VISIBLE); + } + //checking those values if it's null visibility stays GONE else its VISIBLE + if (place.getPlaceRating() != 0) { + linearLayoutFavorite.setVisibility(View.VISIBLE); + textViewDialogAddFavorite.setText(String.format("%s", place.getPlaceRating())); + } + //Setting the website intent in order to let the user open the internet page + linearLayoutWeb.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent browse = new Intent(Intent.ACTION_VIEW, Uri.parse("" + place.getPlaceWebSite())); + activity.startActivity(browse); + } + }); + + //Share the name and address of the place + linearLayoutShare.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Helper.sharePlace(activity, place); + } + }); + + //Share the number of the place + linearLayoutPhone.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Helper.sharePhoneNumber(activity, place); + } + }); + //closing the dialog + buttonCancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dismiss(); + } + }); + + } +} + + diff --git a/app/src/main/java/com/dt/project/ViewPager/ViewPagerAdapter.java b/app/src/main/java/com/dt/project/ViewPager/ViewPagerAdapter.java new file mode 100644 index 0000000..c0fb1b7 --- /dev/null +++ b/app/src/main/java/com/dt/project/ViewPager/ViewPagerAdapter.java @@ -0,0 +1,70 @@ +package com.dt.project.ViewPager; + + +import android.app.Activity; +import android.os.Parcel; +import android.os.Parcelable; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentStatePagerAdapter; + +import layout.FavoriteFragment; +import layout.ResultFragment; +import layout.SearchFragment; + + +public class ViewPagerAdapter extends FragmentStatePagerAdapter { + private final static int FAVORITE_FRAGMENT = 0; + private final static int SEARCH_FRAGMENT = 1; + private final static int RESULT_FRAGMENT = 2; + private Activity activity; + private FavoriteFragment favoriteFragment = new FavoriteFragment(); + private ResultFragment resultFragment = new ResultFragment(); + private SearchFragment searchFragment = new SearchFragment(); + + public ViewPagerAdapter(FragmentManager fm, Activity activity) { + super(fm); + this.activity = activity; + } + + @Override + public Fragment getItem(int position) { + //setting the fragments order + switch (position) { + case FAVORITE_FRAGMENT: + return favoriteFragment; + case SEARCH_FRAGMENT: + return searchFragment; + case RESULT_FRAGMENT: + return resultFragment; + } + return null; + } + + + @Override + public int getCount() { + + return 3; + } + + @Override + public CharSequence getPageTitle(int position) { + //Matching the name of the tabs to the fragment + switch (position) { + case FAVORITE_FRAGMENT: + return "Favorite"; + case SEARCH_FRAGMENT: + return "Search"; + case RESULT_FRAGMENT: + return "Result"; + } + return ""; + } + + @Override + public Parcelable saveState() { + //Don't save new state after rotation + return null; + } +} diff --git a/app/src/main/java/com/dt/project/ViewPager/ZoomOutPageTransformer.java b/app/src/main/java/com/dt/project/ViewPager/ZoomOutPageTransformer.java new file mode 100644 index 0000000..5efb99c --- /dev/null +++ b/app/src/main/java/com/dt/project/ViewPager/ZoomOutPageTransformer.java @@ -0,0 +1,43 @@ +package com.dt.project.ViewPager; + +import android.support.v4.view.ViewPager; +import android.view.View; +//setting the animation of the view pager +public class ZoomOutPageTransformer implements ViewPager.PageTransformer { + private static final float MIN_SCALE = 0.85f; + private static final float MIN_ALPHA = 0.5f; + + public void transformPage(View view, float position) { + int pageWidth = view.getWidth(); + int pageHeight = view.getHeight(); + + if (position < -1) { // [-Infinity,-1) + // This page is way off-screen to the left. + view.setAlpha(0); + + } else if (position <= 1) { // [-1,1] + // Modify the default slide transition to shrink the page as well + float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position)); + float verticalMargin = pageHeight * (1 - scaleFactor) / 2; + float horizontalMargin = pageWidth * (1 - scaleFactor) / 2; + if (position < 0) { + view.setTranslationX(horizontalMargin - verticalMargin / 2); + } else { + view.setTranslationX(-horizontalMargin + verticalMargin / 2); + } + + // Scale the page down (between MIN_SCALE and 1) + view.setScaleX(scaleFactor); + view.setScaleY(scaleFactor); + + // Fade the page relative to its size. + view.setAlpha(MIN_ALPHA + + (scaleFactor - MIN_SCALE) / + (1 - MIN_SCALE) * (1 - MIN_ALPHA)); + + } else { // (1,+Infinity] + // This page is way off-screen to the right. + view.setAlpha(0); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/layout/FavoriteFragment.java b/app/src/main/java/layout/FavoriteFragment.java new file mode 100644 index 0000000..9caed95 --- /dev/null +++ b/app/src/main/java/layout/FavoriteFragment.java @@ -0,0 +1,57 @@ +package layout; + + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import com.dt.project.DataBase.FavoritePlaceLogic; +import com.dt.project.FavoritePlace.FavoritePlace; +import com.dt.project.FavoritePlace.FavoritePlaceAdapter; +import com.dt.project.R; +import java.util.ArrayList; + +/** + * A simple {@link Fragment} subclass. + */ +public class FavoriteFragment extends Fragment{ + + private FavoritePlaceLogic favoritePlaceLogic; + private FavoritePlaceAdapter adapter; + private ArrayList favoritePlaces; + + public FavoriteFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View linearLayoutRoot = inflater.inflate(R.layout.fragment_favorite, container, false); + + RecyclerView recyclerViewFavoritePlaces = (RecyclerView) linearLayoutRoot.findViewById(R.id.recyclerViewFavoritePlaces); + recyclerViewFavoritePlaces.setLayoutManager(new LinearLayoutManager(getActivity())); + + favoritePlaceLogic = new FavoritePlaceLogic(getActivity()); + favoritePlaceLogic.open(); +//bring all favorite places from DB + favoritePlaces = favoritePlaceLogic.getAllPlaces(); + adapter = new FavoritePlaceAdapter(getActivity(), favoritePlaces); + recyclerViewFavoritePlaces.setAdapter(adapter); + + return linearLayoutRoot; + } +//refresh the adapter + public void refreshAdapter() { + favoritePlaceLogic.open(); + //getting all the places from the data base + favoritePlaces.clear(); + favoritePlaces.addAll(favoritePlaceLogic.getAllPlaces()); + adapter.notifyDataSetChanged(); + } +} diff --git a/app/src/main/java/layout/ResultFragment.java b/app/src/main/java/layout/ResultFragment.java new file mode 100644 index 0000000..ec900a1 --- /dev/null +++ b/app/src/main/java/layout/ResultFragment.java @@ -0,0 +1,115 @@ +package layout; + + +import android.os.Bundle; + +import android.support.v4.app.Fragment; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import com.dt.project.DataBase.PlaceLogic; +import com.dt.project.Helper; +import com.dt.project.Place.Place; +import com.dt.project.Place.PlaceAdapter; +import com.dt.project.R; +import java.util.ArrayList; + +public class ResultFragment extends Fragment{ + + private int SEARCH_ON_START = 0; + private PlaceLogic placeLogic; + private PlaceAdapter adapter; + private RecyclerView recyclerViewPlaces; + private ArrayList places = new ArrayList<>(); + + public ResultFragment() { + // Required empty public constructor + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + // Inflate the layout for this fragment + View linearLayoutRoot = inflater.inflate(R.layout.fragment_result, container, false); + //finding the recycler view components + recyclerViewPlaces = (RecyclerView) linearLayoutRoot.findViewById(R.id.recyclerViewPlaces); + + recyclerViewPlaces.setLayoutManager(new LinearLayoutManager(getActivity())); + //Access to the data base + placeLogic = new PlaceLogic(getActivity()); + placeLogic.open(); + //getting all the places from the data base + places = placeLogic.getAllPlaces(); + + adapter = new PlaceAdapter(getActivity(), places); + + recyclerViewPlaces.setAdapter(adapter); + + return linearLayoutRoot; + } +//refresh adapter if place logic null open new one + public void refreshAdapter() { + if (placeLogic!=null) + placeLogic.open(); + else { + placeLogic = new PlaceLogic(getActivity()); + placeLogic.open(); + } + //getting all the places from the data base + places.clear(); + places.addAll(placeLogic.getAllPlaces()); + adapter.notifyDataSetChanged(); + } + public void takeFromDataBaseAndRefeshList() { + //Get all places from DB to places arrayList + try { + ArrayList placesFromDB = placeLogic.getAllPlaces(); + places.clear(); + places.addAll(placesFromDB); + + } catch (Exception e) { + PlaceLogic placeLogic = new PlaceLogic(getActivity()); + placeLogic.open(); + ArrayList placesFromDB = placeLogic.getAllPlaces(); + placesFromDB.clear(); + places.addAll(placesFromDB); + } + //Refresh adapter + if (adapter != null) + adapter.notifyDataSetChanged(); + } + + @Override + public void onResume() { + super.onResume(); + // placeLogic.open(); + } + + @Override + public void onPause() { + super.onPause(); + // placeLogic.close(); + } + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + //Refresh adapter + adapter.notifyDataSetChanged(); + + if (SEARCH_ON_START == 0 && Helper.isNetworkAvailable(getActivity()) == false) { + //If it's first search and the is connection get all places from DB + takeFromDataBaseAndRefeshList(); + } + SEARCH_ON_START = 1; + } + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + //Save SEARCH_ON_START on rotation + outState.putInt("searchOnStart", SEARCH_ON_START); + } +} diff --git a/app/src/main/java/layout/SearchFragment.java b/app/src/main/java/layout/SearchFragment.java new file mode 100644 index 0000000..7d7a62a --- /dev/null +++ b/app/src/main/java/layout/SearchFragment.java @@ -0,0 +1,61 @@ +package layout; + + +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.LinearLayout; +import android.widget.Toast; + +import com.dt.project.R; + +/** + * A simple {@link Fragment} subclass. + */ +public class SearchFragment extends Fragment implements View.OnClickListener { + + + public SearchFragment() { + // Required empty public constructor + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + LinearLayout linearLayoutRoot = (LinearLayout) inflater.inflate(R.layout.fragment_search, container, false); + + LinearLayout linearLayoutItems = (LinearLayout) linearLayoutRoot.findViewById(R.id.linearLayoutItems); + + // finding the layout that hold the tag of the search types + for (int i = 0; i < linearLayoutItems.getChildCount(); i++) { + LinearLayout linearLayout = (LinearLayout) linearLayoutItems.getChildAt(i); + for (int j = 0; j < linearLayout.getChildCount(); j++) { + linearLayout.getChildAt(j).setOnClickListener(this); + } + } + + + return linearLayoutRoot; + } +//passing to main activity the user pressed by callback + @Override + public void onClick(View v) { + try { + //getting the tag of the layout then we know what item the user pressed + String searchType = ((LinearLayout) v).getTag().toString(); + Callbacks callbacks = (Callbacks) getActivity(); + callbacks.popularSearchType(searchType); + } catch (Exception e) { + Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show(); + } + } + + public interface Callbacks { + void popularSearchType(String searchType); + + } +} diff --git a/app/src/main/res/chrome.png b/app/src/main/res/chrome.png new file mode 100644 index 0000000000000000000000000000000000000000..bee4c59030cc271b2f3da731e0077acbb6168a20 GIT binary patch literal 6068 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 tcDfki7Sl{~lOeijr-f27GBW>$8$(bM6b zj`*sYNkVGEd#t%{A71^6<)2=`p;H|l9WUnjcTIj)ol)4ecZW} z1m^R}SctzCma$k^3}ij_@16YZ5ra@giq(>jcE30G%By$?En%1xeu-0P$<|4A6ZTBn s7PVwIXUX+PB};Zcc(19Xq;!hG`CF*j++78J86lXD9?ml%z3p{T2}VQ_sEUk%94MA8G5qXUn$f7kye{^E`RUy!i@_O?8T| zXL1UuyzqByVgb?~6M$kc#(9qAg0H0*LzCtzFK}8j^|;CNV@?~Czk8l*EYMch+tR2V g&c&TPbLLHMiMh-N{H%+20$s%5>FVdQ&MBb@004zT7ytkO literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_drive_eta_black_48dp.png b/app/src/main/res/drawable-hdpi/ic_drive_eta_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..dd8b9daded747e871fe94cb57b0e72c52fd58882 GIT binary patch literal 469 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_local_airport_black_48dp.png b/app/src/main/res/drawable-hdpi/ic_local_airport_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..dcc2a5a1b1d6cd97e64831ed5c85cd8bc6fc24c0 GIT binary patch literal 461 zcmV;;0W$uHP)mN)WlA4Oj{Fr z!7;ujv zW^IN8ZJiVT;YTMl4-dJXGL3Hn2{aK5FXvlpTL6x1Y{K8O_5I%5-joTGS}A zOpzKbmqG)YRLC<)o(fF{R)xlIl4d&T@q5iBf*^bXGWZn@bZ52D00000NkvXXu0mjf D{YuMv literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_local_atm_black_48dp.png b/app/src/main/res/drawable-hdpi/ic_local_atm_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb6761f26210ade8f1b096aa1c89d2675fd5f9e GIT binary patch literal 301 zcmV+|0n+}7P)1p=5QX8tlJ*kz5reSrVG#IEf!Mf+(K!@BFfNizx`Y%Hr`g$wdH<^=zG6@zlu}Bm zyQ?tp#4A>LS59mx+-Sua3*5vS{Cb|T;7t_V9X$$mTVx40ew^f3FIeGGLXN8kuKX&kJ&(TEGXzp{rA_6 z*+3m5a~_bNKxskdPoVz_nzMm+nLsl;x&TnXQvwBmoMJ!%U9zvKssz!|52B9RY%8#)O&X|%wRoU6E# gqKK2D01KnPf628+M-@5hfuY9W>FVdQ&MBb@072@9xBvhE literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_local_cafe_black_48dp.png b/app/src/main/res/drawable-hdpi/ic_local_cafe_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..ce2aadefcd5dadb238528db841b96e9a77bead53 GIT binary patch literal 283 zcmV+$0p$LPP) zs3V6Mpn;Z>1MCShC6GV@3A8up%bhb~>eU_8W9rcz)L`n?9aLfJly6tgM8ep;E2zfY zkqe_{Kfn#U98!xNCxy0QsU))4Z&L$nX;enoU6=bBRp(3G_3f}yO h6G)){2~tWa#Sb=!m^w`grPTlc002ovPDHLkV1hhyc47bk literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_local_gas_station_black_48dp.png b/app/src/main/res/drawable-hdpi/ic_local_gas_station_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..1c7b0dd9f2c58c49563933247921306fcd5b142d GIT binary patch literal 504 zcmV8ESB6rMEfO(S79lLXwX7ML9kR~ zpMdVD@S0-x6vH6NIKEGc=bY~F7Qbqe2hS?;cs!ma118J~OLULd+~zRzgW#&RVlRUQ2p*Qc7=aZCGI9bc uId{Mk1gE&q2ln{Edq$jO`FK1YkLM33{|$S3fq5GM0000 zi^tY~_Vm2r<+{S$>r$1|-sO#IPPI!L%bflOToQYw_`>8u_dgCH6^{uEp1)LZZ1Q`x z4oI?0t>+d}(Rf&RmYowMr{LI_+RP$b{(Gyz@<9VR@(QqcvS->P)!2PJ-H@rHV$L$%!{Psm^&nbmf4NDs!00GCXBW5P9(i&9mcltT_n9>4aSD3%Ow3uICgQ2 zjr=FWc(D&`CQobQ>*Xz@9Ht9Lp&X-lu|@Xg_43>xNU@I>XQUCw| literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_restaurant_menu_black_48dp.png b/app/src/main/res/drawable-hdpi/ic_restaurant_menu_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..5316cb7f47519129d18d09de7aa60c3df8f440ef GIT binary patch literal 692 zcmV;l0!#ggP)JLnxutft#%S!6a^2h`tI+azjr zs#Op{bm?Xb)j>qGAf;7;cm(5M`kHg!lN(-_`+TPi2R@M88Nd|HU3j;i1x8y!%F@p~^3Q!Ck5?VMMG#7{Nt>8PlvU}*qtgh| z0@5L>NW?zTNkl0={B=-nnsf^B+9e{&BS>u0VZ?J^=|Js*b5b#rHd95s*Mr&!f=g;Q zJy|n|VJA_0j>IGlAf{bJ?OB7f2cD#5EEqvW)P|8*q+Z0hGpO|`rw=_yQ)bXU)V3fo zNUIR@x=?H5y?XvgCG9tJUJ==GL?Sb<8zMDjGor zJj?UFDbfiO=QSz3+ZjoEj7!>T;LNcWQ#<%(CS{oQYv#OR4YA5M{QrJx=6t3=3O75+%z44by3ap($x*Vjs2&zfocp9{ zV*^L%rH=x;SW1iQt|LuEa^hzo>70@H92;qZoWdC;O~AG>rf_PY453pv;Ym6tJW1z- zCn-PWQh1X7pl2LXDF{h<4TdLaoS-CybFan;N>Vt(HO?YZ*(HVIqyRifWjo2vx$AHO zl2lH3lFPZ{Z~~HC&TWSikmPc1xg3R5aY^AhI;lb?04D^=<=kWmKv0sxx#4hvl7^7F zU3WRA+8xp$rdIOK&M}atSq@gx%%9_Hc8*R`IZ7*jlZNaZjpT5Qq@tY@LAq+^Bqb#! ah3pseEbOPv=J5Xj0000UZPF>#3%k9#08-1VeKX7y3y)WkyiA4SZF@~9C4WBJmnPCX0 z4zY{`TA~+6`Y9urmFRP`J7pxKlKw8mSVjmhhq7VB(jcm45lbGb)(}etRQZUd3aYBj zwxF+wr95hqT&Ij!%AjPVwmX&vP;ii!NL{_7;o5nKkJMF>12j~Oi~K+Wz2{fRa*okZ zNBMvR`p!9G?B}idu^PKOT|8ym_`}>|Cp80j6!58#C&K^@)XEJ?NTBEJ!->-rkU%S( zz=aK6bWB+xg`IvdW7 zD%@pS~Mow4tCcWJy2G*_n05h-vIn4hi&{y~G$}-F#he1O2C?)6Rf~wFc~mVRmgbu6lTD*4jaWL5s!q#2`%N3lZX@Aw6Lm>) zNJwvp<3K0bkmYpXNPxCV(^u?_mn{=F~ZiE?Ym3==!Z50q0arg8`6(hH{4WQ5$?<|I?QkKB8N z!7+X!*AnJ1d5m1UjnN6@*e4EP_6)go6$hu0Q*YUWibf?3w$8U%GZER!Io{y&ulT~-(| zqR#?#`>o9!Z_tj0%=+Kj{)g5G##@69N~vSKHRz#~mW{Utn<%Bke*4c1dWBNz8E*~R zD5bXX)*vuIyILifZw;CZcKu}2erpqce|{wNXcJ7grK?mbzW|>;ux1f-#*zR4002ov JPDHLkV1j>l>YxAs literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_spa_black_48dp.png b/app/src/main/res/drawable-hdpi/ic_spa_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..945c694e8776c2624855d7cebac352548c61d1fa GIT binary patch literal 767 zcmVsY7Lk^MlB3YL!`0 z6lkkz|IqnesxnWD0==ms1NvSRYABVMQWR`Dl~`63Y}v|xiaD*T65ZDEzR2l4>*!La zFMZ}M54plYRyTRZ4u{P7^iMLRG+m~!hJ#$;A#eH27gBwa*zG4Sv$o;&Z2@nl%!U@w zw-K%5a-SyF|45pY1AOmlOY73xFs>Det~0FOx-IA0l;6ecQavhCd)bEilhkEj@t5}2 zDXD*(cvYnKkW`n6%wDyM4oR!~P6*#xMN+5Ly)H7lSgONCZg-nZ(&E1MrG+F-;a-v3 zp;E0Q3iOTbb@{u6%;WF6?C4ujpf#nMRut?yL(4L(n?%8;lBz%7h=RRhB55Y|nkd-U z`jz1(QMixHrZ02&L=^6NnYI!o`of%&=JBN{(dIHuC`z8vjQ(oolBW~Km*XK(s`riO zcN6$fl2{*~0gtj=r;z2AkU( zqQ+h|hb9=(d7^yIG`OZ&z_X%6Pnk!P^=kvK7kp6b>PIE|vyR6^MvquizbZDPlj0JeU9g002ovPDHLkV1j@yfY$&3 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_star_rate_black_18dp.png b/app/src/main/res/drawable-hdpi/ic_star_rate_black_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..cd18bed913c126de8c9722957f077d9bc903ab63 GIT binary patch literal 255 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-ldrtl-hdpi/ic_arrow_back_black_48dp.png b/app/src/main/res/drawable-ldrtl-hdpi/ic_arrow_back_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f60959bbeedf0501ced0915a5e2830745c8ee0b6 GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhawdOTemLn;{G-aIOK*g$~oVy;37 z-&CpO$;X1u^l=;fy=1L5Il4%^Y(yfVQ<;@Z^1=Fl0&s>BSIJ^yFVdQ&MBb@0NMt}J1yh===S%FqMRYmK>;9=ye>G`)9){t)4jDXdpXa<=vxETF+6a-vLfg2&T!Y)0#bbhkBa~razu#`Q!DZpJszW}$0uKbVrU!mc`t{}I<>mhK?P?*6{R{J7=qJ3n n^kDVH$F~pPKlYvxXiEZP=~30q4)Jd^L3Vn&`njxgN@xNA<{nHv literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-ldrtl-xxhdpi/ic_arrow_back_black_48dp.png b/app/src/main/res/drawable-ldrtl-xxhdpi/ic_arrow_back_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..d81812d62e704bf9e797d404a0bb05416f7ec016 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ(Knm!2+;Ar*{o?_OnWF%WP#DB>1> zBJ=r1rY70+Gv4fyHPEvuQ{P#2cm2C`NTzuzAD%lvjR6Ohaa7OsyO!Y&}E3TOq z2wY`z=@3wKYT*!6a@i^UZPF>#3%k9#08-1VeKX7y3y)WkyiA4SZF@~9C4WBJmnPCX0 z4zY{`TA~+6`Y9urmFRP`J7pxKlKw8mSVjmhhq7VB(jcm45lbGb)(}etRQZUd3aYBj zwxF+wr95hqT&Ij!%AjPVwmX&vP;ii!NL{_7;o5nKkJMF>12j~Oi~K+Wz2{fRa*okZ zNBMvR`p!9G?B}idu^PKOT|8ym_`}>|Cp80j6!58#C&K^@)XEJ?NTBEJ!->-rkU%S( zz=aK6bWB+xg`IvdW7 zD%@pS~Mow4tCcWJy2G*_n05h-vIn4hi&{y~G$}-F#he1O2C?)6Rf~wFc~mVRmgbu6lTD*4jaWL5s!q#2`%N3lZX@Aw6Lm>) zNJwvp<3K0bkmYpXNPU7)bX8PvpMCyj1<@L zk_wJ!3Plg>lVDHjd_C9D?zol5B&k{u#QWlcjS^iJqOG}YYxl0>XNS9cyuR_zENF`V zL^YY57oxS@wViYo^MZIwM)XOxQ>%0x?{xgp-Z&vypCOZ$d^P#|I@U}HMUNbiU60c~ z6f0KT&@a1w*R2#wK02dEcKbaPil)^-UBkSVhPrf)d;Q1fdtc~iLRGR}!xn{j#$~b1 zn6?mYP$o6+gh*quX$g^LyS-pWHVq-tsBG#&qyZUC2&L}Hs%pG6z9PFpV`j}5HQ+C_ Z?icFHxy#pVb)^6R002ovPDHLkV1k48;SK-* literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-ldrtl-xxxhdpi/drawable-xhdpi/ic_share_black_48dp.png b/app/src/main/res/drawable-ldrtl-xxxhdpi/drawable-xhdpi/ic_share_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..5a8544ce5d6c8bf471c8fbd54cf4f88254ea9ccb GIT binary patch literal 888 zcmV-;1Bd*HP)9LMqRypZ5w`JO>))98$f6)oE2rdCPO(4t&OEy|HVqeUTEVJbno>6L`orcEYB zO@<!#gj`DvJ3WY+U zOXmgB9rTlB8$sA6%WE_c81+o!A$fUBQ49J#&EJTj15zm0gJ7>4#oCY}dJ?5-IY5eN zpBhw}M2c)2g=+DTB0D3FI(>*kub|EX;?NxGY$6V=qfQQS=oocQ5r>XYXB~0qXVl3e z4tVzmNT;dsiN1Pi)h5PviagRT!#CK8B$bZVC8K2!qANxqb ze#NtY#_=pZYi128*dhH~rkNeY&<>B`tGoCTF*HdH08qt9fnCb+E*1Ewj3MJ(e#-+~ zR7EGBvc?{}{Kz!VQ|a$qwzFkC7SC}5s@=!e##izkZb7x%_y94q$UP_!vCL%;d&aNH zC-7Aruae<6&hXeGLoabIdX!b`T>2=%Bwm5@oF)bU+{qV~xs2nhR?GF%E-l>5TjY#$ z*@VwtMyz>kYo5!e5PQ1kGR{6?PWxQK$A~#ab7_#^3~}m^0WPCPFJegBTpG+H4$TMs z?(%xj?=Ew}e*kqhf_{YNg8mYBBTjun9ja7wia2$|>y)C%hlq0X|_d z%}}r7A-edCpE%%<>&)^3Q7%gIgYj>?Z%_*QmGGkRxNVXm0{T@jVtnnFXe1CCSu$?c zC>7{OgcO^`%dnRyK|kxfF7pWa614L+0CA`db%qd! z22p1macB&6(m{WK;h-O(4#c4p>Li?IGzvlf-`xdNN+Lzpgi=#T5q*SO<*Xp~_>M9Z zt7h5$>vKEGU1h>@c*+QbhsfaN4d(()1WJrH1{phVkQ7lup-?CkD#AaVcIHkIiEiWo O0000VIl}B+> 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 IM6N<$f|G7Y;{X5v literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-ldrtl-xxxhdpi/ic_arrow_back_black_48dp.png b/app/src/main/res/drawable-ldrtl-xxxhdpi/ic_arrow_back_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..8836f845e51d8070923140e2718ba40f2515d822 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvG8AvYpRA>UEqyv0HT!Az$FeUJj0#J^lB*-tA zLDIvJCx;TbZ#J#A9&>;fOp0ikue z-VuDWHvE%zY+~UQQt_BjaE$ZzdI2C~!{e6Y(?KE^>f#PC-&3EW27@9BKBW$6`%ljN z>v(#OzV(mp;@8{;Pt}X(ODi}uH1x8`XgD-5FlzHes4;K|0EHMBnHm)34P2ibpQ5Aq yXTem}7J1RlEguf&O`E`Z?CXj5j9`~O`^qAoR}>z#%IOo(y9}PLelF{r5}E)9^K()F literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_account_balance_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_account_balance_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..3372ace32fc467484218447bc0d1d8176f9dffea GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0DO`a}}Ar*{ouWjUQN)T}WD9**T z_C?0Zm!%A935>A~tR;+M7g!@2IAt0bGqzso>v9qlgdu;?ZYwnscL;!eYmJStmF)97;dWoB8q--~2$EpsXj}rkZliXKn^5+OE1`aJa+! z5Ub$}pC)g8zHGk}4Sj10UI+v$DQk89)L7)86C!ZYOJ^DLT;Dm9!k3lHUSI^F84OGN fr}IgeYQExQm|)DeRKEEQ(De+Su6{1-oD!MElXU7bYqK4apkmv&921b zM#G$Fpy^9{Y%!oihe2EIby`y-Ok0PIew4{vv00G`*LAvu~pWg z&u6ZgP~sjn)XhfOygRfqY9X@U>q5J66^=&9r|PQoIu-dhB)DI+w^oX^VuX8DSQEQH zuP#+@Y}8NMwe(or+S{dLEN=J1T8X#zpcGGfP|lHfyIUBJ=YB}Fr!@WTA;3ty7aNs& zK978r(mrqajT+!gUj3|6C-TUiC}&?@{f;v6dDyaw_KfG%GfFMykpV$ZVtX2S z^<|}&^GJuBeis}_YENfgy_7!SCKqHfuU52A9S~bI2DK;(-?+@ZqUNne8gc2 zBU-iRt-NwdOS|&eiqXP|KIQI;Pu)%}wa3x1pjWECIHoRYQ{le2p{J6M%rBy5y995F z5qed*!RL{GU6O7yQL6 z)UeH@DNT`ZF4`ySc1V`EUejq+CM;Aozi2zF*X~i@m9%b}vO}Byz$UvLH{-G;S6wpg fn5S)U-T%Tr`1&-gMaS0200000NkvXXu0mjfmmrNM literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_arrow_back_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_arrow_back_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..6073eec2080388c835d0e6ea601a40f8ad7122da GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}tUr!gukP61P(+)Bo5D;Kluf6u} zXRk2E7YqtXY5zA1xXfZ?I32mF-*Q`6{G#lyaWYk3UKqb%-xRTbaYE_Qb-v4*xU^PW iIBLIN{&y{V1Iu{>&YJAEnrc9U89ZJ6T-G@yGywoj94*xV literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_delete_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_delete_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..796ccd22559a9b362e6cbb0c804a443bf1b3c113 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0DXipc%kP61P7Y=eZ7znUlT&Wh3 zX2lgXgX5!|^oI$(N1D&Q`D-6>CQj>eo}T~gdcQ3PU;8~!-+H4~OaKZjoIg)3i005} qiMH7Fyj-Y9Kzr+B%hn@D&gi|3kyH5eQnCbS4TGnvpUXO@geCyhvNFd2 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_drive_eta_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_drive_eta_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..7b4d0df7b9fa2ef3a89c1d022fdd5410ffc06f87 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}cwPFba9PIEGX(zP+^Hi`h}+=)?Hs z9iC#^8-=ZF#dUMvuqdiX=p1#Lf6)GYVzPQf*VbpUSG*ie1P_UdUC$~zcV^Ryqkr?N z+nC!IwiV~iD~{XHQ~k8Za#Cyp@4G23-FwWnDv}#jtW#@z`V8AP`c7JH1Y`;GJQmub zYIpjBm8F?Mk0$G-d2$*?m-H_6f+*8NT*kHmDN7_zyU4z1JmT@&Wx{mDjXdFS+Kd&HDYyrfKiqbKAYRyzq1br<&e`tE{zJ&XEEqUN!Meou|W*QtCL} zOOcx?GS*;$(InQ!HF`4)mbf46SgFI2TK{r(Rik*yFLl=Q_7mN=u;p*B_|=y)$!|~T bxmw20D!b;zJ>Gu;7)T7Bu6{1-oD!M9BEFlL~T9Z9%*|yzHE_f5+YJ^WJRddEVc9&V!suMMaqe=q5&z zGz&}-BSH(=S~NJ0GckRp?{=INygg=TItZ|a%lD$B^Dg9I6yHBBb~ zdzrEA`9xdp_#b3)tVIrUgugj^rtOdLYj;0Egm!$?vWZiC(2iJ?&+j-%h}!=>U3`}7 zAMFO!BP~%3bZ*XO%{)y67dnG$QoVwO04a&LvQNABc{;HmN6gZQNw*Bgz}h7_-~!eR z8FCntm?}lEQ^x=?V)Wy|&S{nM5R;@Twc|vaN}0qYtx7(eFjUGMCUdIf!3nQQNntXj zN+F!stWv&UGOS8RapIUt8N}qgDvjX8Q)pJ$Bbi8C@;@s-$C+- zO6z^x6r!4b*>jz|Y8a9BTe!%_%^m3oxU zU*aZ;5M)xe-lGO927S^q&Kioeo(b9h2rt>{7?OH|ASDQDgBoQ8x|O`phO?Fut>(SN zyrCJCR^H0>F#lIA@Wa5&R7)AqAjKOv)iSSNsJrbpY16CFS`F=@Y;GAGqS5Au%;Jgde?PnmA-f z?TmQzidPy^_{J-BVoN-1SPc$ZIX@S_CcKd#uwFj}!YOcUq!6^_ThX5ymQh6u$8;v! z>sQg8#QRq4P2jyNavV+LmG+3D{c**C@CFLSQPEZHHc@m*RJ)y*a%U!9wcEc!cp~cH zTQQ2S0C-gh|9tgujDS*%;!{G3z7@j1T?0yf71LJ$mWnHutpq6;ZQZKQRrf z!HJ~UvYFZ%G0*=e%!7OFj_46itegh1BVM&Tq6!olOf1YTH@s@M&ifL9@c;Ry$pC?? V$Os;B04M+e002ovPDHLkV1hJqpLhTO literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_grade_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_grade_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f649a5d56bf57bf3833f9fa372d65c7608a62ca8 GIT binary patch literal 474 zcmV<00VV#4P)Pqi&Plbehxfoa3B@n(MQDI(I$i>GscAHMCT%uDhm2TP*l$lXN;1 zF`=p3gqn1DBZSvF)#A8lcT_DNigx$aV7JJ$OXaSLO#iD`uP-9gXB(=0rsLMh>M^E5 z9bSrM&1k61sF3f71Pyr&y*A4>WKiC$Deq+aC{`YD!v6N>`gAGhyASPAllgbnYf@Cy z0~^Wfc1u*y4NWU(xFG(r^ZsDmqA1xnV-g%PCrb3mh(tThih{keLplSVi1bY9SI~O* zL}GXKD5298kojwUa*oC)#{gQu&X%Q~loCIET=VpRYD literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_info_outline_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_info_outline_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..b706f0d06a9a1e5e2f6606c01e84094ee6a99b42 GIT binary patch literal 640 zcmV-`0)PF9P)o#88fEO5na|OlO{3G z*yIPEVO{WsIjnKnVT>2DMzkql!ApMPMO=L<#3I9oI}LubOO+CNvScYxqQ)LKcQkDr zB9h}Xp02N~GG)+JIYyNnkc)PDZOnzu*#; zB8R%~1(i4Rl0>e>Eb#WLtxfOV(#vvo;8MrfX8# zOJwj-6bRC^RW#U^^>`Uk%GqUlp=9>%y-#&$qZ(w=qV2=#%SNueJg~}R_Q4VL}5`+@9~aM z91c`Iph*TZkfp^?^`Dp^0y)$Ij}vN48)8+LhbiruA|j3sO47|fb;`I*GKou>Ivq)^ z4u=V1QQ;ad;<{u73-W9;3T-}Qiy5qW$_D4g=4Y%kOJdS2(WFC zStiOD4``zbKWnC#UcQrX7*ljnNXq1Mi)9i?Mx1_fNP)xrA>ne&Qpc(YaoY@Fe8(f6 z=<|x{Lq9=WlFl<@;YW_pC(rW~Qp|!_Jse}g@O(@fE(jUn7ic0t7V~1a18_#H--HR# z%94>HNK$lj7^f6~X0dJ35V46HF=_a5TzA_PEm%%-omJ^s{?29 z_2i6e_zF>$$VUCN>}8^CB_hg<_}Ow(oECK2@gjl7EXGapbf!#E{RD%XC z>%VFdB`k{7OCu4(bC5J#5|oXy{-_V}RGu5Fl^we_WgdmKZ36~CNPtTb=>(|Yt zA9g&_)%kFSbGC|7?PZqeIiEhszrV#Aqu_j$BjiNFMBY~%%Sx|pbeYI!bcoM&je=qn zPsz%_q^FmKOm~?v^VZm0`lHs{?%zD~z(>ZI#0%96ddlK~!N=g~>gTe~DWM4f#?YLv literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_local_atm_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_local_atm_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..44017d8cf95c17abb4da33f76ee9f8200587143d GIT binary patch literal 227 zcmV<90382`P)^~VhU`i-r>^OBuw?m0g$lrfEzQSX9vtkT0ks-Zw`Q}AV6=TNqq*R z9WYrO^1p`~#*~1rJV4?r9vIRB16Mo1T3SvaZX7F*^ dL%^=Az+x)o7%*)E2b~9(6?~I?on&hWF+vMSe zBkS^>S4_0Jwso7s9II)i+x=wMUpTZd?0ARK(%HmSsgi(c|_> zT#l<`Zoltek#ynU%&-5Zl=bP0 Hl+XkKLaS^Z literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_local_cafe_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_local_cafe_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..53e3862fe5a598ef3dcdb25af3e2fd5b6c8606a0 GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0Dd7dtgAr*{oFB$SRIS9Bty#COW zgZJTvgePJy{0TO!$GjybZ#|H9{obK7JU)qYzF)VFcRH|8LreSn6PLxzU#c(sU}{}# zK4BZX-Fg-5%c0PriMIPNHak~YOoeTaP9lifG|k|#$Z7q@iRNGa266A#QE^v-JG*IFfhO6 zB_u5^Q!+d3m%g)N`oHhD*dN_~6Q^7=pjR?h(IxtxPmJ4s#I6e118{|@cYO#$t$H7D zgQ@qV2;i7_AUOjC@kojQV8H=XpGf||1$NX+Z(xD_=-d~0(|%^ih^)Qw1rFLn?XmVp z1TfN`V5%#y(awySu&M+qt1vHLd;vI*2H=EOIyzq5fg&zIaoqxd;<|+b#xe#_wD!?} z#R3gzKm*E?+4%zH$y`UD%vtQoJcGECxn@Q{T3WsUdZ{9G-aAP900000NkvXXu0mjf D`FVo+ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_local_hospital_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_local_hospital_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..abdd0835bda718f364cae737ae1f500ea73e8019 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0DdQTU}kP61P*BrSH83?pK{BL5| zE}m4qAu4D3s~zHM3yhOE-`C$hz~1N(ptV<6JnzQz+cQ^|XvJ)Na80i8n2_1SZA%!W z^U8Hn^ZM(V@;L<_e39Y$VZzwX%+$_uM1B?n<71|OeJpSG|NC=J)8X*iO-ToJMP3LB iM?WZ%YJD=Lit#<`zJdkXwah@LFnGH9xvXI3=I0b)vc2`-+cmU^>p=fS?83{ F1OR>O9ispM literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_phone_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_phone_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..99f28bbeca97715d85975921dd64fbde691c7ed9 GIT binary patch literal 408 zcmV;J0cZY+P)Jz(nTd8(K&U>#oAFn^y`zjyGXQF#zM7()Aet$noem0I<%p-vB_K zOIkhy0F#7VQy1oIC^F2m$2s@BQssv}HMU74RQ&>86OIco?%@#t00006 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_restaurant_menu_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_restaurant_menu_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f5c20a730cea825341b1e7728d95acf97d5ec798 GIT binary patch literal 471 zcmV;|0Vw{7P) zJxg0r9ETqh6$eB2Hho>Y^b2$-r48bssLA!l7l;xNLGS~pi#R#y;O3%>2qF$njsX$v z?vgf8NQZRj2gprNx68%+a?i1xq0l_P^_=JV)90U{&k$qma={hHRLPObJ^|p)AZs)+ ziTz}fo=jtia8JD93#MxwCO~tK!9DSg7DlecsQeH=h?vF3Yo(7@L9l{xPGq^mr0fvE zCdN6jib>rif_02zBFlG6;0(bhOjjaA@eyO$4uWBRIVQHPfe%PFFiwdRi@rey$q2VH zQ3jHnTLM*j@{~IE#6haQMursf*b_mDzR5EzJm;$=vDj1pgSSZRiQiNJfRG5SuaU=* z7kqo5UjhKiXnmb!G61+Ignlm8w+WeIk5i7=;ynXAnwK=X^qp8=#DZf&ULR4y6R!x9 z*T;bXUkJUwgwRJs9uq=eA`l6WdO#$+>b)lBV|_c;i-d2zNchovNN9Z#z;8n9y(Jd3 z-d95Fy(PvI`WdWU7)bX8PvpMCyj1<@L zk_wJ!3Plg>lVDHjd_C9D?zol5B&k{u#QWlcjS^iJqOG}YYxl0>XNS9cyuR_zENF`V zL^YY57oxS@wViYo^MZIwM)XOxQ>%0x?{xgp-Z&vypCOZ$d^P#|I@U}HMUNbiU60c~ z6f0KT&@a1w*R2#wK02dEcKbaPil)^-UBkSVhPrf)d;Q1fdtc~iLRGR}!xn{j#$~b1 zn6?mYP$o6+gh*quX$g^LyS-pWHVq-tsBG#&qyZUC2&L}Hs%pG6z9PFpV`j}5HQ+C_ Z?icFHxy#pVb)^6R002ovPDHLkV1k48;SK-* literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_shopping_cart_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_shopping_cart_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..3da60271c036b2b2f87e81fd5f23e4c30ffc9d63 GIT binary patch literal 375 zcmV--0f_#IP)hj0QnaL=oM* zb0`X5VJuuYcz4b{92mIIQ@{8A!eKxRDbZQz17a!kfkx;9Vva!0k$2Cm@~0Jqe@~>i zLf$=+Vhwp$CPkhbhUzR^VWu6R< zP`5iq2w(yA+8~Gq>UK$vAUdeqHi5KJrmWRNABbp%Jpd6kV&vGrGRp}cw5bz$?JOR- zN#wgTRZ*gv@6OahiDKWKscC%ZwKE-~L>1qismL4Z^-9ruXQD)nn3xJhkKI5R`UQhv V`7{;jV0Hii002ovPDHLkV1nS%oVWl0 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_spa_black_48dp.png b/app/src/main/res/drawable-mdpi/ic_spa_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..b992454f7802466a99589c52d6e92411790305a3 GIT binary patch literal 532 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 Q{(yu$UHx3vIVCg!0B7EYTL1t6 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_alarm_on_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_alarm_on_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..3de8d45e536badac5a4141ed9a271b494ba25615 GIT binary patch literal 1602 zcmV-I2EF--P)1QMfSNNF3cDJbDq5Mzu&AP5MF z7>)4egAmHqD+Xu)IEk9hYjN`in`6K7!s-A4#H*JWC=bDQ)yOy?gnFtQYoFv6g3RNP{<{Ornta3 z3?sRs{8T%$h{6VoL5>ih8!3E=&>UMyyl=%Tl(CkGmMSm&3ZF6MaRK2$oMW(Yd-9F) zGs~TnUaoIb`6&M+P~JVKy5$NvOwb8<|Kq9^nJ0YcC&1jElI- z6bz+=Er)Ms7gI^2CuvM$H|>@=I+=;#4O)$V;}|}o6riU2qJJ2HVWH)~^{gO+X!WOp z8J7-EUrWebH0@LVcuPLcf# z31~D#c|Ng?dAPNJcIBbtJT#kRaa^pD9GnWW&*E75csx*SaVWK!3R18ul~uGT^M!d6 zkIc7dLD0Zz0z@mo`!pad$}hn~#aN#^>|hVmNv9|2%%GAE>m1(w@5^WX)e+)1Hd0Cf zxdiazCqOO*l(LaignPX97URKtL#Rf05U0tbmn5-WbMaklB7t5tff{Y)SMw4NfS+aD za$Wol%8BQJNoNi9j*Gv_a#DHV5}8Gn&C zE$rua>S!iJCr#9Hno2%pHu>~Ho0yoGn3$OV0RcPK@^@Hv5dZ)H07*qoM6N<$g7^jJ ABme*a literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_arrow_back_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_arrow_back_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..7726760865bee01ff1f2b06fb58cbab901d0b6e4 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%xcg`aE46Ln;{G-f|aZHWWCPz|7%k zY`FdD)1ukGm;I}p-`23jG*#*zNJB%RT2%d9$(z46axRVM-1uv%z>4_Go4>CAw!nYB zUG1+gFE1~LGVJ;P`upzs=XE{)J<|`Cnz{Jv2Y5hc)%DX+0(`1=f~S_ j`;+@u4rsxF`x_XKKUCeUxL{cZkjvod>gTe~DWM4fCOJ*w literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_delete_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_delete_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f2b75c31107d301df6e48c209636a60930a7776f GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%xcgws^WYhEy=Vy>igE%|WE~;_ky~ z9J-g7C00J`4^4Q(VxGV~>&)ykk80L8RtvRxOj23tnLW?`p4GoUTuy)g1Of3yPXFiG zazK+98kT&N|Lg!_5daPIFZ~QZ^;?g1j^_KtA{&w9k>Z13-)7h7X z@0)ay)#>HAfay&EyFRCUwy1SD)FC(Vq+Q)Ieh-O@{NE-WRm}wo=}kHs45H^XtUIj_ zVjO$pUgj!4!C=wp6Z2j(3%Pyaxu~f2tD!~k??Z)2*}oc&2*$d8@{*rmv1mF+--mDz zLzZvy8@68!Uj$>-Z%Th*e5qXJyD0h1B7P6~i+b*!McVIyy6>u-w081-r_1Rl7*(P^ z^XA?#(H*DHw5`?pFmYyUS*$kKjs|X@7n>d0`MTF^a-E=W7p{N6{F$b+Bx->v@S6suLp%ayE)ienQdYMqA2XoX(8%5-sO zQKK%`vbj_1dyhRo#mc1IwK9F5FwnTUkzcPzC3ni%PKylRSLd|u|BPZr@d7ZqaGo`$ zVb<1V4ct2pygxO=w}f}^??px#4eJ(`KbQC~Zv4z-*RgwZlMkf5Y`5^}Uimy05@q!v XLa$C`%>9u8OehSVu6{1-oD!MVBAk?%CCUI1x@e|>g^VFi0xY4G zK{PoSWCzR0z(^)f&@oJ%i!}2HejMdz1xL|L#3`!DLIye1&||935h@sgLyFmtW+6^c zj^uGpTB`FCVQlkJ#UPsHXd=W=<7kbc%0<@T!-fEx&|-|=xq~ah9E-WmM+9OYzZuO& z^icx9e9qgd(?oz6_}GMIGcGWP68de|`4AtLtwj@~pDk1pCP)B3A?{)opI>#zbDX>C zAGh^#9X|nrgjvbftJZl5i;5W($EhVBNj_`oK{FYrSi=}3LF(uem-9?4@QWK~8xt5# zF7I*4aQI8SLpH;?j_pF;UPfTr3ZXzFK8!8k%&_DC&0LJ7@wSk=9FqbZ6~;HKh(FPg z;}}ygYrT?v7(b>g5q>;A%)1SF;hy1U%uAzPsjwJRT9u_c0c)0`39$%kuIIdRMKB>x z*?(%Wu1OjHW2}2k*^6>9RI2Rz`B+z^s}kiVtP3%qtMed+8g(gKh|Mxy7!peX9QaSx zW2i-!Qi+?Mv%U(tbtz%oRIHokAci8klpt;ztDB|=Bg(P~;HGqCOEDDHrDWiyOywTd zh;lD@EpD2io8}~jj_6Wm;-;`}nl23O)TLD5rb^v3tr&V=m+}E_+NhhR0YgvfQX=?q zOS+TCG9DAUbV<#)rA;@!Yjtv zSk$7F=pu_m$l;I^+sI@tC}lR12%D9@=P4itRcK1QNW8r)bX`qM{Ol3FMb0Ch77$f> zen}cJnk>BPKFck{%M5yze!Uc8L%H~hwt#pj|F*a=wivB`AP785B=(HZ&()n5_ z{5?51>3?(zU3TNg0prB4^t%{^Q%3WR(BU^iIAl6!g$C_pIyC-Hp?ZWVIA{(7LX&M| zVAm)*#BZ3haM)ww2fQ{iZI1tic=BZtaj*(ah#ib3R@v+lYd%e!REzC)lT9pg`BtpA znmBr0Z228|SQX?4vDPcZS-seHKi6QzczzY@tRn#$#Ma$R#H<@QEY^5~1bIt7A;eV7 zDB`%7Uq=G16G!-qJ26sBM9i%r!K&orHQdK=O6U{w*5HEYxg=gg%aFmN^o!?Lp2a0k z5fuiCvK+}uqT*Gz92Y%IzscSFRr%Z&rMT>V`A8q{;^T@mHpnZ6*|?9pIW3O2nREa~ z@+q1SJZqe65ZmMKhlXN!~qIOGGp0`W-|5=B>4zG7CE+) zMUooHC&IwO(oR;whAC{WNv{@74ys8J6-0$whG$42WxB5m|FDo0Gi%5(fz#Ye3cB_3 w_4zo{Nl}yN;vj{jun-~svpgP;$K&z*3vb`h&57Sy$^ZZW07*qoM6N<$f{PVdi~s-t literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_fitness_center_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_fitness_center_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..c5300f3cfc5f5a73fd9df41ed9d09e2f079e73b4 GIT binary patch literal 623 zcmV-#0+9WQP)lv26Hi`V5R`f>^zJc<66+#y%G)2sWuGh-l}_g_g3G(5w(bI zaj{q|7TeDqX3;fy%rOuA`wS=~p+TPkZ|x);B+nm6LVe61AKuwWILlXR%ICotDG4>w z(laXwXZg*5L^a1>OAx++geCs?Br5Cp4;jcQxF-DZd1`?_K0V3+98iA#kf__>FC~=x z@DK4-L3DZHfG@8na*Xn2RgyEltU}KjUsk5)j4vzE^~{F@y!6d~82qVifAFWuf8d_) zEI_|3`c1gw{o}(dg@c4hNc4RrD75Y^L6PPYuKkgpPw3l7sFL!0`w6wb^DQSRO8JHp z8h__oPH6p|Z#&^hp6?^!81J_D%HA-PpnR_h%HLW-WA78*3*TA7ah?j_L4wRcLQC$Q zT_v>i-q}+^Ynu1Y%`GP=-%o<_Z6-9g_?he}xJbzG6IF1Kkm2{J0GLn6@Vk@%%qL{{ z9WDacPss7l1K3Yk;_JDLk+sMt%=Ikfr`92c#sU*zXPSB$X3ru^Fa05Ii+-5)c zO;En8fZzu|_%8WReDn2tm|7?Hf zq#r&&nO>G};NH2zWr{3+X%&(MKIpx3m-E0JMV7y`DoOYT61rSuY4a3W{?clET;khF z=urZYgeAW2AV#)y@7$A*1q&3yH#5C=uA*Dy=2rQ!SS%Kc4FN;M9*zZJc}xHR002ov JPDHLkV1n^xF9rYr literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_grade_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_grade_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..edc662a35901b20a85269b36e1b8108bb8c17e3e GIT binary patch literal 881 zcmV-%1CIQOP)?qSh;SoJ*h0d*kO(G) zgy14WkQOxrhG~WoSVUPv3$-S-)Y6$J5s_hdnfGlx?{Ch5^ZEV-2cE@q&U2LNs8lMI zO4H9*Xz$yiz$W^~8P_SSH-zxIf@;PgLk(g|S;yXqSSREGpLTHifWORL&X&aE+6q za*i7#_ns3&v{cSDI3$MXJ2^L3RB5(c`&d+Iha79yC#uxvCb{*tsG%-7b+ukmL%$m> zmllf}dr~eP6g9SAZnS7O!#tfyru0;}~w3%wIMV9Nb*-m>Mc1mQ>DTnQ~ z(`H?kTV$@O+Ke(xttRU*-!dz$vt74CdPVy5I;7in>#VfQd>tlhRn=nWL{2;F88vv& zNs+@&ctDNr(j#(Kk2};(n*$<89nj`~YOzb?q))UMhGrW@4qC6tu)V5Zj9~pf-gkEx{a5yt85dA`p}i?ph1^N&?*hGmuS^H z>uK3bw(1=>NA{AfdcT+=kx9N08Moh!lF5G6+i8r%nr#vpwLz2gED#y>h!L?yWYlUS zVxP#UJ<>DAIgwHS8ZEimBEvc)_om3O*Ce+)v~(or9M)3N5zE>x=&U*d@C;Wn>xE)2q(O#S(ciu za8d}jsH>-h58R+0+H4aZS63_CubyUmNvTvSl}e>jsYd?+Rhu!OzGzs}00000NkvXX Hu0mjfXcd|} literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_home_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_home_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..04e2b26ff139fe6c17fdfd5ae816dfe8b94c32ec GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%&M7z^Lu%;uuoF_~zh7UMEG7wu}8u ze$iqVcxO1aUzmAM?7Zp>NAm>6EUQ`Ct*wSx>5qK>6$=Oo3Qm;g)G0o&@&xPba3#K6 z%^S&y&BmS5-@bSqnrJIp9eMMi%d*6LGb28kmp9tyGS|O5b6}s$oE^sD?xs9P9R!Z_ z75`B8Z(s2HaaOv+jvdD3_xj(@iQ5wQ?NL}~*gq)I8fJEYcY)~s9ia=R@)j^>s50MS zi2B(b%@}o%$-H0e=-I`tg`YD5@7P3%U~s1aWuF3ND}l0d=Ka%-V{k(oZvXyV8UMT3 y0~izy3@`p?t4o+3U}gbP)W$LQv#I8j8T_{yf~=m$~;IXzu5?eh%l+bI*O5LnIQ3L?S-g zNEKIT<0XBJGshx}%rQL6n2^)65BytPpur(aAq3mzkx5L*!vp z0a@Ola>x)hq%a~$J)clM5drmH23z#q<|xU<0`*qKPGo7Si~n z%wqBU&0hSlj{%E?RDuuU7MJcXB=Jj%b`&x_e(Xp;ExUAT@Y|(jm(qjWZ(B;_Uor&Y z6!R#Nv*chaGsx+GPf(5^TbQOC&z>U}Plh0!MlPf-JUW9CsUc{WQ6klNkmN0L=W$Hb zI`=E``6_{H*O2>uGL!}iknh%)aH)U^vHJHyC=I|j;!5~HKCWcN1R5Z;2B2BgU%-W! zczBp#L#PcDi)Yo>;Taa!Y@Ptv;<}7l4r)8NeQGlwNF& zYb9ky8`z|cGKQ@=tt4)=frR*F&DNq;5;NLBOdDlk)i+CZzQKZh$R zK8n3)UuX^N7uDk=aj8xWGC(Sn1_~Jx)mdCiFf4{?52b-lQTv8C9#o@5E)leAD3OzR z)Fn^Gaf%@QAdedG1kbj}b8XCXgrFSb3rcL@n*sbhFEP*Qfd2Kr_;5}_cz_aF;&K3M ze+ebhM9$XHgOZ`06n-hB6D318YwImEMS(?`<%O>vfHEvXL&vNpLe#!|zDLp9b&_k9T z*x5;~c-Pf0-68_APCn*}yr+}vWZ1(d62yp+WD|SHaD&H;+SWI+mO!0l8Wm6`sU`&F zbfE&s6E+i?YKBohW{8u7EWu?ypnS+US>hOx&jq=;y2>EuNMckT2YAG1l*`QUkZ)PT z3X$L_jr@gjkUknXOq>;|goD)5%rkl!W0nOLm}QJ!o^qco2Ph^Ii9{k1-~0zqnGDmx SqDLYC0000 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_language_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_language_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..48997bab82e75332313725031884149e5ac949ba GIT binary patch literal 1530 zcmV^&Yj+wUX%I!-g^HhbLY-o&OPUp zgoK2Igaj9*GnP55qmYA~rJ7o5xy%`gDByi^7)?h!DTN8Fr3__}L#!f`)_6n<#41ej-#585~dTPS%k>tZOx z@HCfDF-irKh^f}(p&TWjZydH*%?-rJE&LqeVpLix=|mUgFLoY_!^v}i0n~d?Y~8~3wu|leQEv!k zh7+j+E=XoC3Yql;x#n~6+w|mmeZ+CjYtSXxghFPw8+W7)VNacDTrYzftzsj(&0573 z?fAYJ_EcKc^v9MGsV0+#=8Kv>==zD8=V@p%S5YF9Xo7BBLhk-Z(K9O5YIXq9F0E=m zx^c*_P(df6i5~0{qgY=AyI|6GZAS>Uv<(Th#VKYRggc1#jy{ zE{L;#ARsN!>VBg!2ej&0fFz&XX9?lROq78HgqX;ABxYPh661)it<=W z@MG;^lm{~$YnxCW%tu%X@ej&_sU#UIStyU@5v;61c{J~0r3B^C9K^!SC=aKD^IPaC z2alyUu0$(*#NEf4YHR-Y zU%-o}P&H;jc?!9C5m&f!5ubB%5qt4ATH@+$RLp5*x&9yLZ_qEvNN|Cv-MGR=CZ|3*>~nRpy&BZ_BmB!zQgifIrMEO69cEY_;$Ai+?v`)3H^&>Xp7l@M6Wz~7BYUs2l| zsg0Z;Vg`-{IU%PQtfpC)VDgq$S!OxST1tQ@Oh#E9iKSvRH3{aoJ_MaWV68I^&|djLYpSm`|IqJGqY}09sNMcHwI(i>Wg1{_VJ|ySazTMc(F4 zelR@tW{bb?qBrjucV1CUXJQ~ttd5Sfr27(G=q48~MEK8-?`Thq1Xzc1ltOkoY_Wn? z#MBfjQ8CH|9wQFAl8=f(wvs{IOy&g2#gvjooCSG-b0`;5PBsCWMGDzXTwQmVskEk9 z`5DEhR7EjNmB&zgctns)R&oesks_8eh5(+F#wcd7h646eP8Bs=rHa$+<7-wjgW;s& gnuLUegoK3u06C@C);9~c+yDRo07*qoM6N<$f;YI+2><{9 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_local_airport_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_local_airport_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..0a55d7da7a2d1d6b3f343f79f76eac5d9c6ae3a9 GIT binary patch literal 545 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%&M7!1%(`#WAFU@$C%5Y!OEWw|EX0 z^Ne2&2i*d;_$>T?K>Kp$OuyL;6C3_9>+bbBT@tmd3&@%j;?_FF@wY%x%!3^l(;o8W z<)@X}&un~OTc2?M-JYcObB4zxlC{b#l1@x;o>x5e(2kSlhmP#q6nQ^c z+aD&s)h?>`$}gb6YfOQuuDTsz0$UYs8P2afnCo=--G@o~JzoR2_kWwzZHa(>0s z-folfa(Iv2&Lc|xszNIR6oe|ZCVI3oO*|3Y>7pgl;i7kJ`(-3= zpMGP;^=6aLvpbJx7^EM+qnd2CQ^BR|U|OZSd;OFrAYzKU`v1iu|BAeH3=-z+=KZ}X z_M68`$YP;?f0w6L)fdZ?(F^LHf1dGA?q*oUx|zcMm>Y4 LtDnm{r-UW|44?L_ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_local_atm_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_local_atm_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..fa0cb434539eb8d9b980277f21ab3c8e3054a98c GIT binary patch literal 384 zcmV-`0e}99P)2w=ek=nderzkm@dPFULf0YMtg(DfBykqIDx09X2%v#S8+c>~@U<_kD5X9x}eUY{d?08Rk$1Q5U{pw0cl z)6O+uL$um8U_!LY^|i|}2{mp3Q<5rJV-EMs08$B!yUX8G23%Cdj4fveFU}1U#wewf eQc5YMRM0OL>~KtJ>7-!*0000;bk(|4F7*RbtxgBxq6as$f+h8NGP8_eb3{Px{no>#@uV|Yv=`OIhi zYBPm9>C8C|yc-z(I4l zkBwH=1lk!Y7R*bj@ksQ{=$?4od`huOi{GQeYc7O@dx{>iSNd5KJMCB`g=!EPHeyTv1gB8ZTz{TCdW`u zes=%q_A-YBhP@`uRvK_i0m~W_vH=;5Ldc``v}`3rj3n2?)SI1P6C6J z=YT=|>%cdDyr15GyPgya6hQ)8opS`iT!%?2o{YgIvvytEKmP# literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_local_cafe_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_local_cafe_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f748dc3d84780ab5bd66f2488599fca6189dd6a4 GIT binary patch literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%&M7z-Z{{;uuoF`1YEk*Wmz>)`#`e zJW2&~=UiK}>`@n&Rqj&FQr$;74_rzD3RzVx)?TnUQOwTu>0Pe=oc}rsHHv%0>pV4= zP6_f_s=WSrv*=da17*y-OLY&_`A^x%*cn=Kz(H1e!j68vihe$eIW`a0Kj%&`Wn>X> zU;q*J#ounbvFju;vn|`m=-t6nv801rA|lAau+6xq`&DS+Z-rW75`^gqtWuB@6<~4>dFTK=wJ2TX*$V;R|*z*rR_L)*p5^PcIkW2n<68Pgg&ebxsLQ E0QB~ZfB*mh literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_local_gas_station_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_local_gas_station_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..50a6ebf1a6f5217c1aff060fb34f49fa1893b169 GIT binary patch literal 554 zcmV+_0@eMAP)f1W6E# z0y;cG`1QP_YacK~{xFZN1MVP+8CV9Cd`|){DeMC7BWgaf!v>q|a*Ey`+66pEKmQta zTWG>FyMPO|-$A#hzI?R{_@VY2=z8kQ!Y*K;_M5*2h+V);?RU}b`v6ST{**21t~2!k zI7HBdJ$m%mXNqJ5WFB3?W%>`x0J!ZP07u>d9gchh0B-TkHvqca<05$_I1+d|oMM s9H4V^rK~vPgaKU=MNt$*Q4~c#0mlo94+M9%<^TWy07*qoM6N<$f@~Y<$N&HU literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_local_hospital_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_local_hospital_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..fbe3374daafd1ec75196bec9eaed2f0a7617e7ff GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%xcg{&>1LhEy=Vz3uOH*g?kqc5$VPq!HvXVgvmzEAy!0|!gpLA{i;w6wD02hMo?d%X4x z&li)cA3c=vcO3C>PnA9Ygu(i%klYDJvw(}dnmh^@gYVc{Ug#6~F2q%^Y{&J0hSo=7 zMJq(NbKPK5c+mcj*P)@ooRNuzL*N2a#eTmA21cejYsUMv90Cds4%`k0mIDP?wlJ_P z`5|utQY9ccffXdz(6E|;Wd;MI++ST0^L8d55%U(NH=67COY7>rU6UmaG_JDpd%{qi z#J;tq@bmlzzBd`Go}ZYR+ARM3$iGXQ^MUS9i$8w<=fPtf>Fmp67X<=dB~fI3~wU z@{lUI^G7ieZjAMal)^;3`-n6iIbafzGMLC0L!e&{0YwNj>JYFPfqps!R3Oj?hkzsk zJ$DG$k3jbv0@@I$!y(`b0<}2=yh5M@4gu2?BF+|!!zB=>gpBsb*yWqxF#_Fk2$-P^ zaZX|!t^sipP64fmvw$hxp8#}6p8thn1UeCM{xF*nX-%a0X=)HE;8TS8wFq{a-1A3d z&xZ{;=Z{i{Z~+53<|nY|`AalL5*3y*6FPq@YTO8!zYRs~f7(1inI~340#)`|0eu80 z67bSWXhfAgR=`){C=!G`2j@_w+WKFLzwAVn%hqS`nKBev#*mfJNq{0pFxDMKk$@g6 zV46A+dQvtg~hm-^*4iE*y^nL zd4DS`;0z|qU7*Z)e)!F?W6WYgZ;*oo06?uhUrGSfGmOb{&qx9_q%m>>pn^9!AHy_8 zb^w%e6*EUSZyHJK4uF+(>kfc`!whK-04S$}jOGA o57JDLVS-fne9!Yd&+|O*AE$UXZG6IlIsgCw07*qoM6N<$g3dij&;S4c literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_restaurant_menu_black_48dp.png b/app/src/main/res/drawable-xhdpi/ic_restaurant_menu_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..7bcb121641a694634e6c54bafb622b8c749786c2 GIT binary patch literal 801 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 LNkvXXu0mjf2zSwC literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_account_balance_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_account_balance_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..6a8b8f2e22b12fd6585d30d06db44f32980d4351 GIT binary patch literal 459 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 A$^ZZW literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_arrow_back_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_arrow_back_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..8f6b56e3bfe6f8439f1a35faf8d8946817fd2011 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ(Knr=Bj3Ar*{o?>=R0b`WVf7#{Jf zi(Tuu)Q-QcEYEK9sjUmYW#c(X1%g)2U(R;kffb_+YdoK3}t2M0eNX@)U_Tc3ws=YWbgKaWLXcN`XOQ|IxQm}g+qaOcP!&*~ZM zPdXP(mx^1X%Nj&7v2aXK@icl1VG4j{fMV2O@G?Wp*|)ml*_E$x ztR_p>ZP!{5{Hkgd)2-#}X8*bJVa{gHM150-<00G5hO?e`Ul(*Mmi2<(QQI}=isygI z`@Hi}@mnK@**5DpWIUHCo||~gfYR Ojlt8^&t;ucLK6V%_ii-+ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_drive_eta_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_drive_eta_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..2a4085f64dc9bcb5dd62aba2d00f09be15a5119e GIT binary patch literal 892 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ)^zFgts?IEGX(zP-KQ`$(zG@sH0# z@3B?|2)bCd*tZ3(P;~K$QtHYQkh(0Qv`BG7RFl#w-3*>vO>IppR5^lwC7QC_a!q{c z$SdS~Q7ADg>fZ8&XAl2AHvRqU+WFRT{paN$%vS%t>!HILWbmeb)klT=;uDgZ&E>}w z^9$`wjSRiJr#!sQYCbMM!c$wqdVhjZ{q8F-W~&DM>t}y4 z`#ZbRh3YRSP3Q2rEU?eKB;G%X?TM{Ze9fKG6O5J?FLu3lepJZ(zeM(vl4Zrp*X#E0 zoLAsKY1cg-%NeSrd(}CYj< zjrpq+HX`;02Tx3!P-zafs@Y@m( zz+ZxOSMSEP{K5a)Ryh3bDVn))fq&pn=_id=XD*&@vh)8bt;CcYkm4=3;twxl<221p zTKpmZ+8P{$3-_yd=1pLiTIk_CVaXTXkBzS+Synxl$(W>cd6R)^UI+gcr-`PKGla~K zu-{s8!W|+uWybR9u9>qyf?3ALQfK{9;0=D%_QRp`t@pX?PdjaVJEb2ntKQNnxR`Wd z`SK^cANOnIZ9FByE9J9!*^ex-I}hf^$ew7FInlVOmhXuJ7Boc~?(hG9T(v6HIiA*k zzP_aCyQtI8`+q{d*hli;I?KCH`D;b>m5HbRKP&uJ^=D<_lTZ719<MdfVqmn)78&qol`;+07j;jga7~l literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_favorite_border_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_favorite_border_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..a042d3028b8f9454da7e839e9e0d3929085d1160 GIT binary patch literal 1913 zcmV-<2Zs2GP)SkaSX+OmHcKEow3X1&5F|_gHrhx=O zNzlN(Y+)w{I7J_Wq`1f_4$;A*tYa2AL`Wg4+0I9Z(g(D$ibDJ-Vm0l2h$x+*M?7?qHWrbN#k4bkc&MLN=94u`*o&mu0alX3aOKd#AtcRS;dU~vo*f$d1(eaJ#W)WT&XlnztLwWjel5=xg?K}gnxufGqdARxK=jhz%bxRWF%dECVg29W@|LOaXJ z!z9Ua{y+**+Q%3I@erc)Bvt5O3cv6<#T?*gd=eeh@D!r-AOWaXex!fXgcmb>%#Ayk ziWdv%R))J8-~NQS^m_{MZXM?lkNuA|cvr}FWypP6g1EGq1nHScH{ziq)R3M8TM?H& zi!Xa!hsTc+_9MgWbtdA6+Yr5k4~?$trv(1o$RR|Je^7uw33edHK1JGEUH&u|;9of> z5T$o0#lIqsB8GlVnhISWrZy3b1zb_?Gjj>XZHS=@Odu_*UFJQ(`AKjy6~)ttp%tWM zyK&ZBMR3OQ4q~W_T!K?;oLxUf8gh(lnjHk|Uc}HB3Dz^l$7l&Wn~fM+MzE6f8g2v$ zf^|1yr~%K`8&~W}f>utQLuCXlkN+Z$tqpE+^&D}w3vp}zk_&kiGw zH4|scjBk3qGCnr1CeCUR$4=ncMZ~d*#91-oSRbC5CRIt|EDv#P5U-5SkH-;b$>0X4 z4{@xFI4d$PSOfbbT~D0VAda01?l!-eI9rT3b`Yne$VkE;%bxeTaOz^!#>2Zw~4Dx#Icu2 z%MTGlpCOK#5JTT1Ew>0c>Sc9h7aZ)8M}#-jq2Pzmyp!DZj2jZ6;ZH~A;j1@st8ew zveEH#WZPn8`_?^#>~Uq&(#>SkT+Sgb{hZL{@hald`_zyvb;`jxeGUsbPq$yQ4^ENq*6MSUD;nC!@h&Kb})lORKi<` zYxk1{zf@0|Dkc*qt2-CBkriWj7IE!OCPiR)+Q}hH#_@_eM8$-uL>->LFqSMT;!X8r zpi;t8rk*nN1_fkUDMt|3x+o_MpWvT}Yn>Dm0TmoWT>B4G2wElG>c3h}L`JeNs3Cb+>2(Mmd5Ha=YfBH1@2*P~zjH(k<6G1b1A93v*x8c|A zoL8^aS|X}Jy^8u-iXV3~pk6&SL|7ds5!WuWigc}25BYkRY9g*$J*I7lual1Z8B*_+ z(}{s;>bxkO_nMC&O5IE$CMr0BC~YIbaOLngqSQ$_G4e4EBTBy`3Fz`@N0jz6nV6Zx z8;H^#^3hD-&xq1KZX|{ZcnMK@jbhxC@OMP%Me>QM8|XlkI;p^9D*r;1o@FdCmP9`f zvxj<|+{6h)={Jla=5lxpQ94Z{*K0yQw00{AMuZyG1O5bM$`Ib5hzQP)= zTF0RO*?8Qn;fnf0Zvfx{MCmds8G)9e|JrQkQAFticQ8UN2;j8(Gc+=S%~EgO`jlXV zo2o2iwMpd&r7s`!{zfsQ!~|YMJoW;00000NkvXXu0mjfGjMg( literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_fitness_center_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_fitness_center_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..9c6bdaa6e27f4d52cca133d4aaed62a8f4122edb GIT binary patch literal 821 zcmV-51Iqk~P)QM83{HV|e`78vNv+JW`F0n>vv(1eroeP*A@4dJD<=ZJKZR6M_+^WqVYcz#dk z{w$Ap#3LR7aUKz!b$CR?ctrHvKdy*cnEw}vL?j{+)u=_}AHFXla&QrmLq{YUeJ@WE zQ6HJqMU}u4j;NQylTH+dCnix3bplT~qJ9ET9HMldm_!3K2|VG5h6y|&i53!gLK3wx zMmi5CYVsl?JR&MMkBD3z5p_@yp5H^%{9iT3k literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_grade_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_grade_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..6daf7cc507239e50378d361643b7f5b1f6b7fdaa GIT binary patch literal 1318 zcmV+>1=;$EP)p#AKwUNf=3d zi?p;A<08Y5goa|YQjR3F3gdq+=PZ&?J)JQUJb|?8af}PX)F7?ePnZ_Q1SCm!)554k zl2m~Kz#t@P%?!W*Rv;;Q6@$w-jil%l9SOYINSYoY;6nV4r0G`z?slY&#t~>6kv96A z0K1Af(nfKvB(Rnt7FtR`6;g*-=mZ4>(oDo+(+Q+Kh{bjjK*flS#u7N6AU67lfa%S7 z#75`1fYlR3RC*gAw$i9oh=fmBADzIXYo!E>7q|J1~fe5RS0JNG2jy;d~yai*2q+{;1=o-A67>(Su%(k z#Ah8~AX(Id?-3tWMR&5S1D_#2X*~txK$zu-4=N)}&der`Xxw>XcrQGMpY8UWf9&*H0f<3cwzyfLC@l$sWd9S9WBLU#R_j_ zPjEAyQGYADp8+VM2UUn-eMdJGQoyH(LVZko6ceTlQKXj$p`=HNE3h4%g~CcWgLv3! z?m}@RIf{7HVTPlDzWj`MP&K{KM3ha4%T>@3jYL@M^4HOPG&2`*v6z;(d0gy6wBzov zY%Q9(8gaS4Xyrk~n(69`pj**p7J6 z7Bq1Q4TuMwC4v@iLOf~=T6hxisK?O41`kK;G!Wth;!%H~fx(D}^+$O#5D%M%>O8&x zQ;zcXBNSFf-_+n2&OF_3fy+8#G>I6|vDF?!}5J9QMnT zg7a-W0Pr%GVpT_$+4$Xj3T0JTKH3_BUDvP`vD8Ks6}I$3$5HObsi~H}*ZxfiC0%P_ zJnj{uWFpFI7M`daf|6oL+O{){Y#7cCByBTM(g#S&{$v^C=<&+{9b(|T5$fYndlOFNjqyB&BX=W8&a6?zh zFPa5dj&iDzgmy6+H(k$URuaZlhG7_nVHk#C7=~dO chG7{00&PmKa*K6;*#H0l07*qoM6N<$g5T6dPXGV_ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_home_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_home_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..d66401cc7ee5247323db1d0e5fda5a4abc986449 GIT binary patch literal 485 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ)^zFs|`*aSW+od~3)ejt(0xBY_Z3`g?>#w;r?yH3Mn@>gyZoOhh0;t4|kLXOqVG4!-_PpVOP z-aGBek=(OPwwe~g{Qe>@@_e25clsfI>{4yS*i@w#W^D{rz1-|>AY{nKWX$hsQ2NUm_Zew|kB`R>yWO+Byd{gCa6 z;F1F8&o6>^e6IYWdFQ9iFOepjX+a#HBD@q&Bx|-R^e=@AEIgHL-)h%y*J{%LSL7E^ z=>}8DJ^Px3_)tn7z0fVQjpUXO@geCym4Z)}Y literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_info_outline_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_info_outline_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f41f4010a622518310c844a6b3ba9258455ff881 GIT binary patch literal 1945 zcmV;K2WI$*P)DrFI$X*9BcI_5Ex%3>Adib0{+F#Ys#joxAxxxlRlXP_L* zc(T}1X5rlx&T@ioKBvIAHH)nrWEd%-Ar7#GhZtw3vXxI5MFMJ+kN5>s7#CKsn|~uA zbcbCm$6z*XoJ2zI1TSD?9E&y8V&R3wA~y3jw-8^QriKJ)<~riJYrM`=*o;MnmAv8W zU%N^ZFO~xsP~inCFPmdcH$El&6D72-2gxMIP}`fi_~&&M4yA z2s@}D47GGJ;^_n%h{1YK^Bmz=DiBPkLyXJjV z5|t_rc(}W6A|kb}54CsMOw_h;&-FpSh6t3qep}c}6LDzflFP}?FoDqh$>k6ysUj}b zoOU_g9|+k-mjfK2oH$M5kjn|%3DLtYPulFEjJRdl>++L+Jt49A%w-;%B*?f-)QwFj ze&urGDkCYfyo>1ZOF}S@JBZpz%1M$*oJQ1!m`mXHBWk@=ku(qSEuyxUfUQQj;RgKZ(o@Dib}>4EhkI z^H>C;4N-du5BmalM+o;UmbRj8e;~kr=b3xaWW;@iYRq}F$2L)L}?Qx`9ysh@DZa1TBJVJ_yHxD zrQW?A0;2|kBkDuV40PD&pjG|vI|!1c6r{IsmZ6m~`>XmAgbb$1awF&;mU8MZSYO9P zZz7HjkY!AsMwFhyM9&~f%Td|rp2S%{Cos`*ZsV*a*ny669}|u8w_pcainG6CD(&Qt z;~$lX(n3ttfGADDw^fK^x3Msl#h~AZ9UIL8oLxXLmC&PIt^a}Q)PYQPUb|ZV1I@$P zSD5T;zXO$_nTfMrf+vx^<+#`9)ncQm#Mxy`rk%brxPkgHS$}W?RXk7wRrnt$hqF8; zyNk04!3|WvWch#wO1TeIz*!EHO~6?`xPc~Ovhv^t8phc)OjhahYO#GkAWk2b1NHkK zs1IkeG1(mLYW)v%4QF+jOgsH`{{!{nY(6H_PXA4C12tl@#^46Jh_ePPOl7lJy;|R< zAxet~nkWUW(f=>)Z8W#Ig0mJ(rJei|1O5ksvp8FgsaCsOsn3B<;A{;UOjO2?aMtZ} zAeaB``?O%9r`3C!xF+}MY zf%qw+wjuEYZA8@85(t|fMCm3~i5{q$TZqyZSP=f(diN)IAdAC@+Vcd);vAy3C9wl- zN7POcs8xvCJ(?3a&TdNp#q&OBuI&rjf05aU1c~ zDP||-;HXx)?MiZ%=oqyml+AXAkQf`_RV)&1E`LE{Y7cWT!b;8{5%)PQ7{p>7=aGo|g6A=iMJu01 zaF@Im3xh3VXGovkJ4`3dj0=<5#0QKZ0X4!=Ug3L;Gu3Qn9|I+R3)sagR1q1AsAYMa zmSRh(!MjVGrJLiNWrRps#AhmtSwLN}nN$|5U_vp-7aOLZKCbgkv5WLDzyl+dN~Kb% fR4SE9rBeR^EC~hRt|Jd100000NkvXXu0mjfj0cq4 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_language_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_language_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..586f3ea4a48fc738e139b00afdaa9dbd926bbc53 GIT binary patch literal 2346 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_local_bar_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_local_bar_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..e4dc51c2a1d3c264ddaeb84670378d4f12a61c46 GIT binary patch literal 602 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ)^zFe!SvIEGX(zPaEi$iTpJXv0r) zTb~b)CRx1*WCJQ<_>;jVnKHo027F=$uGh?pR zK4G#V+JOnE@5`r4`{w@iwSPa)vwpVyiHZCddwYLPSS?#4+@?M6*CN5&TRy0o?QVIv zSmN5zV*e@0leOj@y=S`UW2Dx+icfQtasp2+z42;dQ&UXek~V&Zq!2GPH>ou*4n^I3QTU=*-}Lft80*#!=jW1uDprP{HUvp?P8Z z;&up5W@wY^lY?Szpbk!Fes_KlKCB>P%VP`0hYP+Kd;#Ma2__3Bi6DzAi7JaEiEj^I zB)$M+kHi~rLmwadz|w~Fr!(q0cdL*&_;$naRZ)1h78UnJFMQ` zZ3M+#vqAmq>OHLnjVv4j3Jwhnj7(E_pbQod5Em@o3T8}TzsU-dgQ)hLqyj>h7$)V% UxF2|xeh6fwr>mdKI;Vst09?u9djJ3c literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_local_cafe_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_local_cafe_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..9a2616c499ac0de853487331a318bc9de08a1d1a GIT binary patch literal 542 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ)^zFh2EkaSW+oe0$43OE^)c{bTyY zxCKjvVy9dQ>JKgn=6td4g6mP=sT^?&CHA@q-eK3-vA*MlU0!$h1E=&Dl{6uKflq7) zfBcL4Y;&KRN4`z+8GjlaXy=6eP^)<=dw!>GKoxKP4PlMFv)Y+-qr(@ZRx1QlndUZL zss_naGcEn@v*3#!tJnLe1z+mc%3qi-x8H$@Q)L1w5%2*d)MzGlV*0nbZzsR?w>$9W zHU{lhnCKw7n`!Aa#fc975i=Y_WyMqi4zun)qk3URw%*H2Y!T@TcsNa_qZ$S?ySMv+ zFX+v1#&lEi7=M9Y>Q(3;B!+kS^f}n?8L3dA2#}( zyk%zZ{P{}G#GTU@Hl90qPxsXZ8&O@RE4!2I_AwOi5i9xCOd)g&fw|l=d#Wzp$Pzw1K_g& literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_local_gas_station_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_local_gas_station_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..17209dcd3bca829ae705a172649b3cdb4f4b7353 GIT binary patch literal 833 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ)^zFmrgiIEGX(zP+>CFCpRqj8|L)R)vk5}8GGlr-IfhH^mz(^+$FgEy;tfyfKza5~rrPJL znxCKF^F&EAOLp>yHC7ct?pOR(3m0(hEt|Kha;n&(NFUj>W5HB2XwoL1Jf?}3i>YUdm zGThykQ=8QAitXmsoVz^C8Am^TeA_)h5C2Q^*r(C{mJItWvR@S!BRO;sG zcE%Eso0*5hs#D%;@GL0GQ4nSeP~2qPw02`a<2GgM?i*2Dq8XN(icctPja@FHbwT&^ zH9cojo9Y<>jZvCW-}p`%c>Vs^v(be!xPC#(v1`sf^-gTBQsN!dlkF4Gv=NRyrSAxaZ8`<4*B^ei0}qoZ#Qi%5~T~pWbay(`Qlht z8XWZ3B%bz<3i7|UDgE>u#-q|7di$VXX^=X}!b+{kh&0HPSIY8Mwm)g+j?Di`+p0$l-eN|gPt`rUi?_wKlB zrgC9c&RJ(B-;>uG^kmMrcJ-`1#Hf2B%2&AS`2lt#b3Rs+B@XisfAG<`(vjS7*mOyP zsP`_p`!U>d8gXZPc&+_xt5)3DnC9hr@C+QxV_cN7$>{CTImy5%WAJqKb6Mw<&;$T& CwY%T| literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_local_movies_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_local_movies_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..e46eb94d790a404c6c41bade04babc8368addc1a GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^6F``e8A#skDEJMe*aCb)T!AzYEKT2e9!N2k1o;Is zI6S+N2ILrex;TbZFeWb$lwkdDZ}5kmneE^I!(kkZZSyZ=*i6zfk?LRk(E>_rVO-3> Yu%aXU;a10@_aGBJUHx3vIVCg!08#8IDgXcg literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_phone_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_phone_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..5fee5f0811ef1fd8ccfbbe4afa65f892167c3215 GIT binary patch literal 1099 zcmV-R1ho5!P)+>){#DyyaIW)g+nux^Hzn&72X7UMHG~JE3&k8!aG*V?_GNIO z!>HCD94Mk1#qPrguM@?t3J=61D7G>@5P1}H{1Kjr78H9oJP>!H*!|&wIDlds!UORp ziq$b29O!9O`#3nzrKt8$V4nAJsJ1>R&vEKeu8LD7=lO=^q(FbkdCn#kZY(L!Xj<~X znI(KFG)5ySa&Vq`PS8ZETtBZo-_lIVzGDTk?2p#(X(6RDjLn(n2UZe5 z`+w?BraKQbFeBz!Me4mAo9A~{W4JIjP=Qtq@Lp`9*D=6l_}Hz(;5Zf==m-wO75LcQ zfWa{o8|Wu;i0nD^6b8p(;n)3I3>V{L_Zf>ZyeK5vjbRyo#|E0E9m6j1h5b?slx0Ln z^a{=rbx;%%-GZT42sFh-7AVKK_zJDw5^cl_`;e?9+AAj7XAkRY@?xR~NWJrj#6&k+ zqU~a!S-LFI^J1bIHrtbENK7=vCQ`162{{p4NV#?*`3H@ygo6y5d5%N$vxC(vC|fCt zi3;3Gs740y|Jew8*+eZ1#16bXcH<~rGbdt>TOQ#Fws9_tsA!JfITP)tIw+64N%9P^ zhda2M^|Z2_99c3{j7)-)D1$VVKhMHBpjyQMULNDDVSbwAJPYf9YBs^;p($?1h38qQ z2UKekB=Yo;D~#3jBgs8%VI7NqhyYg0*tY0?D#GM$rPvHgM7c$(HgAMGGWr;|mKU%W^k= zSs>Xm_EEGzvNe2Qfn<)29JN3)$K`xtfn<)2ykmjpasm69u|TqVdKk4pGDjx|n6yB$ zI=1l!QQ7iDsFdS6Ugfv&Kn$bUBG&OBNBJipP&X-1ODFeosDuNCBh-*0j%K#7i#|T* zbfP>fNG-=%tmPVdc$^n_i$RVv&IG5Jq(H`x*cM literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_restaurant_menu_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_restaurant_menu_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..beb4de1e30fd29a77b387dbecc4ff7db7ed23504 GIT binary patch literal 1144 zcmV-;1c&>HP)yLR&uRTRc?{0oH^mZM}ZPU8$>?*r{bkVL7LkxAq( z+h`DNS_DQxn>InzqM%Jkn<6x_Fu_H&5G*9x6jr{By3isDY_v#eY@T*5A}sH7p1B9> z`}+qjAGmNh_fkQU9VE!(e+wmOrj6%(MHZIj9bL4NkHYU>@;^sE!%L(VEc5bp-K-=peI*vrUqZvekS+ zydkP5gE-wulrt3yI1DrMfB=bP>UB_L4(7oA4T_X1Vpp%V4m1JS0x zO$>{ugdg@mG^45>361D5Vn5=j%3~@tqD%HXyhhz+BqX9o_CTCNU5xJ`5sjJiWQn7X zt4JtB8FQd+oK(ce5Qqv8^VQ<0MkMD%CFVTOaM%q*x$z|uMa+S!ao8&Qa!j<6tSL`B zjw@y$$3!0tc|H@xd7Bu_DbZ6ypkwF@o#>hw&pq^cK-6f&^MQ6*?1`Ym1ghx_Mq^pMg^7s>B9)BXt<4=Tn z+=#%paOK$}(E;(;6HSe|tEQKMyDJ=ix;D zJeVIl}B+> z1|K1YttTDFWV0W^yzd!}LvH3MGRTg&^N4Ps6&XS;jKB#SkRkRy4w#K3Q4z{TIEp0E zVNy_SK9XefP;EDoWIIr7JYu1-sI?Ta&|=iuh*+o|we}+xYC)|Fh=tCh)@8&(mr$z* zu~4`Fh$ZeEYBeJk+KXE25DRTUsfRd-SmtTvqU zEli}Z5XF2&9Jxw8e8FP`T9{`zhZuC6GWwUzLh9JXX*y}=1ly@)0oerH1MEW#y2vYx zz%jQ_j~Mj{x8s;JUZevt=l}&cr^N7n#-A)D1;^aY=ZHZ)tR;#PA>%oJ%kcMFTbW3} z-NiB*I6yl+2pt?`6P1ij@DR&6ix_l*xdd8-`RqaZ={w2@(^npQ4d?t-(h0O#95FaZ z=F=;i4~ZiNHF5`mmTvr8sW__{1`Oi`<2iqrfEz{2AYV?Eal~-WD~SaE@f=3%M-T6k zMc}1hvsa*#P@xX7-btQ7iJ6GyF7g`bD3QW1h}AYT21Vu}7WMxcNL78#Z z=KMXfP-uyzd&!gi&GtmqqE;(np*{ZEt-slxR97(IACO9a_?ztsSvtk6o_h~+L(MFxtjMXdKb z3kadaaCRZsZznO7i1HJXC_n$vLB5@CqLf2!&3_uz#&4jjhybZ9r`@gj&*uO#K+WXQ zYZP_FU7G(ebJ)_)j~u6o5<>KKA3I!||6I!XfL)xSi*C-+%zDbXmHvcylG7IEU$qQg zr`vq~-E=3PT9|+3iY&~(at_YFITz>OoS%Pl_UC^*kMk_6SV<+tjPvu~YZ|qjLHcx> z8m9aCe}p{)T%4Hc?)=}xCd8mdvRs`1NgPKEJ4MXB`M-={UMGdh=HGf9#MI5doDiI4+pw>%> zg;t=}%Ioof{6}mNY8Cr0>Fe=NM03!~!b^~2s8)j{Sv9InN0Mv`%I!sxXd4On|4XC* z2Q(r>>|>me#VKS6{YEB^h|!4*vcH*(Lkj5_bJ{^6R8gQ7GTel=&}tQiBm zr`|>Z&YQ{_+OBfus%8q_|8gm!f))R@h$34P)p+XGn50%Y4THHj=6`NzUdxTS?Wq+$H*f4W#IPlHARHQZ&fVxeN3Ssd^-L zf&L*?!_;yX=wDKHAZLNTCS{j0m#aXJlDcPdl;>AAkh)FOa}#KszIY)gdA{W$`eF-> zTm-s{zIinVdETdwu4gs!Jge-WuilP4&@uY#=BV@3xrV;`FycT{WMEgcd1e_Q6Q4&K zXfGMLH`0UFK{9hT!a!v*v?sbepOC2meu^s38n=?My-@{vlgthCdql^p1q|$uCeU-3 z7~w(`c`k4{MxKr$&_2vu8Nng!FAQPmi2FdhF|~zd*Ll9g+%eaIc42Ot<3reYaG~Nf z&kEad;U=enUdD|N9OhYIGj81OFwkLK`OI0KDwp8OJggf6m%5#nZ+}Z6Y(A_vR zz>iMye2h~MyU5exMw}X=>LAc@96M^BXNghVy28Od*k^I(flsh0h7g)0QH+_I0)@>eP}m^_3My9k<_WW0b$Ue7$4Aey@esNV=Sg`CbFpveLty)S~fT1CNpP zFq8Is?XORT=Ctiz13kVduxh;5z+WUiOv8Aufq9Z1rfIv^K#%_+Qq6d;f%iyym}%p^ z2KJ@@acj5N{)=MCe6NAmNxGa9_IoXivS9SEn(AKr7jKVQ?)86QcF=yWtug9>Kk_mA zz4nS!);&BwLBZ)>10|khni?xKsWHtYrRevHh=_=Yh=_sz0D{EC#uMt*`v3p{07*qo IM6N<$f>*!Y1ONa4 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_spa_black_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_spa_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..0a50b43bedd5ee94714fca7b0c2ae54ba02b537a GIT binary patch literal 1500 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 s*`bQ;Ts^j77C&99I8fPdsKucFA7H1kUOFI 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/drawable-mdpi/nophoto.jpg b/app/src/main/res/drawable-xxxhdpi/drawable-mdpi/nophoto.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b66b908b92dde9107d4fca5699c3b831c78b6426 GIT binary patch literal 22274 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%0D!WvHJ0 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