From 684edce00c6364e66e56eec907cf11d839643b4b Mon Sep 17 00:00:00 2001 From: BHOOMI Date: Fri, 27 Oct 2023 10:43:54 +0530 Subject: [PATCH 1/2] Project setup done --- .gitignore | 17 + README.md | 56 +- app/.gitignore | 2 + app/build.gradle.kts | 88 ++ app/proguard-rules.pro | 21 + .../com/map/mom/ExampleInstrumentedTest.kt | 24 + app/src/main/AndroidManifest.xml | 45 + app/src/main/ic_launcher-playstore.png | Bin 0 -> 55791 bytes .../com/map/mom/adapters/FeaturesAdapter.kt | 102 ++ .../map/mom/adapters/RouteDetailAdapter.kt | 87 ++ .../main/java/com/map/mom/models/Feature.kt | 7 + .../com/map/mom/models/RouteDetailData.kt | 9 + .../java/com/map/mom/retrofit/RetrofitAPI.kt | 34 + .../com/map/mom/retrofit/RetrofitHelper.kt | 25 + .../mom/retrofit/RetrofitResponseManager.kt | 29 + .../java/com/map/mom/screens/MainActivity.kt | 873 ++++++++++++++++++ .../com/map/mom/screens/SplashActivity.kt | 36 + .../com/map/mom/screens/StreetViewActivity.kt | 97 ++ .../java/com/map/mom/utility/Constants.kt | 77 ++ .../java/com/map/mom/utility/Extensions.kt | 17 + .../com/map/mom/utility/FeatureUtility.kt | 89 ++ .../map/mom/viewmodels/FeaturesViewModel.kt | 28 + app/src/main/res/drawable/activity.png | Bin 0 -> 353865 bytes app/src/main/res/drawable/cravings.png | Bin 0 -> 441678 bytes app/src/main/res/drawable/demo.png | Bin 0 -> 871171 bytes app/src/main/res/drawable/emergency.png | Bin 0 -> 299895 bytes app/src/main/res/drawable/full_logo.png | Bin 0 -> 40085 bytes app/src/main/res/drawable/ic_check_round.xml | 9 + .../main/res/drawable/ic_control_map_30.xml | 12 + .../main/res/drawable/ic_navigation_30.xml | 9 + app/src/main/res/drawable/marker_cravings.png | Bin 0 -> 23553 bytes app/src/main/res/drawable/marker_current.png | Bin 0 -> 9547 bytes .../main/res/drawable/marker_emergency.png | Bin 0 -> 29644 bytes app/src/main/res/drawable/marker_refresh.png | Bin 0 -> 34342 bytes app/src/main/res/drawable/marker_safety.png | Bin 0 -> 13473 bytes app/src/main/res/drawable/marker_shopping.png | Bin 0 -> 25515 bytes .../main/res/drawable/outlined_circle_bg.xml | 5 + .../res/drawable/red_outlined_circle_bg.xml | 5 + app/src/main/res/drawable/safety.png | Bin 0 -> 386196 bytes app/src/main/res/drawable/shopping.png | Bin 0 -> 349586 bytes app/src/main/res/layout/activity_main.xml | 83 ++ app/src/main/res/layout/activity_splash.xml | 15 + .../main/res/layout/activity_street_view.xml | 14 + app/src/main/res/layout/item_feature.xml | 47 + .../main/res/layout/item_route_details.xml | 58 ++ .../layout/layout_auto_complete_search.xml | 20 + .../main/res/layout/layout_progressbar.xml | 16 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4151 bytes .../mipmap-hdpi/ic_launcher_background.png | Bin 0 -> 6150 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 6558 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5740 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2827 bytes .../mipmap-mdpi/ic_launcher_background.png | Bin 0 -> 4075 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 3620 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 3574 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5622 bytes .../mipmap-xhdpi/ic_launcher_background.png | Bin 0 -> 10808 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 9401 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 8249 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8939 bytes .../mipmap-xxhdpi/ic_launcher_background.png | Bin 0 -> 19447 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 17146 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 13503 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11747 bytes .../mipmap-xxxhdpi/ic_launcher_background.png | Bin 0 -> 31213 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 26504 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 19824 bytes app/src/main/res/values-night/themes.xml | 10 + app/src/main/res/values/colors.xml | 22 + app/src/main/res/values/dimens.xml | 6 + app/src/main/res/values/strings.xml | 15 + app/src/main/res/values/themes.xml | 10 + app/src/main/res/xml/backup_rules.xml | 13 + .../main/res/xml/data_extraction_rules.xml | 19 + .../test/java/com/map/mom/ExampleUnitTest.kt | 17 + build.gradle.kts | 6 + gradle.properties | 23 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 185 ++++ gradlew.bat | 89 ++ images/logo.png | Bin 0 -> 821709 bytes images/screenshot1.png | Bin 0 -> 1728814 bytes images/screenshot2.png | Bin 0 -> 1844530 bytes images/usecase_diagram.png | Bin 0 -> 451512 bytes settings.gradle.kts | 17 + 88 files changed, 2481 insertions(+), 23 deletions(-) create mode 100644 .gitignore create mode 100644 app/.gitignore create mode 100644 app/build.gradle.kts create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/map/mom/ExampleInstrumentedTest.kt create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/ic_launcher-playstore.png create mode 100644 app/src/main/java/com/map/mom/adapters/FeaturesAdapter.kt create mode 100644 app/src/main/java/com/map/mom/adapters/RouteDetailAdapter.kt create mode 100644 app/src/main/java/com/map/mom/models/Feature.kt create mode 100644 app/src/main/java/com/map/mom/models/RouteDetailData.kt create mode 100644 app/src/main/java/com/map/mom/retrofit/RetrofitAPI.kt create mode 100644 app/src/main/java/com/map/mom/retrofit/RetrofitHelper.kt create mode 100644 app/src/main/java/com/map/mom/retrofit/RetrofitResponseManager.kt create mode 100644 app/src/main/java/com/map/mom/screens/MainActivity.kt create mode 100644 app/src/main/java/com/map/mom/screens/SplashActivity.kt create mode 100644 app/src/main/java/com/map/mom/screens/StreetViewActivity.kt create mode 100644 app/src/main/java/com/map/mom/utility/Constants.kt create mode 100644 app/src/main/java/com/map/mom/utility/Extensions.kt create mode 100644 app/src/main/java/com/map/mom/utility/FeatureUtility.kt create mode 100644 app/src/main/java/com/map/mom/viewmodels/FeaturesViewModel.kt create mode 100644 app/src/main/res/drawable/activity.png create mode 100644 app/src/main/res/drawable/cravings.png create mode 100644 app/src/main/res/drawable/demo.png create mode 100644 app/src/main/res/drawable/emergency.png create mode 100644 app/src/main/res/drawable/full_logo.png create mode 100644 app/src/main/res/drawable/ic_check_round.xml create mode 100644 app/src/main/res/drawable/ic_control_map_30.xml create mode 100644 app/src/main/res/drawable/ic_navigation_30.xml create mode 100644 app/src/main/res/drawable/marker_cravings.png create mode 100644 app/src/main/res/drawable/marker_current.png create mode 100644 app/src/main/res/drawable/marker_emergency.png create mode 100644 app/src/main/res/drawable/marker_refresh.png create mode 100644 app/src/main/res/drawable/marker_safety.png create mode 100644 app/src/main/res/drawable/marker_shopping.png create mode 100644 app/src/main/res/drawable/outlined_circle_bg.xml create mode 100644 app/src/main/res/drawable/red_outlined_circle_bg.xml create mode 100644 app/src/main/res/drawable/safety.png create mode 100644 app/src/main/res/drawable/shopping.png create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/activity_splash.xml create mode 100644 app/src/main/res/layout/activity_street_view.xml create mode 100644 app/src/main/res/layout/item_feature.xml create mode 100644 app/src/main/res/layout/item_route_details.xml create mode 100644 app/src/main/res/layout/layout_auto_complete_search.xml create mode 100644 app/src/main/res/layout/layout_progressbar.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/values-night/themes.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/themes.xml create mode 100644 app/src/main/res/xml/backup_rules.xml create mode 100644 app/src/main/res/xml/data_extraction_rules.xml create mode 100644 app/src/test/java/com/map/mom/ExampleUnitTest.kt create mode 100644 build.gradle.kts 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 images/logo.png create mode 100644 images/screenshot1.png create mode 100644 images/screenshot2.png create mode 100644 images/usecase_diagram.png create mode 100644 settings.gradle.kts diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..0b3765a6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +/.idea/* +.idea/gradle.xml +.idea/misc.xml diff --git a/README.md b/README.md index 877fb545..8528559d 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,42 @@ -# Code-with-Google-Maps-2023 - Hack2skill +#### Team Name - Girl Geeks +#### Problem Statement - Pregnancy Friendly Map - Navigating Motherhood with Ease +#### Team Leader Email - bhoomi.vaghasiya12@gmail.com -Welcome to the official repository for the Code-with-Google-Maps-2023 organized by Hack2skill! +![LOGO](/images/logo.png) -## Getting Started +### A Brief of the Prototype: +- This application is specially designed for Pregnant woman. She might use mapping services and applications for various purpose related to their health, safety, and comfort during pregnancy. So, we have planned to make a pregnancy friendly map that provides customised features and valuable information to support expectant mothers during significant phase of their lives. This map can consider mother's specific needs and provide her a safe and comfortable journey. +- This specialised Google Maps Application provides customised features like maternity facility Locator, emergency assistance, healthy eating options, mood swings changer by giving options for cravings and shopping. Also, expectant moms able to view live roads for safety and comfort. After analysing the road, simply navigates to the route using Google map navigation with ease. Whenever moms plans to go to any place that may risk their health, app will give them alert not to go for such places. +- This app can be owned by mother as well as any relative that concerns about the mother and her baby. We are helping expectant moms during their amazing and sensitive phase of life. -To get started with the Code-with-Google-Maps-2023 repository, follow these steps: +## UseCase Diagram: +The UseCase diagram represents the basic functionality of launching the application. The app prompts the user for necessary location permissions to provide accurate location-based services. The app offers users various map view options (e.g., satellite view, terrain view) for a customized mapping experience. It will allow users to explore different features available within the application. The map enables users to view live roads and surroundings using Street View functionality. Using this functionality, users can use navigational assistance, helping them find the best routes to their desired destinations. It will also allow users to search for specific locations such as hospitals, pharmacies, restaurants, and more. +![UML_DIAGRAM](/images/usecase_diagram.png) -### Submission Instruction: - 1. Fork this repository - 2. Create a folder with your Team Name - 3. Upload all the code and necessary files in the created folder - 4. Upload a **README.md** file in your folder with the below mentioned informations. - 5. Generate a Pull Request with your Team Name. (Example: submission-XYZ_team) +### Screenshots: +![App Screenshot](/images/screenshot1.png) +![App Screenshot](/images/screenshot2.png) -### README.md must consist of the following information: -#### Team Name - -#### Problem Statement - -#### Team Leader Email - +### Tech Stack: +- Language - Kotlin +- Google Maps SDK for android +- Google Maps APIS - StreetView API, Routes API, Places API, Elevation API +- IDE - Android Studio +- Http Library - Retrofit -### A Brief of the Prototype: - This section must include UML Diagrams and prototype description - -### Tech Stack: - List Down all technologies used to Build the prototype - ### Step-by-Step Code Execution Instructions: - This Section must contain a set of instructions required to clone and run the prototype so that it can be tested and deeply analyzed - +1. Clone the repository in Android Studio +2. replace with your API_KEY in local.properties +3. Enable StreetView API, Routes API, Places API, Elevation API in your project in google maps platform. +4. Compile and build the project +5. Connect a device or Emulator +6. Run the application + ### Future Scope: - Write about the scalability and futuristic aspects of the prototype developed +- Speed Limit Alerts: Provide speed limit information for specific routes to help pregnant women stay within safe speed limits while traveling. +- In-App Recommendations: Add navigation features within the app so users can easily find and follow routes to their destinations. +- Places Suggestions: Offer suggestions for places of interest along selected routes during navigation, making it convenient for users to find amenities and services. +- Emergency Help: Include emergency buttons or hotlines in the app for immediate access to local emergency services in case of urgent needs. +- Exclusive Discounts: Collaborate with local businesses to provide exclusive discounts and promotions to expectant mothers using the app, making it more valuable for them. +- MOM's Friendly Design: Enhance the app's user interface to make it more user-friendly for mothers. \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 00000000..f44b621e --- /dev/null +++ b/app/.gitignore @@ -0,0 +1,2 @@ +/build +/local.properties diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 00000000..98956645 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,88 @@ +import org.jetbrains.kotlin.konan.properties.Properties +import com.android.build.api.variant.BuildConfigField + +plugins { + id("com.android.application") + id("org.jetbrains.kotlin.android") + id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") +} + +android { + namespace = "com.map.mom" + compileSdk = 34 + + defaultConfig { + applicationId = "com.map.mom" + minSdk = 24 + targetSdk = 33 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + } + buildFeatures { + buildConfig = true + viewBinding = true + } +} + +androidComponents { + val localProperties = Properties() + localProperties.load(rootProject.file("local.properties").reader()) + + onVariants { + it.buildConfigFields.put( + "MAPS_API_KEY", + BuildConfigField( + "String", + "\"${localProperties.getProperty("MAPS_API_KEY")}\"", + "Google maps api key" + ) + ) + } +} + +configurations.all { + resolutionStrategy { + // Force the specific version of play-services-maps + force("com.google.android.gms:play-services-maps:18.2.0") + } +} + +dependencies { + + implementation("androidx.core:core-ktx:1.9.0") + implementation("androidx.appcompat:appcompat:1.6.1") + implementation("com.google.android.material:material:1.10.0") + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.1.5") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") + implementation("com.intuit.sdp:sdp-android:1.1.0") + + implementation("com.squareup.retrofit2:retrofit:2.9.0") + implementation("com.squareup.retrofit2:converter-gson:2.9.0") + + implementation("com.google.android.gms:play-services-location:21.0.1") + implementation("com.google.android.libraries.places:places:3.2.0") + implementation("com.google.maps.android:android-maps-utils:3.4.0") + implementation("com.google.android.gms:play-services-maps:18.2.0") + + +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 00000000..481bb434 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# 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 *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/androidTest/java/com/map/mom/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/map/mom/ExampleInstrumentedTest.kt new file mode 100644 index 00000000..34613eea --- /dev/null +++ b/app/src/androidTest/java/com/map/mom/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.map.mom + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.map.mom", appContext.packageName) + } +} \ 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 00000000..d0765a02 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..c95d9f3bd7c65d49d9e147b2d315368f1dee03fe GIT binary patch literal 55791 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%0AAi+YA4A$S@ z+t)qs-9S^|#{{rl|H+6s4(JM}05>c5ZyH2h!O8@nzGO##EVx}m1-%J+TQUloi_Q+DXY-^ zYrX$?G!`{XXq&s=Z&A4JpZ9qPo~jnfOlUCc-+qcG?!%z<%HBCu;3mD+^2=pZ+E}k_kA54O}RWCy}I%gv)-jR+ z2NIi=L;idA3iGt4?==|%(VJW7?}NNXgEXJgbrOMxO^Rq{L0_bc8QL&LVjYZC=D*hF zd`a9?x%s77RvSA@nJbWae-KWX+1+fG_5Zl~_IN1s_W#d4GsZZNA{5P_O(#(*Ma&e@ z5!*@I0lRG>D=I}!bL&JWYCEXpuqkR)YEvZ46w+=7r%J10A|W}9<6sWI>vOAL`+fd- zp4YR_;=Vuk^|=o3>wUei#FX=`Ej6A zVgLq&L7@VV7EVNYralV>tPVAGJ%H*V6=05ebkPBl2`Ee>d?F|&n?A2->`lr{sC+qr z*OBqxL?#46+d|P_cT`({KeM^_ zBi&}!{NN*x>2cuXj4Px&!1PjrqEET@`wOzAlvwx+_1; zK!3T3!9uHjO8^k2rB zWbf2^Jt;;x%6_c99iA7t%ICr|qQPBhpMR+JT7*UGjgJ9>uE6Mbq}}r-@9=tMBY84 zcBnmiefME0Fh8j=p@UF^zzK>l)fTJHO{Gm>y(C2Y$TNQrG{+~O>g{-I(fUy>UhsN9 zabh=kP{7jO-3ho9xhhQqO<$@gD%)<7UC^ksj2B!0F6uTW|LiNrxq#+CQ}U?Nv{4R` z{AIEVr~tw=8TpRQ^;Y+z{v;?$@vLbVkp~-lTaN9`w?R|~=XUP5@1CIR$FM#Y2ZZD9Fn$$c*tlJDC;YEd(L44IV z2-4-V9gVn(o(nd^{sU)!440fY8tNI>uw4)@sGWfp-ssN|&B*UIaLQSK@%~U!@etN9 z@P|epJRdyl$SO1!S9-fu#;-BY z`MiNfoRJ>2V5}9Sr{3H&dwIEI$mzPhH~RB9bZ)yLG6nK?1vG$K|Kj{0%#F?;`j!9D zhPsw8AWhY~I*bX(@MI%}{^HT%#S(*4jaJ_=|GC9Kkz06wLQ^nnL&jC%0DXvGk~-WO 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 literal 0 HcmV?d00001 diff --git a/app/src/main/java/com/map/mom/adapters/FeaturesAdapter.kt b/app/src/main/java/com/map/mom/adapters/FeaturesAdapter.kt new file mode 100644 index 00000000..8e096627 --- /dev/null +++ b/app/src/main/java/com/map/mom/adapters/FeaturesAdapter.kt @@ -0,0 +1,102 @@ +package com.map.mom.adapters + +import android.content.Context +import android.graphics.drawable.GradientDrawable +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.cardview.widget.CardView +import androidx.core.content.res.ResourcesCompat +import androidx.recyclerview.widget.RecyclerView +import com.map.mom.utility.Constants +import com.map.mom.models.Feature +import com.map.mom.R +import com.map.mom.databinding.ItemFeatureBinding + +class FeaturesAdapter( + private val mContext: Context, + private val features: List, + private val iOnFeatureItemClickListener: IOnFeatureItemClickListener +) : + RecyclerView.Adapter() { + + private lateinit var shapeDrawable: GradientDrawable + + class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val binding = ItemFeatureBinding.bind(itemView) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val binding = ItemFeatureBinding.inflate(LayoutInflater.from(parent.context), parent, false) + return ViewHolder(binding.root) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val feature = features[position] + holder.binding.apply { + tvFeature.text = Constants.featureTextMap[feature.name] ?: "" + if (feature.isSelected) { + cardview.setFeatureSelected(feature.name) + } else { + cardview.setFeatureUnSelected() + } + ivFeature.setImageDrawable( + ResourcesCompat.getDrawable( + mContext.resources, + Constants.featureImageMap[feature.name] ?: R.drawable.activity, + null + ) + ) + } + holder.itemView.setOnClickListener { + iOnFeatureItemClickListener.onItemClick(feature, position) + } + } + + private fun initDrawable() { + shapeDrawable = GradientDrawable() + shapeDrawable.setColor( + ResourcesCompat.getColor( + mContext.resources, + R.color.background, + null + ) + ) + shapeDrawable.cornerRadius = 15.dpToPx().toFloat() + } + + private fun Int.dpToPx(): Int = (this * mContext.resources.displayMetrics.density).toInt() + + override fun getItemCount(): Int { + return features.size + } + + fun getSelectedFeature(): String?{ + val selectedFeature = features.find { it.isSelected } + return selectedFeature?.name + } + + private fun CardView.setFeatureSelected(featureName: String) { +//Apply same color to card as Map marker + //initialize for every different feature + initDrawable() + shapeDrawable.setStroke( + 5.dpToPx(), + ResourcesCompat.getColor( + mContext.resources, + Constants.featureColorMap[featureName] ?: R.color.grey, + null + ) + ) + background = shapeDrawable + setContentPadding(10, 10, 10, 10) + } + + private fun CardView.setFeatureUnSelected(){ + setContentPadding(0, 0, 0, 0) + } + + interface IOnFeatureItemClickListener { + fun onItemClick(feature: Feature, position: Int) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/map/mom/adapters/RouteDetailAdapter.kt b/app/src/main/java/com/map/mom/adapters/RouteDetailAdapter.kt new file mode 100644 index 00000000..be53386f --- /dev/null +++ b/app/src/main/java/com/map/mom/adapters/RouteDetailAdapter.kt @@ -0,0 +1,87 @@ +package com.map.mom.adapters + +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.GradientDrawable +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.map.mom.R +import com.map.mom.models.RouteDetailData +import com.map.mom.databinding.ItemRouteDetailsBinding + +class RouteDetailAdapter( + private val mContext: Context, + private val dataList: List, + private val iOnRouteDetailsItemClickListener: IOnRouteDetailsItemClickListener +) : + RecyclerView.Adapter() { + +// var shapeDrawable = ShapeDrawable() + private var lastSelectedItemPosition = 0 + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RouteDetailViewHolder { + return RouteDetailViewHolder( + ItemRouteDetailsBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ).root + ) + } + + override fun getItemCount(): Int { + return dataList.size + } + + override fun onBindViewHolder(holder: RouteDetailViewHolder, position: Int) { + holder.binding.apply { + with(dataList[position]) { + if (position == 0) { + tvRouteName.text = mContext.getString(R.string.txt_default_route) + } + else{ + tvRouteName.text = "Route ${position+1}" + } + tvDistance.text = distance + tvDuration.text = duration + if (isSelected) { + ivTick.visibility = View.VISIBLE + } else { + ivTick.visibility = View.GONE + } + holder.itemView.apply { + changeBackground(routeColor) + setOnClickListener{ + iOnRouteDetailsItemClickListener.onRouteDetailItemClick(position, lastSelectedItemPosition) + changeRouteSelection(position) + } + } + + } + } + } + + private fun changeRouteSelection(position: Int){ + lastSelectedItemPosition = position + } + + private fun View.changeBackground(routeColor: Int) { + Log.d("Adapter", "route color = $routeColor") + val gradientDrawable = GradientDrawable() + gradientDrawable.shape = GradientDrawable.RECTANGLE + gradientDrawable.cornerRadius = 12f + gradientDrawable.setStroke(12, routeColor) + gradientDrawable.setColor(Color.WHITE) + this.background = gradientDrawable + } + + class RouteDetailViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val binding = ItemRouteDetailsBinding.bind(itemView) + } + + interface IOnRouteDetailsItemClickListener{ + fun onRouteDetailItemClick(position: Int, lastSelectedItemPostion: Int) + } +} diff --git a/app/src/main/java/com/map/mom/models/Feature.kt b/app/src/main/java/com/map/mom/models/Feature.kt new file mode 100644 index 00000000..aadd89e3 --- /dev/null +++ b/app/src/main/java/com/map/mom/models/Feature.kt @@ -0,0 +1,7 @@ +package com.map.mom.models + +data class Feature ( + var name:String, + var image:Int, + var isSelected:Boolean +) \ No newline at end of file diff --git a/app/src/main/java/com/map/mom/models/RouteDetailData.kt b/app/src/main/java/com/map/mom/models/RouteDetailData.kt new file mode 100644 index 00000000..1c38c09b --- /dev/null +++ b/app/src/main/java/com/map/mom/models/RouteDetailData.kt @@ -0,0 +1,9 @@ +package com.map.mom.models + +data class RouteDetailData( + var distance: String? = null, + var distanceInMtrs: Int, + var duration: String? = null, + var isSelected: Boolean = false, + val routeColor: Int +) diff --git a/app/src/main/java/com/map/mom/retrofit/RetrofitAPI.kt b/app/src/main/java/com/map/mom/retrofit/RetrofitAPI.kt new file mode 100644 index 00000000..0f968256 --- /dev/null +++ b/app/src/main/java/com/map/mom/retrofit/RetrofitAPI.kt @@ -0,0 +1,34 @@ +package com.map.mom.retrofit + +import okhttp3.RequestBody +import okhttp3.ResponseBody +import retrofit2.Call +import retrofit2.http.Body +import retrofit2.http.GET +import retrofit2.http.POST +import retrofit2.http.Query + +interface RetrofitAPI { + + @GET("maps/api/place/nearbysearch/json") + fun getNearbyPlaces( + @Query("location") location: String, + @Query("radius") radius: Int, + @Query("type") type: String, + @Query("keyword") keyword: String, + @Query("key") apiKey: String + ): Call + + @POST("directions/v2:computeRoutes") + fun findRoute( + @Query("key") apiKey: String, + @Query("fields") fields: String, + @Body requestBody: RequestBody + ): Call + + @GET("maps/api/elevation/json") + fun getElevationData( + @Query("locations") locations: String, + @Query("key") apiKey: String + ): Call +} \ No newline at end of file diff --git a/app/src/main/java/com/map/mom/retrofit/RetrofitHelper.kt b/app/src/main/java/com/map/mom/retrofit/RetrofitHelper.kt new file mode 100644 index 00000000..4679db1e --- /dev/null +++ b/app/src/main/java/com/map/mom/retrofit/RetrofitHelper.kt @@ -0,0 +1,25 @@ +package com.map.mom.retrofit + +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory + +object RetrofitHelper { + fun getRetrofitObject(): RetrofitAPI { + val retrofit = Retrofit.Builder() + .baseUrl("https://maps.googleapis.com/") + .addConverterFactory(GsonConverterFactory.create()) + .build() + + return retrofit.create(RetrofitAPI::class.java) + } + + fun getRetrofitRoutesObject(): RetrofitAPI { + val retrofit = Retrofit.Builder() + .baseUrl("https://routes.googleapis.com/") + .addConverterFactory(GsonConverterFactory.create()) + .build() + + return retrofit.create(RetrofitAPI::class.java) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/map/mom/retrofit/RetrofitResponseManager.kt b/app/src/main/java/com/map/mom/retrofit/RetrofitResponseManager.kt new file mode 100644 index 00000000..62f614e1 --- /dev/null +++ b/app/src/main/java/com/map/mom/retrofit/RetrofitResponseManager.kt @@ -0,0 +1,29 @@ +package com.map.mom.retrofit + +import android.util.Log +import okhttp3.ResponseBody +import org.json.JSONObject +import retrofit2.Response + +object RetrofitResponseManager { + + fun onResponseFailed(response: Response, callerTag: String) { + try { + val errorBodyString = response.errorBody()?.string() + errorBodyString?.let { + val errorJSON = JSONObject(errorBodyString) + Log.d( + callerTag, + "response is failed: ${response.code()}\n $errorBodyString" + ) + val errorMessage = + errorJSON.getString("error") // Replace "error" with the actual key in the error response + Log.d(callerTag, "Error message: $errorMessage") + } + } catch (e: Exception) { + // Handle JSON parsing error or other exceptions + Log.e(callerTag, "Error parsing error body: ${e.message}") + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/map/mom/screens/MainActivity.kt b/app/src/main/java/com/map/mom/screens/MainActivity.kt new file mode 100644 index 00000000..b36e632a --- /dev/null +++ b/app/src/main/java/com/map/mom/screens/MainActivity.kt @@ -0,0 +1,873 @@ +package com.map.mom.screens + +import android.Manifest +import android.content.Intent +import android.content.pm.PackageManager +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.graphics.Canvas +import android.graphics.Color +import android.location.Location +import android.location.LocationManager +import android.net.Uri +import android.os.Bundle +import android.os.Looper +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.Gravity +import android.view.View +import android.widget.EditText +import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat +import androidx.lifecycle.ViewModelProvider +import com.google.android.gms.common.api.Status +import com.google.android.gms.location.FusedLocationProviderClient +import com.google.android.gms.location.LocationCallback +import com.google.android.gms.location.LocationRequest +import com.google.android.gms.location.LocationResult +import com.google.android.gms.location.LocationServices +import com.google.android.gms.location.Priority +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.LatLngBounds +import com.google.android.gms.maps.model.Marker +import com.google.android.gms.maps.model.MarkerOptions +import com.google.android.gms.maps.model.Polyline +import com.google.android.gms.maps.model.PolylineOptions +import com.google.android.libraries.places.api.Places +import com.google.android.libraries.places.api.model.Place +import com.google.android.libraries.places.widget.AutocompleteSupportFragment +import com.google.android.libraries.places.widget.listener.PlaceSelectionListener +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.google.gson.Gson +import com.google.maps.android.PolyUtil +import com.map.mom.BuildConfig +import com.map.mom.R +import com.map.mom.adapters.FeaturesAdapter +import com.map.mom.adapters.RouteDetailAdapter +import com.map.mom.databinding.ActivityMainBinding +import com.map.mom.models.Feature +import com.map.mom.models.RouteDetailData +import com.map.mom.retrofit.RetrofitHelper +import com.map.mom.retrofit.RetrofitResponseManager +import com.map.mom.utility.Constants +import com.map.mom.utility.Constants.GOOGLE_MAPS_PACKAGE_NAME +import com.map.mom.utility.Constants.MAP_TYPE_HYBRID +import com.map.mom.utility.Constants.MAP_TYPE_NORMAL +import com.map.mom.utility.Constants.MAP_TYPE_TERRAIN +import com.map.mom.utility.Constants.iconMarker +import com.map.mom.utility.Constants.placeAPIFields +import com.map.mom.utility.Constants.routeColorList +import com.map.mom.utility.FeatureUtility +import com.map.mom.utility.FeatureUtility.getKeywordForFeatureType +import com.map.mom.utility.FeatureUtility.removeAllFeatureMarkers +import com.map.mom.utility.changeMapView +import com.map.mom.utility.showToast +import com.map.mom.viewmodels.FeaturesViewModel +import okhttp3.MediaType +import okhttp3.RequestBody +import okhttp3.ResponseBody +import org.json.JSONArray +import org.json.JSONObject +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response +import java.util.Locale + +class MainActivity : AppCompatActivity(), OnMapReadyCallback, + FeaturesAdapter.IOnFeatureItemClickListener, + RouteDetailAdapter.IOnRouteDetailsItemClickListener { + + companion object { + private val TAG = this::class.java.name + } + + private lateinit var mMap: GoogleMap + private lateinit var binding: ActivityMainBinding + private var autocompleteFragment: AutocompleteSupportFragment? = null + + private lateinit var featuresAdapter: FeaturesAdapter + private lateinit var routeDetailAdapter: RouteDetailAdapter + private lateinit var featuresViewModel: FeaturesViewModel + + private lateinit var fusedLocationClient: FusedLocationProviderClient + private var locationCallback: LocationCallback? = null + + private var currentLatLng: LatLng? = null + private var marker: Marker? = null + private var markerMap: MutableMap> = mutableMapOf() + private var routeDetailDataList: MutableList = mutableListOf() + private var polylineMap: MutableMap = mutableMapOf() + private var mapTypeList = listOf(MAP_TYPE_NORMAL, MAP_TYPE_HYBRID, MAP_TYPE_TERRAIN) + private var mapTypeCurrentIndex = 0 + private var destinationLatLang: LatLng? = null + private var destinationMarker: Marker? = null + private var destinationLabelMarker: Marker? = null + private var routeLabelMarkers: MutableList = mutableListOf() + + override fun onStart() { + super.onStart() + setupLocationPermission() + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityMainBinding.inflate(layoutInflater) + setContentView(binding.root) + featuresViewModel = ViewModelProvider(this)[FeaturesViewModel::class.java] + // Obtain the SupportMapFragment and get notified when the map is ready to be used. + val mapFragment = supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment + mapFragment.getMapAsync(this) + } + + //****************************** START GOOGLE MAP VIEW *********************************/ + /* + * Calls On Google map ready + * Usage: Setting location permissions and map features are ready to use + * */ + override fun onMapReady(googleMap: GoogleMap) { + mMap = googleMap + mMap.isBuildingsEnabled = true + + setupLocationPermission() + setupFeaturesAdapter() + setupPlacesAPI() + + /* Show Street view whenever click event occurs on Google Map*/ + mMap.setOnMapClickListener { clickedLatLng -> + enableStreetView(clickedLatLng) + } + + /* Show different types of Map Views */ + binding.imgBtnChangeMapView.setOnClickListener { + mapTypeCurrentIndex = (mapTypeCurrentIndex + 1) % mapTypeList.size + mMap.changeMapView(mapTypeList[mapTypeCurrentIndex]) + } + + /* Start Navigating to selected route */ + binding.imgBtnStartNavigation.setOnClickListener { + if (destinationLatLang != null) { + startNavigationActivity() + } else { + showToast(getString(R.string.empty_destination_navigation_msg)) + } + } + } + + //****************************** END GOOGLE MAP VIEW *********************************/ + + //****************************** START STREET VIEW API USAGE *********************************/ + + /* + * Start showing street view for particular location + * */ + private fun enableStreetView(latLng: LatLng) { + val intent = Intent(this, StreetViewActivity::class.java) + intent.putExtra("lat", latLng.latitude) + intent.putExtra("lng", latLng.longitude) + startActivity(intent) + } + + //****************************** END STREET VIEW API USAGE *********************************/ + + //****************************** START PLACES API INITIALIZATION *********************************/ + + /* + * This function sets up the places api and it's relative autocomplete search view + * Usage: To search places worldwide + * */ + private fun setupPlacesAPI() { + if (!Places.isInitialized()) { //Initialize Google Place API + Places.initialize(applicationContext, BuildConfig.MAPS_API_KEY, Locale.US) + } + Places.createClient(this) + + //Initialize the AutocompleteSupportFragment to search for a Particular place + autocompleteFragment = + supportFragmentManager.findFragmentById(R.id.autocomplete_fragment) as AutocompleteSupportFragment + if (autocompleteFragment != null) { + // Specify the types of place data to return. + autocompleteFragment!!.setPlaceFields(placeAPIFields) + // Set up a PlaceSelectionListener to handle the response. + autocompleteFragment!!.setOnPlaceSelectedListener(object : PlaceSelectionListener { + override fun onPlaceSelected(place: Place) { + setDestinationMarker(place) + Log.d(TAG, "Destination place id = ${place.id}") + if (place.latLng != null) { + removeAllFeatureMarkers( + markerMap, + featuresAdapter.getSelectedFeature() ?: Constants.FEATURE_ACTIVE + ) + getElevationData(place.latLng!!, place.name!!) + findRoute(place) + } + } + + override fun onError(status: Status) { + Log.i(TAG, "An error occurred: $status") + } + }) + //handle on search cancel + val searchView = autocompleteFragment!!.requireView() + .findViewById(com.google.android.libraries.places.R.id.places_autocomplete_search_input) + searchView.hint = getString(R.string.search_view_hint) + searchView.textSize = 16F + searchView.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged( + s: CharSequence?, + start: Int, + count: Int, + after: Int + ) { + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} + override fun afterTextChanged(s: Editable?) { + // Check if the text becomes empty, indicating that the user clicked the cancel button + if (s.isNullOrEmpty()) { + // Handle the cancel button click here + emptyRoutes() + } + } + }) + } + } + + //****************************** END PLACES API INITIALIZATION *********************************/ + + //****************************** START ROUTES API USAGE *********************************/ + + /* + * This function calls when user search for a destination and tries to find route to reach + * Usage: Get routes using Google's Routes API + * */ + private fun findRoute(place: Place) { + val fields = + "routes.localizedValues.distance,routes.localizedValues.duration,routes.polyline,routes.distanceMeters" + RetrofitHelper.getRetrofitRoutesObject().findRoute( + apiKey = BuildConfig.MAPS_API_KEY, + fields = fields, + requestBody = RequestBody.create( + MediaType.parse("application/json"), + getRoutesRequest(place.id).toString() + ) + ).enqueue(object : Callback { + override fun onResponse(call: Call, response: Response) { + if (response.isSuccessful) { + val responseJSON = response.body()?.string() + responseJSON?.let { + val jsonRouteObject = JSONObject(responseJSON) + manageRouteData(jsonRouteObject) + } + } else { + RetrofitResponseManager.onResponseFailed(response, TAG) + } + } + + override fun onFailure(call: Call, t: Throwable) { + Log.d(TAG, "Response failed") + Log.getStackTraceString(t) + hideProgressbar() + } + }) + } + + /* + * This function prepares request data required in Google's Routes API + * */ + private fun getRoutesRequest(destinationPlaceId: String?): JSONObject { + val jsonParams = mutableMapOf( + "origin" to mutableMapOf( + "location" to mutableMapOf( + "latLng" to mutableMapOf( + "latitude" to currentLatLng!!.latitude, + "longitude" to currentLatLng!!.longitude + ) + ) + ), + "destination" to mutableMapOf("placeId" to destinationPlaceId), + "travelMode" to "DRIVE", + "computeAlternativeRoutes" to "true", + "routingPreference" to "TRAFFIC_AWARE", + "languageCode" to "en-US", + ) + return JSONObject(Gson().toJson(jsonParams)) + } + + /* + * Manage Routes data received from Google's Routes API + * Usage: Extract requested data and show routes and markers on map + * */ + private fun manageRouteData(jsonRouteObject: JSONObject) { + val routesArr = jsonRouteObject.optJSONArray("routes") + Log.d(TAG, "Response Json = $routesArr") + if (routesArr != null && routesArr.length() > 0) { + var totalRoutesAvailable = routesArr.length() + for (i in 0 until routesArr.length()) { + val routeObj = JSONObject(routesArr[i].toString()) + val distanceInMtrs = routeObj.optInt("distanceMeters") + val polylineJsonObj = routeObj.optJSONObject("polyline") + val encodedPolyline = polylineJsonObj?.optString("encodedPolyline") + val localizedValuesJsonObj = routeObj.optJSONObject("localizedValues") + val distanceObj = localizedValuesJsonObj?.optJSONObject("distance") + val durationObj = localizedValuesJsonObj?.optJSONObject("duration") + val distance = distanceObj?.optString("text") + val duration = durationObj?.optString("text") + Log.d( + TAG, + "Got route data: distance = $distance\nduration = $duration\nencodedPolyline = $encodedPolyline" + ) + routeDetailDataList.add( + RouteDetailData( + distance, + distanceInMtrs, + duration, + i == 0, + routeColorList[i] + ) + ) + val index = --totalRoutesAvailable + polylineMap[i] = + createRoute(encodedPolyline, routeColorList[i], index) + routeLabelMarkers.add(showRouteLabel(polylineMap[i]!!, duration!!)) + } + setUpRouteAdapter(routeDetailDataList) + } else { + showToast(getString(R.string.no_route_found)) + } + } + + /* + * This function draw route as polyline on map + * */ + private fun createRoute(encodedPolyline: String?, routeColor: Int, routeNo: Int): Polyline { + val latLngList = PolyUtil.decode(encodedPolyline) + val polyline = mMap.addPolyline( + PolylineOptions().addAll(latLngList).color(routeColor).zIndex(routeNo.toFloat()) + .width(20.0F) + ) + setMapViewCamera(latLngList) + return polyline + } + + /* + * This function will be called whenever search places changes/cancelled + * Usage: removes all drawn paths on Google map, + * removes route details show as cards, + * destination marker + * and a route labels + * */ + private fun emptyRoutes() { + val indicesToRemove = mutableListOf() + polylineMap.forEach { (index, polyline) -> + polyline.remove() + indicesToRemove.add(index) + } + + indicesToRemove.sortedDescending().forEach { index -> + polylineMap.remove(index) + if (index >= 0 && index < routeDetailDataList.size) { + routeDetailDataList.removeAt(index) + routeDetailAdapter.notifyItemRemoved(index) + } + } + routeLabelMarkers.forEach { it?.remove() } + destinationMarker?.remove() + destinationLabelMarker?.remove() + destinationLatLang = null + + //After removing All details of last search, Locate map to user's location + moveCameraToCurrentLocation() + } + + //****************************** END ROUTES API USAGE *********************************/ + + //****************************** START PLACES API USAGE *********************************/ + + /* + * Calls when any feature is selected + * Usage: To find near by places to user's live location based on selected feature + * */ + private fun getNearByPlaces(featureName: String, position: Int) { + if (featuresViewModel.featureList[position].isSelected) { + showProgressbar() + if (ActivityCompat.checkSelfPermission( + this, + Manifest.permission.ACCESS_FINE_LOCATION + ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission( + this, + Manifest.permission.ACCESS_COARSE_LOCATION + ) != PackageManager.PERMISSION_GRANTED + ) { + Log.d(TAG, "Missing permissions for locating places") + requestPermissions(Constants.LOCATION_PERMISSIONS, 111) + return + } else { + fusedLocationClient.lastLocation.addOnSuccessListener { location -> + if (location != null) { + // Get the latitude and longitude of the user's current location. + FeatureUtility.getFeatureTypeFromName(featureName) + .forEach { featureType -> + val call = RetrofitHelper.getRetrofitObject().getNearbyPlaces( + location = "${location.latitude},${location.longitude}", + radius = 3000, // Radius in meters. + type = featureType, + keyword = getKeywordForFeatureType(featureName), + apiKey = BuildConfig.MAPS_API_KEY + ) + call.enqueue(object : Callback { + override fun onResponse( + call: Call, + response: Response + ) { + if (response.isSuccessful) { + val placesJson = response.body()?.string() + placesJson?.let { + val jsonObject = JSONObject(placesJson) + if (jsonObject.getString("status") == "OK") { + val resultsArray = + jsonObject.getJSONArray("results") + locateFeatureMarkers(resultsArray, featureName) + } else { + // Handle the case where the response status is not OK + showToast("Place data not found") + } + } + } else { + // Handle the case where the response status is not OK + showToast("Failed to find place data") + RetrofitResponseManager.onResponseFailed(response, TAG) + } + } + + override fun onFailure( + call: Call, + t: Throwable + ) { + Log.getStackTraceString(t) + } + }) + } + // Get the nearby hospitals using the Nearby Places API. + } + } + } + } else { + removeAllFeatureMarkers(markerMap, featureName) + } + } + + /* + * Calls when selected feature data successfully received from Google Places API + * Usage: Based on selected feature, show all places as marker on google map + * */ + fun locateFeatureMarkers(places: JSONArray, featureName: String) { + val latLngList = mutableListOf() + for (i in 0 until places.length()) { + val place = places.getJSONObject(i) + val name = place.getString("name") + val vicinity = place.getString("vicinity") + val geometry = place.getJSONObject("geometry") + val location = geometry.getJSONObject("location") + val lat = location.getDouble("lat") + val lng = location.getDouble("lng") + val latLng = LatLng(lat, lng) + latLngList.add(latLng) + val marker = showMarker(name, latLng, vicinity, iconMarker[featureName]) + markerMap[featureName]!!.add(marker!!) + } + if (latLngList.isNotEmpty()) { + setMapViewCamera(latLngList) + } + hideProgressbar() + } + + //****************************** END PLACES API USAGE *********************************/ + + //****************************** START ELEVATION API USAGE *********************************/ + + /* + * This function helps to calculate elevation for particular place + * Usage: Get Elevation of place from Google's Elevation API + * */ + private fun getElevationData(destinationLatLang: LatLng, destinationName: String) { + Log.d( + TAG, + "Get elevation for : (${destinationLatLang.latitude}, ${destinationLatLang.longitude})" + ) + RetrofitHelper.getRetrofitObject().getElevationData( + "${destinationLatLang.latitude},${destinationLatLang.longitude}", + apiKey = BuildConfig.MAPS_API_KEY + ).enqueue(object : Callback { + override fun onResponse(call: Call, response: Response) { + if (response.isSuccessful) { + val responseJson = response.body()?.string() + if (responseJson != null) { + val jsonElevationDataObj = JSONObject(responseJson) + val status = jsonElevationDataObj.optString("status") + if (status.equals("OK")) { + val resultArr = jsonElevationDataObj.optJSONArray("results") + if (resultArr != null) { + for (i in 0 until resultArr.length()) { + val dataObj = JSONObject(resultArr[i].toString()) + val elevation = dataObj.optString("elevation") + manageElevationData(elevation, destinationName) + } + } + } else { + RetrofitResponseManager.onResponseFailed(response, TAG) + } + } + } + } + + override fun onFailure(call: Call, t: Throwable) { + Log.d(TAG, "Response failed") + Log.getStackTraceString(t) + hideProgressbar() + } + }) + } + + /* + * Handle elevation data received for Google Elevation API + * Usage: Show alerts on risky places for mother and baby + * */ + private fun manageElevationData(elevation: String, destinationName: String) { + if (elevation.toDouble() > Constants.max_safe_elevation_mtr) { + MaterialAlertDialogBuilder(this) + .setTitle("Avoid Risk: High Altitude Area - $destinationName") + .setMessage( + "This region may have lower oxygen pressure " + + "which can affect the oxygen level of both " + + "the mother and a developing baby" + ) + .show() + } + } + + //****************************** END ELEVATION API USAGE *********************************/ + + /* + * Check for provider to get location data + * */ + private fun isProviderEnabled(): Boolean { + val locationManager = getSystemService(LOCATION_SERVICE) as LocationManager + return (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled( + LocationManager.NETWORK_PROVIDER + )) + } + + /* + * To request live location up to date + * */ + private fun requestLocationUpdates() { + val locationRequest = LocationRequest + .Builder(Priority.PRIORITY_HIGH_ACCURACY, 1000).build() + + if (locationCallback == null) { + locationCallback = object : LocationCallback() { + override fun onLocationResult(locationResult: LocationResult) { + Log.d(TAG, "etDeviceCurrentLocation: using request location updates") + for (location in locationResult.locations) { + if (location != null && currentLatLng == null) { + currentLatLng = LatLng(location.latitude, location.longitude) + Log.d(TAG, "$currentLatLng") + } + } + } + } + if (ActivityCompat.checkSelfPermission( + this, + Manifest.permission.ACCESS_FINE_LOCATION + ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission( + this, + Manifest.permission.ACCESS_COARSE_LOCATION + ) != PackageManager.PERMISSION_GRANTED + ) { + setupLocationPermission() + } + fusedLocationClient.requestLocationUpdates( + locationRequest, + locationCallback!!, + Looper.getMainLooper() + ) + } + } + + /* + * To stop live location updates + * */ + private fun stopLocationUpdates() { + if (locationCallback != null) fusedLocationClient.removeLocationUpdates(locationCallback!!) + } + + /* + * Check for location permission granted or not + * */ + private fun isLocationPermissionGranted(): Boolean { + return !(ContextCompat.checkSelfPermission( + applicationContext, + Manifest.permission.ACCESS_FINE_LOCATION + ) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission( + applicationContext, + Manifest.permission.ACCESS_COARSE_LOCATION + ) != PackageManager.PERMISSION_GRANTED) + } + + /* + * This function set up the permission for location + * */ + private fun setupLocationPermission() { + if (!isLocationPermissionGranted()) { + requestPermissions(Constants.LOCATION_PERMISSIONS, 111) + } else { + getCurrentLocation() + } + } + + /* + * TO get current(live) location of user + * */ + private fun getCurrentLocation() { + fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) + try { + if (isProviderEnabled()) { + fusedLocationClient.lastLocation.addOnSuccessListener { location: Location? -> + if (location != null) { + currentLatLng = LatLng(location.latitude, location.longitude) + stopLocationUpdates() + showCurrentLocation() + } else { + Log.d(TAG, "Location Failed") + requestLocationUpdates() + } + // Got last known location. In some rare situations this can be null. + } + if (currentLatLng == null) { + requestLocationUpdates() + } + } + } catch (e: SecurityException) { + Log.d(TAG, e.message.toString()) + } + } + + /* + * To show live location on map as custom marker + * */ + private fun showCurrentLocation() { + if (currentLatLng != null && marker == null) { + val height = 120 + val width = 120 + val b = BitmapFactory.decodeResource(resources, R.drawable.marker_current) + val smallMarker = Bitmap.createScaledBitmap(b, width, height, false) + val smallMarkerIcon = BitmapDescriptorFactory.fromBitmap(smallMarker) + marker = mMap.addMarker( + MarkerOptions().position(currentLatLng!!).title("My Location").icon(smallMarkerIcon) + ) + moveCameraToCurrentLocation() + } + } + + /* + * show map view of user's live location + * */ + private fun moveCameraToCurrentLocation() { + mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLatLng!!, 13f)) + } + + /* + * To show location as marker on map + * */ + private fun showMarker( + name: String?, + latLng: LatLng?, + address: String?, + marker: Int? + ): Marker? { + Log.d(TAG, "show marker at: $address") + val height = 100 + val width = 100 + val b = BitmapFactory.decodeResource(resources, marker!!) + val smallMarker = Bitmap.createScaledBitmap(b, width, height, false) + val smallMarkerIcon = BitmapDescriptorFactory.fromBitmap(smallMarker) + return mMap.addMarker( + MarkerOptions().position( + latLng ?: currentLatLng + ?: LatLng(0.0, 0.0) + ).title("$name").icon(smallMarkerIcon) + ) + } + + /* + * To show map including all the locations requested + * */ + private fun setMapViewCamera(markerPositions: MutableList) { + val builder = LatLngBounds.Builder() + for (pos in markerPositions) { + builder.include(pos) + } + val bounds = builder.build() + val padding = 100 + mMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, padding)) + } + + /* + * Calls when search for a particular place + * Usage: To show marker of searched location as destination + * */ + private fun setDestinationMarker(place: Place) { + destinationLatLang = place.latLng + destinationMarker = mMap.addMarker( + MarkerOptions() + .position(place.latLng ?: currentLatLng ?: LatLng(0.0, 0.0)) + .title(place.name) + .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)) + ) + } + + /* + * Show label in middle of drawn route on map + * */ + private fun showRouteLabel(polyline: Polyline, duration: String): Marker? { + // Create a custom TextView as the label + val labelView = TextView(this) + labelView.text = duration + labelView.setBackgroundColor(Color.BLACK) + labelView.setTextColor(Color.WHITE) + labelView.gravity = Gravity.CENTER + labelView.setPadding(16, 8, 16, 8) + + // Create a MarkerOptions object and set its position to the midpoint of the polyline. + val markerOptions = MarkerOptions().position(midPointOfPolyline(polyline)) + .icon(BitmapDescriptorFactory.fromBitmap(createLabelBitmap(labelView))) // Create a BitmapDescriptor from the TextView + + // Add the marker as label to the map. + destinationLabelMarker = mMap.addMarker(markerOptions)!! + destinationLabelMarker?.showInfoWindow() + return destinationLabelMarker + } + + /* + * This function creates label for route + * */ + private fun createLabelBitmap(view: View): Bitmap { + view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED) + view.layout(0, 0, view.measuredWidth, view.measuredHeight) + val bitmap = + Bitmap.createBitmap(view.measuredWidth, view.measuredHeight, Bitmap.Config.ARGB_8888) + val canvas = Canvas(bitmap) + view.draw(canvas) + return bitmap + } + + /* + * This function calculates the midpoint of a polyline + * */ + private fun midPointOfPolyline(polyline: Polyline): LatLng { + val points = polyline.points + val size = points.size + Log.d(TAG, "points = $points\nsize = $size") + return if (size % 2 != 0) { + val mid = size / 2 + Log.d(TAG, "points = $points\nsize = $size\nmid=$mid") + LatLng( + (points[mid].latitude + points[mid - 1].latitude) / 2, + (points[mid].longitude + points[mid - 1].longitude) / 2 + ) + } else { + points[size / 2] + } + } + + /* + * Calls when any of the route is selected from list of route details + * Usage: To show polyline of route based on route data selection + * */ + private fun onRouteSelectionChange(clickedIndex: Int) { + //find highest index in map + val highestIndex = polylineMap.keys.maxOrNull() ?: 0 + //update indices in map + polylineMap.forEach { (index, polyline) -> + polyline.zIndex = + if (index == clickedIndex) highestIndex.toFloat() + else if (index >= highestIndex) (index - 1).toFloat() + else index.toFloat() + } + } + + /* + * Calls When Navigation is about to start + * Usage: Check and start Google map Navigation based on selected route location + * */ + private fun startNavigationActivity() { + val intent = Intent( + Intent.ACTION_VIEW, + Uri.parse("google.navigation:q=${destinationLatLang?.latitude},${destinationLatLang?.longitude}") + ).apply { + `package` = GOOGLE_MAPS_PACKAGE_NAME + } + if (intent.resolveActivity(packageManager) != null) + startActivity(intent) + else + showToast(getString(R.string.google_maps_install_instruction)) + } + + /* + * To show all features at bottom of the map + * */ + private fun setupFeaturesAdapter() { + val list = featuresViewModel.featureList + for (feature in list) { //create marker list for each feature to handle check uncheck of feature on map + markerMap[feature.name] = mutableListOf() + } + featuresAdapter = FeaturesAdapter(this, list, this) + binding.rvFeatures.adapter = featuresAdapter + } + + /* + * To show each route details received from Google's Route API + * */ + private fun setUpRouteAdapter(routeDetailDataList: MutableList) { + routeDetailAdapter = RouteDetailAdapter(this, routeDetailDataList, this) + binding.rvRouteDetails.adapter = routeDetailAdapter + } + + private fun showProgressbar() { + binding.layoutProgressbar.progressbar.visibility = View.VISIBLE + } + + private fun hideProgressbar() { + binding.layoutProgressbar.progressbar.visibility = View.GONE + } + + /* + * Calls when any route detail data selected + * Usage: On route selection, manage route/polylines of the map, also adjust camera view of map + * */ + override fun onRouteDetailItemClick(position: Int, lastSelectedItemPostion: Int) { + routeDetailDataList[position].isSelected = true + routeDetailDataList[lastSelectedItemPostion].isSelected = false + routeDetailAdapter.notifyItemRangeChanged(0, routeDetailDataList.size) + onRouteSelectionChange(position) + setMapViewCamera(mutableListOf(currentLatLng!!, destinationLatLang!!)) + } + + /* + * Calls when any feature is selected + * Usage: On feature selection/de-selection, manage markers on the map + * */ + override fun onItemClick(feature: Feature, position: Int) { + featuresViewModel.onFeatureClick(position) + featuresAdapter.notifyItemChanged(position) + getNearByPlaces(feature.name, position) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/map/mom/screens/SplashActivity.kt b/app/src/main/java/com/map/mom/screens/SplashActivity.kt new file mode 100644 index 00000000..c9a86ffb --- /dev/null +++ b/app/src/main/java/com/map/mom/screens/SplashActivity.kt @@ -0,0 +1,36 @@ +package com.map.mom.screens + +import android.content.Intent +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import com.map.mom.databinding.ActivitySplashBinding +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.cancel +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch + +class SplashActivity : AppCompatActivity() { + + private val activityScope = CoroutineScope(Dispatchers.Main) + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val binding = ActivitySplashBinding.inflate(layoutInflater) + setContentView(binding.root) + + activityScope.launch { + delay(2000) + startMainActivity() + } + } + + private fun startMainActivity() { + startActivity(Intent(this, MainActivity::class.java)) + finish() + } + + override fun onPause() { + activityScope.cancel() + super.onPause() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/map/mom/screens/StreetViewActivity.kt b/app/src/main/java/com/map/mom/screens/StreetViewActivity.kt new file mode 100644 index 00000000..a4a2e477 --- /dev/null +++ b/app/src/main/java/com/map/mom/screens/StreetViewActivity.kt @@ -0,0 +1,97 @@ +package com.map.mom.screens + +import android.os.Bundle +import android.util.Log +import androidx.appcompat.app.AppCompatActivity +import com.google.android.gms.common.api.Status +import com.google.android.gms.maps.StreetViewPanorama +import com.google.android.gms.maps.SupportStreetViewPanoramaFragment +import com.google.android.gms.maps.model.LatLng +import com.google.android.libraries.places.api.Places +import com.google.android.libraries.places.api.model.Place +import com.google.android.libraries.places.widget.AutocompleteSupportFragment +import com.google.android.libraries.places.widget.listener.PlaceSelectionListener +import com.map.mom.BuildConfig +import com.map.mom.R +import com.map.mom.databinding.ActivityStreetViewBinding +import com.map.mom.utility.Constants.placeAPIFields +import com.map.mom.utility.showToast +import java.util.Locale + +class StreetViewActivity : AppCompatActivity() { + + companion object { + private val TAG = this::class.java.name + } + private lateinit var binding: ActivityStreetViewBinding + private var mStreetViewPanorama: StreetViewPanorama? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityStreetViewBinding.inflate(layoutInflater) + setContentView(binding.root) + + val streetViewPanoramaFragment = + supportFragmentManager + .findFragmentById(R.id.street_view_panorama) as SupportStreetViewPanoramaFragment + streetViewPanoramaFragment.initStreetViewFragment(savedInstanceState) + + val autocompleteFragment = + supportFragmentManager.findFragmentById(R.id.autocomplete_fragment) as AutocompleteSupportFragment + setUpPlaceAPI() + autocompleteFragment.placeSelectionHandler() + } + + private fun SupportStreetViewPanoramaFragment.initStreetViewFragment(savedInstanceState: Bundle?) { + //must be called on a main thread + this.getStreetViewPanoramaAsync { panorama -> + mStreetViewPanorama = panorama + if (savedInstanceState == null) { //no panoramas have been loaded + intent.extras?.let { + val lat = it.getDouble("lat") + val lng = it.getDouble("lng") + Log.d("Activity", "Streetview: latlang = ${LatLng(lat, lng)}") + showPanorama(LatLng(lat, lng)) + } + } + } + } + + private fun setUpPlaceAPI() { + if (!Places.isInitialized()) { + Places.initialize(applicationContext, BuildConfig.MAPS_API_KEY, Locale.US) + } + Places.createClient(this) + } + + private fun AutocompleteSupportFragment.placeSelectionHandler() { + this.setPlaceFields(placeAPIFields) + this.setOnPlaceSelectedListener(object : PlaceSelectionListener { + override fun onPlaceSelected(place: Place) { + if (place.latLng != null) { + showPanorama(place.latLng!!) + } + else{ + showToast("Place Not Found") + } + } + + override fun onError(status: Status) { + Log.i(TAG, "An error occurred: $status") + } + }) + } + + private fun showPanorama(latLng: LatLng) { + Log.d(TAG, "show street view for location: latLng = $latLng") + if (mStreetViewPanorama != null) { + try { + mStreetViewPanorama!!.setPosition(latLng) + } catch (e: Exception) { + showToast("No View Available") + Log.d(TAG, e.message.toString()) + e.printStackTrace() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/map/mom/utility/Constants.kt b/app/src/main/java/com/map/mom/utility/Constants.kt new file mode 100644 index 00000000..0946484e --- /dev/null +++ b/app/src/main/java/com/map/mom/utility/Constants.kt @@ -0,0 +1,77 @@ +package com.map.mom.utility + +import android.Manifest +import android.graphics.Color +import com.google.android.libraries.places.api.model.Place +import com.map.mom.R + +object Constants { + + const val GOOGLE_MAPS_PACKAGE_NAME = "com.google.android.apps.maps" + + const val MAP_TYPE_NORMAL = "normal" + const val MAP_TYPE_HYBRID = "hybrid" + const val MAP_TYPE_TERRAIN = "terrain" + + const val FEATURE_ACTIVE = "park" + const val FEATURE_CRAVINGS = "restaurant" + const val FEATURE_EMERGENCY = "hospital" + const val FEATURE_SAFETY = "safety" + const val FEATURE_SHOPPING = "shopping" + + const val max_safe_elevation_mtr = 2590.8 + + val placeAPIFields = listOf( + Place.Field.ID, + Place.Field.NAME, + Place.Field.LAT_LNG, + Place.Field.ADDRESS + ) + + val LOCATION_PERMISSIONS = arrayOf( + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_COARSE_LOCATION + ) + + val featureColorMap = mapOf( + FEATURE_ACTIVE to android.R.color.holo_green_dark, + FEATURE_CRAVINGS to android.R.color.holo_orange_dark, + FEATURE_EMERGENCY to android.R.color.holo_blue_dark, + FEATURE_SAFETY to R.color.grey, + FEATURE_SHOPPING to R.color.baby_pink + ) + + val featureImageMap = mapOf( + FEATURE_ACTIVE to R.drawable.activity, + FEATURE_CRAVINGS to R.drawable.cravings, + FEATURE_EMERGENCY to R.drawable.emergency, + FEATURE_SAFETY to R.drawable.safety, + FEATURE_SHOPPING to R.drawable.shopping + ) + + val featureTextMap = mapOf( + FEATURE_ACTIVE to "Want\nrefreshment?", + FEATURE_CRAVINGS to "Any\nCravings?", + FEATURE_EMERGENCY to "Have\nEmergency?", + FEATURE_SAFETY to "Need\nSafety?", + FEATURE_SHOPPING to "Like\nto Shop?" + ) + + val routeColorList = listOf( + Color.argb(255, 241, 34, 104), //pink + Color.argb(255, 104, 241, 34), + Color.argb(255, 34, 104, 241), + Color.argb(255, 33, 243, 225), + Color.argb(255, 255, 235, 59), + Color.argb(255, 156, 39, 176), + Color.argb(255, 248, 59, 255) + ) + + val iconMarker = mapOf( + FEATURE_ACTIVE to R.drawable.marker_refresh, + FEATURE_CRAVINGS to R.drawable.marker_cravings, + FEATURE_EMERGENCY to R.drawable.marker_emergency, + FEATURE_SAFETY to R.drawable.marker_safety, + FEATURE_SHOPPING to R.drawable.marker_shopping + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/map/mom/utility/Extensions.kt b/app/src/main/java/com/map/mom/utility/Extensions.kt new file mode 100644 index 00000000..e5417848 --- /dev/null +++ b/app/src/main/java/com/map/mom/utility/Extensions.kt @@ -0,0 +1,17 @@ +package com.map.mom.utility + +import android.content.Context +import android.widget.Toast +import com.google.android.gms.maps.GoogleMap + +fun GoogleMap.changeMapView(mapType: String) { + when (mapType) { + Constants.MAP_TYPE_NORMAL -> this.mapType = GoogleMap.MAP_TYPE_NORMAL + Constants.MAP_TYPE_HYBRID -> this.mapType = GoogleMap.MAP_TYPE_HYBRID + Constants.MAP_TYPE_TERRAIN -> this.mapType = GoogleMap.MAP_TYPE_TERRAIN + } +} + +fun Context.showToast(message: String){ + Toast.makeText(this, message, Toast.LENGTH_SHORT).show() +} \ No newline at end of file diff --git a/app/src/main/java/com/map/mom/utility/FeatureUtility.kt b/app/src/main/java/com/map/mom/utility/FeatureUtility.kt new file mode 100644 index 00000000..943cb8dc --- /dev/null +++ b/app/src/main/java/com/map/mom/utility/FeatureUtility.kt @@ -0,0 +1,89 @@ +package com.map.mom.utility + +import com.google.android.gms.maps.model.Marker +import com.google.android.libraries.places.api.model.Place + +object FeatureUtility { + + fun getFeatureTypeFromName(featureName: String): List { + return when (featureName) { + Constants.FEATURE_ACTIVE -> { + arrayListOf( + Place.Type.PARK.toString().lowercase() + ) + } + + Constants.FEATURE_CRAVINGS -> { + arrayListOf( + Place.Type.RESTAURANT.toString().lowercase(), + Place.Type.CAFE.toString().lowercase(), + Place.Type.SUPERMARKET.toString().lowercase(), + Place.Type.MEAL_DELIVERY.toString().lowercase(), + Place.Type.MEAL_TAKEAWAY.toString().lowercase(), + Place.Type.FOOD.toString().lowercase() + ) + } + + Constants.FEATURE_EMERGENCY -> { + arrayListOf( + Place.Type.DOCTOR.toString().lowercase(), + Place.Type.PHARMACY.toString().lowercase(), + Place.Type.HOSPITAL.toString().lowercase() + ) + } + + Constants.FEATURE_SAFETY -> { + arrayListOf( + Place.Type.POLICE.toString().lowercase(), + Place.Type.FIRE_STATION.toString().lowercase() + ) + } + + Constants.FEATURE_SHOPPING -> { + arrayListOf( + Place.Type.SHOPPING_MALL.toString().lowercase(), + Place.Type.CLOTHING_STORE.toString().lowercase(), + Place.Type.JEWELRY_STORE.toString().lowercase() + ) + } + + else -> arrayListOf() + } + } + + fun getKeywordForFeatureType(featureName: String): String { + return when (featureName) { + Constants.FEATURE_ACTIVE -> { + "pregnancy|walking|garden|care|physiotherapy|walkway" + } + + Constants.FEATURE_CRAVINGS -> { + "food||healthy|health|juice|fruits|diet|salad|pregnancy" + } + + Constants.FEATURE_EMERGENCY -> { + "maternity|gynecologist|obstetrician|prasutigruh|women|pregnancy|pharmacy" + } + + Constants.FEATURE_SAFETY -> { + "" + } + + Constants.FEATURE_SHOPPING -> { + "baby|pregnant|maternity|women|kids" + } + + else -> "" + } + } + + fun removeAllFeatureMarkers(markerMap: MutableMap>, featureType: String) { + if (markerMap[featureType] != null) { + for (marker in markerMap[featureType]!!) { + marker.remove() + } + markerMap[featureType]!!.clear() + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/map/mom/viewmodels/FeaturesViewModel.kt b/app/src/main/java/com/map/mom/viewmodels/FeaturesViewModel.kt new file mode 100644 index 00000000..bcba4ac4 --- /dev/null +++ b/app/src/main/java/com/map/mom/viewmodels/FeaturesViewModel.kt @@ -0,0 +1,28 @@ +package com.map.mom.viewmodels + +import androidx.lifecycle.ViewModel +import com.map.mom.utility.Constants +import com.map.mom.models.Feature +import com.map.mom.R + +class FeaturesViewModel: ViewModel() { + + private val _featureList = mutableListOf() + val featureList: List = _featureList + + init { + _featureList.add(Feature(Constants.FEATURE_ACTIVE, R.drawable.demo, false)) + _featureList.add(Feature(Constants.FEATURE_CRAVINGS, R.drawable.demo, false)) + _featureList.add(Feature(Constants.FEATURE_EMERGENCY, R.drawable.demo, false)) + _featureList.add(Feature(Constants.FEATURE_SAFETY, R.drawable.demo, false)) + _featureList.add(Feature(Constants.FEATURE_SHOPPING, R.drawable.demo, false)) + } + + fun onFeatureClick(position: Int) { + _featureList[position].isSelected = !_featureList[position].isSelected + } + + /*fun getSelectedFeatures(): List { + return _featureList.filter { it.isSelected } + }*/ +} \ No newline at end of file diff --git a/app/src/main/res/drawable/activity.png b/app/src/main/res/drawable/activity.png new file mode 100644 index 0000000000000000000000000000000000000000..412f3201393cec5c8f21767d0b0c4447326b6882 GIT binary patch literal 353865 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