[
  {
    "path": ".gitignore",
    "content": "# Built application files\n*.apk\n*.ap_\n\n# Files for the ART/Dalvik VM\n*.dex\n\n# Java class files\n*.class\n\n# Generated files\nbin/\ngen/\nout/\n\n# Gradle files\n.gradle/\nbuild/\n\n# Local configuration file (sdk path, etc)\nlocal.properties\n\n# Proguard folder generated by Eclipse\nproguard/\n\n# Log Files\n*.log\n\n# Android Studio Navigation editor temp files\n.navigation/\n\n# Android Studio captures folder\ncaptures/\n\n# IntelliJ\n*.iml\n.idea/\n\n# Keystore files\n# Uncomment the following line if you do not want to check your keystore files in.\n#*.jks\n\n# External native build folder generated in Android Studio 2.2 and later\n.externalNativeBuild\n\n# Google Services (e.g. APIs or Firebase)\ngoogle-services.json\n\n# Freeline\nfreeline.py\nfreeline/\nfreeline_project_description.json\n\n# fastlane\nfastlane/report.xml\nfastlane/Preview.html\nfastlane/screenshots\nfastlane/test_output\nfastlane/readme.md\n\n# Others\n.DS_Store\nhidden_keys.xml\n\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "# PING - Because Ping Is Not Google's Place Picker 😉\n[![](https://jitpack.io/v/rtchagas/pingplacepicker.svg)](https://jitpack.io/#rtchagas/pingplacepicker) [![](https://img.shields.io/badge/MinSDK-19-blue)](#)\n\n \nIf you're here looking for a place picker you have probably read this:\n\n![Google Place Picker was deprecated](https://github.com/rtchagas/pingplacepicker/blob/master/images/google_picker_deprecated.png?raw=true)\n\nAs of the end of January 2019, Google deprecated the so useful Place Picker bundled in the Places SDK for Android.\nThe main reason was due the new pricing model of the [Places API](https://developers.google.com/places/android-sdk/usage-and-billing).\n\n**PING** Place Picker is here to help you to (almost) plug-and-play replace the original Google's Place Picker.\n\n<img src=\"images/screenshot_1.jpg\" alt=\"Map expanded\" width=\"210\"/> <img src=\"images/screenshot_4.jpg\" alt=\"Place selected\" width=\"210\"/> <img src=\"images/screenshot_2.jpg\" alt=\"Results expanded\" width=\"210\"/> <img src=\"images/screenshot_6.jpg\" alt=\"Search result\" width=\"210\"/>\n\n## A key difference\n\nDifferent than Google's Place Picker, PING by default **doesn't** search for places according to where the user is pointing the map to. Instead, it shows only the nearby places in the **current** location.\n\nThis was intentional and the reason is simple. By using the **/nearbysearch** from [Google Places Web API](https://developers.google.com/places/web-service/search#PlaceSearchRequests) we are going to be charged *a lot* for each map movement.\n\n![NearbySearch warning](https://github.com/rtchagas/pingplacepicker/blob/master/images/nearby_search_warning.png?raw=true)\n\nAccording to [Nearby Search pricing](https://developers.google.com/maps/billing/understanding-cost-of-use#nearby-search) each request to the API is going to cost 0.04 USD per each (40.00 USD per 1000).\n\nTo avoid the extra cost of **/nearbysearch**, PING relies on Place API's **findCurrentPlace()** that is going to cost 0.030 USD per each  (30.00 USD per 1000).\n\nMoreover, we don't fire a new request when the user moves the map.\n\n## Enabling nearby searches\n\nIf you do want to fetch places from a custom location or refresh them when the user moves the map, you must enable /nearbysearch queries in PING.\n\nTo do that, enable this flag in your project:\n```xml  \n <bool name=\"enable_nearby_search\">true</bool>\n```\n\nBy doing so, PING behaviour will be slightly changed:\n- All places will be fetched by /nearbysearch queries.\n- You get a button to refresh the places for the current location.\n- You can set the initial map position to get the places from via `pingBuilder.setLatLng(LatLng)`\n\n## Why use PING?\n\nPING is based entirely on Google Places and MAPs APIs. Google has the biggest places database available to us developers with most up to date and curated places information.\n\nIt is worth to notice that Google provides US$ 200 (free) per month to be used with Places API. This should be more than enough for small applications that rely on Places data.\n\n## Download\n\nAdd Jitpack in your root build.gradle at the end of repositories:\n\n```gradle\n    allprojects {\n        repositories {\n            ...\n            maven { url 'https://jitpack.io' }\n        }\n    }\n```\n\nStep 2. Add the dependency\n\n```gradle\n    dependencies {\n            // Places library\n            implementation 'com.google.android.libraries.places:places:2.0.0'\n            // PING Place Picker\n            implementation 'com.github.rtchagas:pingplacepicker:2.0.+'\n    }\n```\n\n## Setup\n\n 1. Add Google Play Services to your project - [How to](https://developers.google.com/android/guides/setup)\n 2. Sign up for API keys - [How to](https://developers.google.com/places/android-sdk/signup)\n 3. Add the Android API key to your **AndroidManifest** file as in the [sample project](https://github.com/rtchagas/pingplacepicker/blob/master/sample/src/main/AndroidManifest.xml#L15).\n 4. Optional but strongly recommended to enable R8 in you *[gradle.properties](https://github.com/rtchagas/pingplacepicker/blob/master/gradle.properties#L12)* file\n\n## Hands on\n\nCheck the [sample](https://github.com/rtchagas/pingplacepicker/tree/master/sample) project for a full working example.\n\n### - Kotlin\n```kotlin\n    private fun showPlacePicker() {  \n        val builder = PingPlacePicker.IntentBuilder()\n\tbuilder.setAndroidApiKey(\"YOUR_ANDROID_API_KEY\")  \n        \t.setMapsApiKey(\"YOUR_MAPS_API_KEY\")\n\t\n\t// If you want to set a initial location rather then the current device location.\n\t// NOTE: enable_nearby_search MUST be true.\n        // builder.setLatLng(LatLng(37.4219999, -122.0862462))\n\t\n        try {\n            val placeIntent = pingBuilder.build(this)\n            startActivityForResult(placeIntent, REQUEST_PLACE_PICKER)\n        }\n        catch (ex: Exception) {  \n            toast(\"Google Play Services is not Available\")  \n        }\n    }\n    \n    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {  \n\tsuper.onActivityResult(requestCode, resultCode, data)  \n\tif ((requestCode == REQUEST_PLACE_PICKER) && (resultCode == Activity.RESULT_OK)) {  \n\t    val place: Place? = PingPlacePicker.getPlace(data!!)  \n\t    toast(\"You selected: ${place?.name}\")  \n\t}  \n    }\n```\n\n### - Java\n```java\n    private void showPlacePicker() {\n\tPingPlacePicker.IntentBuilder builder = new PingPlacePicker.IntentBuilder();\n\tbuilder.setAndroidApiKey(\"YOUR_ANDROID_API_KEY\")\n\t       .setMapsApiKey(\"YOUR_MAPS_API_KEY\");\n\t\n\t// If you want to set a initial location rather then the current device location.\n\t// NOTE: enable_nearby_search MUST be true.\n        // builder.setLatLng(new LatLng(37.4219999, -122.0862462))\n\t\n\ttry {\n\t    Intent placeIntent = builder.build(getActivity());  \n\t    startActivityForResult(placeIntent, REQUEST_PLACE_PICKER);  \n\t}  \n\tcatch (Exception ex) {  \n\t    // Google Play services is not available... \n\t}\n    }\n    \n    @Override  \n    public void onActivityResult(int requestCode, int resultCode, Intent data) {  \n        if ((requestCode == REQUEST_PLACE_PICKER) && (resultCode == RESULT_OK)) {  \n            Place place = PingPlacePicker.getPlace(data);  \n\t    if (place != null) {  \n                Toast.makeText(this, \"You selected the place: \" + place.getName(), Toast.LENGTH_SHORT).show();\n            }  \n        }\n    }\n```\n\n## API Keys\n\nPING needs two API keys in order to work.\n\nIt was decided to split the API keys to clearly distinguish what you're going to be charged for. Also, the Places Web API and the Geocoding API don't allow an Android API key to be used. To not expose an unrestricted key for all APIs, the Maps API key is now required.\n\n| Key | Restriction | Purpose\n|--|--|--|\n| Android key | [Android Applications](https://developers.google.com/places/android-sdk/signup#restrict-key) | Used as the Places API key. Main purpose is to retrieve the current places and place details.\n| Maps key | [APIs: Geocoding, Maps Static and Places API only](https://cloud.google.com/docs/authentication/api-keys#api_key_restrictions) | Used to fetch static maps, nearby places through Places Web API and perform reverse geocoding on the current user position. That is, discover the address that the user is current pointing to. Your key should look [like this](https://raw.githubusercontent.com/rtchagas/pingplacepicker/master/images/maps_api_key.png).\n\n**TIP:** It is strongly recommended to **not expose** your Maps API key in your resource files. Anyone could decompile your apk and have access to that key. To avoid this, the key should be at least obfuscated.\nA nice approach is to save the key in the cloud through \"Firebase remote config\" and fetch it at runtime.\n\n## Configuration\n\nAs some features are charged by Google, you can alter the default **PING** Place Picker behaviour by overriding below resources:\n\n```xml  \n<!-- 0.002 USD per each (2.00 USD per 1000) -->  \n<bool name=\"show_confirmation_photo\">true</bool>  \n\n<!-- 0.007 USD per each (7.00 USD per 1000) -->  \n<bool name=\"show_confirmation_map\">true</bool>\n\n<!-- If true, the map will automatically center (pan) to\n     the selected marker -->\n<bool name=\"auto_center_on_marker_click\">false</bool>\n```\n\n## Theming\n\nPING is fully customizable and you just need to override some colors to make it seamlessly connected to your app.\n\nSince release [2.0.0](https://github.com/rtchagas/pingplacepicker/releases/tag/2.0.0) PING supports dark/night mode by default.<br/>\nPlease make sure your app provide the correct resources to switch to night mode.\n\nYou can always refer to [Material Design documentation](https://material.io/develop/android/theming/dark) to know more about dark theme and how to implement it.\n\nTo customize PING you need to override these colors:\n\nFor day/light theme:\n\n- `res/values/colors.xml`\n\n```xml\n\n    <!-- Toolbar color, places icons, text on top of primary surfaces -->\n    <color name=\"colorPrimary\">@color/material_teal500</color>\n    <color name=\"colorPrimaryDark\">@color/material_teal800</color>\n    <color name=\"colorOnPrimary\">@color/material_white</color>\n\n    <!-- Accent color in buttons and actions -->\n    <color name=\"colorSecondary\">@color/material_deeporange500</color>\n    <color name=\"colorSecondaryDark\">@color/material_deeporange800</color>\n    <color name=\"colorOnSecondary\">@color/material_white</color>\n\n    <!-- Main activity background -->\n    <color name=\"colorBackground\">@color/material_grey200</color>\n    <color name=\"colorOnBackground\">@color/material_black</color>\n\n    <!-- Cards and elevated views background -->\n    <color name=\"colorSurface\">@color/material_white</color>\n    <color name=\"colorOnSurface\">@color/material_black</color>\n\n    <!-- Text colors -->\n    <color name=\"textColorPrimary\">@color/material_on_surface_emphasis_high_type</color>\n    <color name=\"textColorSecondary\">@color/material_on_surface_emphasis_medium</color>\n\n    <color name=\"colorMarker\">@color/material_deeporange400</color>\n    <color name=\"colorMarkerInnerIcon\">@color/material_white</color>\n\n```\n\nFor night/dark theme:\n\n- `res/values-night/colors.xml`\n\n```xml\n\n    <color name=\"colorPrimary\">@color/material_teal300</color>\n    <!-- Let the primary dark color as the surface color to not colorfy the status bar -->\n    <color name=\"colorPrimaryDark\">@color/colorSurface</color>\n    <color name=\"colorOnPrimary\">@color/material_black</color>\n\n    <color name=\"colorSecondary\">@color/material_deeporange200</color>\n    <color name=\"colorSecondaryDark\">@color/material_deeporange300</color>\n    <color name=\"colorOnSecondary\">@color/material_black</color>\n\n    <color name=\"colorBackground\">@color/colorSurface</color>\n    <color name=\"colorOnBackground\">@color/colorOnSurface</color>\n\n    <color name=\"colorSurface\">#202125</color>\n    <color name=\"colorOnSurface\">@color/material_white</color>\n\n    <color name=\"textColorPrimary\">@color/material_on_surface_emphasis_high_type</color>\n    <color name=\"textColorSecondary\">@color/material_on_surface_emphasis_medium</color>\n\n    <color name=\"colorMarker\">@color/material_deeporange200</color>\n    <color name=\"colorMarkerInnerIcon\">@color/colorSurface</color>\n\n```\n\nIn case of doubt in how to implement the new styles, please take a look at the [sample app](https://github.com/rtchagas/pingplacepicker/tree/master/sample).\n\n## Contribute\n\nLet's together make PING awesome!\n\nPlease feel free to contribute with improvements.\n\n## License\n\n    Copyright 2020 Rafael Chagas\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n<!--stackedit_data:\neyJoaXN0b3J5IjpbLTE2OTEwOTMwMTIsNjk1MDQ1MzY0LDE4NT\nI5NDk5MDUsMjAwMTQ0MzM5OSwyODIyMTI1MjFdfQ==\n-->\n"
  },
  {
    "path": "build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext.kotlin_version = '1.8.22'\n\n    repositories {\n        google()\n        mavenCentral()\n    }\n\n    dependencies {\n        classpath 'com.android.tools.build:gradle:8.1.1'\n        classpath 'com.google.gms:google-services:4.4.0'\n        classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version\"\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        mavenCentral()\n        maven { url \"https://jitpack.io\" }\n    }\n}\n\ntasks.register('clean', Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Sun Nov 15 15:01:33 CET 2020\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-8.0-all.zip\n"
  },
  {
    "path": "gradle.properties",
    "content": "android.enableJetifier=true\nandroid.useAndroidX=true\norg.gradle.jvmargs=-Xmx2512m\nandroid.defaults.buildfeatures.buildconfig=true\nandroid.nonTransitiveRClass=false\nandroid.nonFinalResIds=false\n"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env sh\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=$(save \"$@\")\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\n# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong\nif [ \"$(uname)\" = \"Darwin\" ] && [ \"$HOME\" = \"$PWD\" ]; then\n  cd \"$(dirname \"$0\")\"\nfi\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@rem  Gradle startup script for Windows\r\n@rem\r\n@rem ##########################################################################\r\n\r\n@rem Set local scope for the variables with windows NT shell\r\nif \"%OS%\"==\"Windows_NT\" setlocal\r\n\r\nset DIRNAME=%~dp0\r\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\r\nset APP_BASE_NAME=%~n0\r\nset APP_HOME=%DIRNAME%\r\n\r\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r\nset DEFAULT_JVM_OPTS=\r\n\r\n@rem Find java.exe\r\nif defined JAVA_HOME goto findJavaFromJavaHome\r\n\r\nset JAVA_EXE=java.exe\r\n%JAVA_EXE% -version >NUL 2>&1\r\nif \"%ERRORLEVEL%\" == \"0\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:findJavaFromJavaHome\r\nset JAVA_HOME=%JAVA_HOME:\"=%\r\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\r\n\r\nif exist \"%JAVA_EXE%\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:init\r\n@rem Get command-line arguments, handling Windows variants\r\n\r\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\r\n\r\n:win9xME_args\r\n@rem Slurp the command line arguments.\r\nset CMD_LINE_ARGS=\r\nset _SKIP=2\r\n\r\n:win9xME_args_slurp\r\nif \"x%~1\" == \"x\" goto execute\r\n\r\nset CMD_LINE_ARGS=%*\r\n\r\n:execute\r\n@rem Setup the command line\r\n\r\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n\r\n@rem Execute Gradle\r\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\r\n\r\n:end\r\n@rem End local scope for the variables with windows NT shell\r\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\r\n\r\n:fail\r\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r\nrem the _cmd.exe /c_ return code!\r\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\r\nexit /b 1\r\n\r\n:mainEnd\r\nif \"%OS%\"==\"Windows_NT\" endlocal\r\n\r\n:omega\r\n"
  },
  {
    "path": "jitpack.yml",
    "content": "jdk: openjdk17\n"
  },
  {
    "path": "library/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "library/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'kotlin-android'\napply plugin: 'kotlin-kapt'\napply plugin: 'kotlin-parcelize'\napply plugin: 'maven-publish'\n\nandroid {\n\n    namespace = \"com.rtchagas.pingplacepicker\"\n\n    compileSdk 33\n\n    defaultConfig {\n        minSdkVersion 21\n        targetSdkVersion 33\n        vectorDrawables.useSupportLibrary = true\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n        consumerProguardFiles 'consumer-rules.pro'\n    }\n\n    compileOptions {\n        isCoreLibraryDesugaringEnabled()\n    }\n\n    kotlin {\n        jvmToolchain(11)\n    }\n\n    kotlinOptions {\n        freeCompilerArgs += \"-Xopt-in=kotlin.RequiresOptIn\"\n    }\n\n    buildFeatures {\n        viewBinding true\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n\n    publishing {\n        singleVariant('release') {\n            withSourcesJar()\n        }\n    }\n}\n\ndependencies {\n\n    implementation fileTree(dir: 'libs', include: ['*.jar'])\n\n    // Kotlin\n    implementation \"org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version\"\n    implementation \"org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3\"\n    implementation \"org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3\"\n\n    // KTX\n    implementation 'androidx.core:core-ktx:1.10.1'\n\n    // Support library\n    implementation 'androidx.appcompat:appcompat:1.6.1'\n    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'\n    implementation 'com.google.android.material:material:1.9.0'\n\n    // Android architecture components\n    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2'\n    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.2'\n    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.2'\n    implementation 'androidx.lifecycle:lifecycle-common-java8:2.6.2'\n\n    // Google Play Services\n    implementation 'com.google.android.gms:play-services-location:21.0.1'\n    implementation 'com.google.android.gms:play-services-maps:18.1.0'\n    implementation 'com.google.maps.android:android-maps-utils:3.4.0'\n    implementation 'com.google.android.libraries.places:places:3.2.0'\n\n    // Koin for Android\n    implementation 'io.insert-koin:koin-android:3.1.5'\n\n    // Rx\n    implementation 'io.reactivex.rxjava2:rxjava:2.2.21'\n    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'\n    implementation 'com.jakewharton.rxbinding3:rxbinding:3.1.0'\n\n    // Moshi\n    implementation 'com.squareup.moshi:moshi:1.15.0'\n    kapt 'com.squareup.moshi:moshi-kotlin-codegen:1.15.0'\n\n    // Retrofit\n    implementation 'com.squareup.retrofit2:retrofit:2.9.0'\n    implementation 'com.squareup.retrofit2:converter-moshi:2.9.0'\n    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.9.0'\n    implementation 'com.squareup.okhttp3:logging-interceptor:4.11.0'\n\n    // Coil\n    implementation 'io.coil-kt:coil:2.4.0'\n\n    // 3rd party\n    implementation 'com.github.mcginty:material-colors:1.1.0'\n    implementation 'com.karumi:dexter:6.2.3'\n\n    testImplementation 'junit:junit:4.13.2'\n}\n\nafterEvaluate {\n    publishing {\n        publications {\n            release(MavenPublication) {\n                from components.release\n                groupId = 'com.github.rtchagas'\n                artifactId = 'pingplacepicker'\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "library/consumer-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile\n\n# Keep custom model classes\n-keep class com.rtchagas.pingplacepicker.model.** { *; }\n-dontnote com.rtchagas.pingplacepicker.model.**\n\n# Moshi\n\n# JSR 305 annotations are for embedding nullability information.\n-dontwarn javax.annotation.**\n\n-keepclasseswithmembers class * {\n    @com.squareup.moshi.* <methods>;\n}\n\n-keep @com.squareup.moshi.JsonQualifier interface *\n\n# Enum field names are used by the integrated EnumJsonAdapter.\n# Annotate enums with @JsonClass(generateAdapter = false) to use them with Moshi.\n-keepclassmembers @com.squareup.moshi.JsonClass class * extends java.lang.Enum {\n    <fields>;\n}\n\n# The name of @JsonClass types is used to look up the generated adapter.\n-keepnames @com.squareup.moshi.JsonClass class *\n\n# Retain generated JsonAdapters if annotated type is retained.\n-if @com.squareup.moshi.JsonClass class *\n-keep class <1>JsonAdapter {\n    <init>(...);\n    <fields>;\n}\n-if @com.squareup.moshi.JsonClass class **$*\n-keep class <1>_<2>JsonAdapter {\n    <init>(...);\n    <fields>;\n}\n\n-keep class kotlin.reflect.jvm.internal.impl.builtins.BuiltInsLoaderImpl\n\n-keepclassmembers class kotlin.Metadata {\n    public <methods>;\n}\n\n# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.\n-dontwarn org.codehaus.mojo.animal_sniffer.*\n\n# Retrofit config\n# Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and\n# EnclosingMethod is required to use InnerClasses.\n-keepattributes Signature, InnerClasses, EnclosingMethod\n\n# Retrofit does reflection on method and parameter annotations.\n-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations\n\n# Keep annotation default values (e.g., retrofit2.http.Field.encoded).\n-keepattributes AnnotationDefault\n\n# Retain service method parameters when optimizing.\n-keepclassmembers,allowshrinking,allowobfuscation interface * {\n    @retrofit2.http.* <methods>;\n}\n\n# Ignore annotation used for build tooling.\n-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement\n\n# Ignore JSR 305 annotations for embedding nullability information.\n-dontwarn javax.annotation.**\n\n# Guarded by a NoClassDefFoundError try/catch and only used when on the classpath.\n-dontwarn kotlin.Unit\n\n# Top-level functions that can only be used by Kotlin.\n-dontwarn retrofit2.KotlinExtensions\n-dontwarn retrofit2.KotlinExtensions$*\n\n# With R8 full mode, it sees no subtypes of Retrofit interfaces since they are created with a Proxy\n# and replaces all potential values with null. Explicitly keeping the interfaces prevents this.\n-if interface * { @retrofit2.http.* <methods>; }\n-keep,allowobfuscation interface <1>\n\n# Keep inherited services.\n-if interface * { @retrofit2.http.* <methods>; }\n-keep,allowobfuscation interface * extends <1>\n\n# With R8 full mode generic signatures are stripped for classes that are not\n# kept. Suspend functions are wrapped in continuations where the type argument\n# is used.\n-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation\n\n# R8 full mode strips generic signatures from return types if not kept.\n-if interface * { @retrofit2.http.* public *** *(...); }\n-keep,allowoptimization,allowshrinking,allowobfuscation class <3>\n\n# With R8 full mode generic signatures are stripped for classes that are not kept.\n-keep,allowobfuscation,allowshrinking class retrofit2.Response\n"
  },
  {
    "path": "library/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile\n"
  },
  {
    "path": "library/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <uses-feature\n        android:glEsVersion=\"0x00020000\"\n        android:required=\"true\" />\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />\n    <uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />\n    <uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />\n\n    <application>\n\n        <activity\n            android:name=\".ui.activity.PlacePickerActivity\"\n            android:launchMode=\"singleTop\"\n            android:theme=\"@style/PingTheme.NoStatus\" />\n\n        <uses-library\n            android:name=\"org.apache.http.legacy\"\n            android:required=\"false\" />\n\n        <meta-data\n            android:name=\"com.google.android.gms.version\"\n            android:value=\"@integer/google_play_services_version\" />\n\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/Config.kt",
    "content": "package com.rtchagas.pingplacepicker\n\ninternal object Config {\n\n    const val PLACE_IMG_WIDTH = 640\n    const val PLACE_IMG_HEIGHT = 320\n\n    const val STATIC_MAP_URL = \"https://maps.googleapis.com/maps/api/staticmap?\" +\n            \"size=${PLACE_IMG_WIDTH}x${PLACE_IMG_HEIGHT}\" +\n            \"&markers=color:red|%.6f,%.6f\" +\n            \"&key=%s\" +\n            \"&language=%s\"\n\n    const val STATIC_MAP_URL_STYLE_DARK = \"&style=element:geometry%7Ccolor:0x242f3e\" +\n            \"&style=element:labels.text.fill%7Ccolor:0x746855\" +\n            \"&style=element:labels.text.stroke%7Ccolor:0x242f3e\" +\n            \"&style=feature:administrative.locality%7Celement:labels.text.fill%7Ccolor:0xd59563\" +\n            \"&style=feature:poi%7Celement:labels.text.fill%7Ccolor:0xd59563\" +\n            \"&style=feature:poi.park%7Celement:geometry%7Ccolor:0x263c3f\" +\n            \"&style=feature:poi.park%7Celement:labels.text.fill%7Ccolor:0x6b9a76\" +\n            \"&style=feature:road%7Celement:geometry%7Ccolor:0x38414e\" +\n            \"&style=feature:road%7Celement:geometry.stroke%7Ccolor:0x212a37\" +\n            \"&style=feature:road%7Celement:labels.text.fill%7Ccolor:0x9ca5b3\" +\n            \"&style=feature:road.highway%7Celement:geometry%7Ccolor:0x746855\" +\n            \"&style=feature:road.highway%7Celement:geometry.stroke%7Ccolor:0x1f2835\" +\n            \"&style=feature:road.highway%7Celement:labels.text.fill%7Ccolor:0xf3d19c\" +\n            \"&style=feature:transit%7Celement:geometry%7Ccolor:0x2f3948\" +\n            \"&style=feature:transit.station%7Celement:labels.text.fill%7Ccolor:0xd59563\" +\n            \"&style=feature:water%7Celement:geometry%7Ccolor:0x17263c\" +\n            \"&style=feature:water%7Celement:labels.text.fill%7Ccolor:0x515c6d\" +\n            \"&style=feature:water%7Celement:labels.text.stroke%7Ccolor:0x17263c\"\n}\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/PingPlacePicker.kt",
    "content": "package com.rtchagas.pingplacepicker\n\nimport android.app.Activity\nimport android.content.Intent\nimport com.google.android.gms.common.ConnectionResult\nimport com.google.android.gms.common.GoogleApiAvailability\nimport com.google.android.gms.common.GooglePlayServicesNotAvailableException\nimport com.google.android.gms.maps.model.LatLng\nimport com.google.android.libraries.places.api.model.Place\nimport com.rtchagas.pingplacepicker.inject.PingKoinContext\nimport com.rtchagas.pingplacepicker.ui.activity.PlacePickerActivity\n\nobject PingPlacePicker {\n\n    internal var androidApiKey: String = \"\"\n\n    internal var mapsApiKey: String = \"\"\n\n    internal var urlSigningSecret = \"\"\n\n    internal var isNearbySearchEnabled = false\n\n    internal var onPlaceSelectedListener: OnPlaceSelectedListener? = null\n\n    class Builder {\n\n        private val intent = Intent()\n\n        /**\n         * This key will be used to all nearby requests to Google Places API.\n         */\n        fun setAndroidApiKey(androidKey: String): Builder {\n            androidApiKey = androidKey\n            return this\n        }\n\n        /**\n         * This key will be used to nearby searches and reverse geocoding\n         * requests to Google Maps HTTP API.\n         */\n        fun setMapsApiKey(geoKey: String): Builder {\n            mapsApiKey = geoKey\n            return this\n        }\n\n        /**\n         * The initial location that the map must be pointing to.\n         * If this is set, PING will search for places near this location.\n         */\n        fun setLatLng(location: LatLng): Builder {\n            intent.putExtra(PlacePickerActivity.EXTRA_LOCATION, location)\n            return this\n        }\n\n        /**\n         * Sets the listener to be called when a place is selected.\n         */\n        fun setOnPlaceSelectedListener(listener: OnPlaceSelectedListener): Builder {\n            onPlaceSelectedListener = listener\n            return this\n        }\n\n        /**\n         * Enables URL signing for Google APIs that require it.\n         *\n         * Currently only Maps Statics API requires signing for some users.\n         *\n         * More info [here](https://developers.google.com/maps/documentation/maps-static/get-api-key#generating-digital-signatures)\n         */\n        fun setUrlSigningSecret(secretKey: String): Builder {\n            urlSigningSecret = secretKey\n            return this\n        }\n\n        /**\n         * Set whether the library should return the place coordinate retrieved from GooglePlace\n         * or the actual selected location from google map\n         */\n        fun setShouldReturnActualLatLng(shouldReturnActualLatLng: Boolean): Builder {\n            intent.putExtra(\n                PlacePickerActivity.EXTRA_RETURN_ACTUAL_LATLNG,\n                shouldReturnActualLatLng\n            )\n            return this\n        }\n\n        @Throws(GooglePlayServicesNotAvailableException::class)\n        fun build(activity: Activity): Intent {\n\n            PingKoinContext.init(activity.application)\n\n            val result: Int =\n                GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(activity)\n\n            if (ConnectionResult.SUCCESS != result) {\n                throw GooglePlayServicesNotAvailableException(result)\n            }\n\n            isNearbySearchEnabled = activity.resources.getBoolean(R.bool.enable_nearby_search)\n\n            intent.setClass(activity, PlacePickerActivity::class.java)\n            return intent\n        }\n    }\n\n    /**\n     * Listener to be called when PING returns a selected place.\n     */\n    interface OnPlaceSelectedListener {\n\n        /**\n         * Called when PING returns a place selected by the user.\n         * @param place the selected place.\n         * @param latLng the selected latitude/longitude in the map.\n         */\n        fun onPlaceSelected(place: Place, latLng: LatLng)\n\n    }\n}\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/helper/PermissionsHelper.kt",
    "content": "package com.rtchagas.pingplacepicker.helper\n\nimport android.Manifest\nimport android.app.Activity\nimport com.karumi.dexter.Dexter\nimport com.karumi.dexter.listener.single.BasePermissionListener\nimport com.karumi.dexter.listener.single.CompositePermissionListener\nimport com.karumi.dexter.listener.single.DialogOnDeniedPermissionListener\nimport com.rtchagas.pingplacepicker.R\n\n\ninternal object PermissionsHelper {\n\n    fun checkForLocationPermission(activity: Activity, listener: BasePermissionListener?) {\n\n        val dialogPermissionListener = DialogOnDeniedPermissionListener.Builder\n            .withContext(activity)\n            .withTitle(R.string.permission_fine_location_title)\n            .withMessage(R.string.permission_fine_location_message)\n            .withButtonText(android.R.string.ok)\n            .withIcon(R.drawable.ic_map_marker_radius_black_24dp)\n            .build()\n\n        val compositeListener =\n            if (listener != null) {\n                CompositePermissionListener(dialogPermissionListener, listener)\n            } else {\n                CompositePermissionListener(dialogPermissionListener)\n            }\n\n        Dexter.withContext(activity)\n            .withPermission(Manifest.permission.ACCESS_FINE_LOCATION)\n            .withListener(compositeListener)\n            .check()\n    }\n}\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/helper/UrlSignerHelper.kt",
    "content": "package com.rtchagas.pingplacepicker.helper\n\nimport android.util.Base64\nimport android.util.Log\n\nimport java.net.MalformedURLException\nimport java.net.URI\nimport java.net.URL\nimport java.security.InvalidKeyException\nimport java.security.NoSuchAlgorithmException\n\nimport javax.crypto.Mac\nimport javax.crypto.spec.SecretKeySpec\n\ninternal object UrlSignerHelper {\n\n    private const val TAG = \"UrlSignerHelper\"\n\n    fun signUrl(inputUrl: String, inputKey: String): String {\n\n        // Convert the string to a URL so we can parse it\n        var url: URL\n\n        try {\n            url = URL(inputUrl)\n        }\n        catch (e: MalformedURLException) {\n            Log.e(TAG, \"Could not parse the input URL\")\n            return inputUrl\n        }\n\n        // Encode the URL\n        val uri = URI(url.protocol, url.userInfo, url.host, url.port, url.path, url.query, url.ref)\n        url = uri.toURL()\n\n        // Convert the key from 'web safe' base 64 to binary\n        val byteKey: ByteArray = Base64.decode(inputKey, Base64.URL_SAFE)\n\n        return try {\n            val signature = signRequest(url.path, url.query, byteKey)\n            \"$inputUrl&signature=$signature\"\n        }\n        catch (ex: Exception) {\n            Log.e(TAG, \"Could not sign the URL. ${ex.message}\")\n            inputUrl\n        }\n    }\n\n    @Throws(NoSuchAlgorithmException::class, InvalidKeyException::class)\n    private fun signRequest(path: String, query: String, key: ByteArray): String {\n\n        // Retrieve the proper URL components to sign\n        val resource = \"$path?$query\"\n\n        // Get an HMAC-SHA1 signing key from the raw key bytes\n        val sha1Key = SecretKeySpec(key, \"HmacSHA1\")\n\n        // Get an HMAC-SHA1 Mac instance and initialize it with the HMAC-SHA1 key\n        val mac = Mac.getInstance(\"HmacSHA1\")\n        mac.init(sha1Key)\n\n        // compute the binary signature for the request\n        val sigBytes = mac.doFinal(resource.toByteArray())\n\n        // base 64 encode the binary signature\n        return Base64.encodeToString(sigBytes, Base64.URL_SAFE or Base64.NO_WRAP)\n    }\n}"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/inject/PingKoinComponent.kt",
    "content": "package com.rtchagas.pingplacepicker.inject\n\nimport android.content.Context\nimport com.rtchagas.pingplacepicker.BuildConfig\nimport org.koin.android.ext.koin.androidContext\nimport org.koin.android.ext.koin.androidLogger\nimport org.koin.core.Koin\nimport org.koin.core.component.KoinComponent\nimport org.koin.core.logger.Level\nimport org.koin.dsl.koinApplication\n\ninternal object PingKoinContext {\n\n    private lateinit var appContext: Context\n\n    val koin: Koin by lazy {\n        koinApplication {\n            androidLogger(if (BuildConfig.DEBUG) Level.ERROR else Level.NONE)\n            androidContext(appContext)\n            modules(listOf(repositoryModule, viewModelModule))\n        }.koin\n    }\n\n    /**\n     * Initializes the Dependency Injection framework by passing\n     * the current application context.\n     */\n    @Synchronized\n    fun init(context: Context) {\n        appContext = context.applicationContext\n    }\n}\n\ninternal interface PingKoinComponent : KoinComponent {\n\n    override fun getKoin(): Koin = PingKoinContext.koin\n\n}\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/inject/RepositoryModule.kt",
    "content": "package com.rtchagas.pingplacepicker.inject\n\nimport com.google.android.libraries.places.api.Places\nimport com.rtchagas.pingplacepicker.PingPlacePicker\nimport com.rtchagas.pingplacepicker.repository.PlaceRepository\nimport com.rtchagas.pingplacepicker.repository.googlemaps.GoogleMapsAPI\nimport com.rtchagas.pingplacepicker.repository.googlemaps.GoogleMapsRepository\nimport okhttp3.OkHttpClient\nimport okhttp3.logging.HttpLoggingInterceptor\nimport org.koin.android.ext.koin.androidContext\nimport org.koin.dsl.bind\nimport org.koin.dsl.module\nimport retrofit2.Retrofit\nimport retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory\nimport retrofit2.converter.moshi.MoshiConverterFactory\n\ninternal val repositoryModule = module {\n\n    // PlacesClient\n    single {\n        Places.initialize(androidContext(), PingPlacePicker.androidApiKey)\n        return@single Places.createClient(androidContext())\n    }\n\n    // GoogleMapsAPI\n    single(createdAtStart = true) {\n\n        val interceptor = HttpLoggingInterceptor()\n        interceptor.level = HttpLoggingInterceptor.Level.NONE\n\n        val client = OkHttpClient.Builder().addInterceptor(interceptor).build()\n\n        val retrofit = Retrofit.Builder()\n                .baseUrl(\"https://maps.googleapis.com/maps/api/\")\n                .addConverterFactory(MoshiConverterFactory.create())\n                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())\n                .client(client)\n                .build()\n\n        return@single retrofit.create(GoogleMapsAPI::class.java)\n    }\n\n    // GoogleMapsRepository\n    single {\n        GoogleMapsRepository(googleClient = get(), googleMapsAPI = get())\n    } bind PlaceRepository::class\n}"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/inject/ViewModelModule.kt",
    "content": "package com.rtchagas.pingplacepicker.inject\n\nimport com.rtchagas.pingplacepicker.viewmodel.PlaceConfirmDialogViewModel\nimport com.rtchagas.pingplacepicker.viewmodel.PlacePickerViewModel\nimport org.koin.androidx.viewmodel.dsl.viewModel\nimport org.koin.dsl.module\n\ninternal val viewModelModule = module {\n\n    viewModel { PlacePickerViewModel(get()) }\n\n    viewModel { PlaceConfirmDialogViewModel(get()) }\n\n}"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/model/Geometry.kt",
    "content": "package com.rtchagas.pingplacepicker.model\n\n\nimport com.squareup.moshi.Json\nimport com.squareup.moshi.JsonClass\n\n@JsonClass(generateAdapter = true)\ninternal data class Geometry(\n    @Json(name = \"location\")\n    val location: Location\n)\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/model/Location.kt",
    "content": "package com.rtchagas.pingplacepicker.model\n\n\nimport com.squareup.moshi.Json\nimport com.squareup.moshi.JsonClass\n\n@JsonClass(generateAdapter = true)\ninternal data class Location(\n    @Json(name = \"lat\")\n    val lat: Double,\n    @Json(name = \"lng\")\n    val lng: Double\n)\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/model/Photo.kt",
    "content": "package com.rtchagas.pingplacepicker.model\n\n\nimport com.squareup.moshi.Json\nimport com.squareup.moshi.JsonClass\n\n@JsonClass(generateAdapter = true)\ninternal data class Photo(\n    @Json(name = \"height\")\n    val height: Int,\n    @Json(name = \"html_attributions\")\n    val htmlAttributions: List<String>,\n    @Json(name = \"photo_reference\")\n    val photoReference: String,\n    @Json(name = \"width\")\n    val width: Int\n)\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/model/SearchResult.kt",
    "content": "package com.rtchagas.pingplacepicker.model\n\nimport com.squareup.moshi.JsonClass\n\n@JsonClass(generateAdapter = true)\ninternal data class SearchResult(\n    val results: List<SimplePlace>,\n    val status: String\n)\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/model/SimplePlace.kt",
    "content": "package com.rtchagas.pingplacepicker.model\n\n\nimport com.squareup.moshi.Json\nimport com.squareup.moshi.JsonClass\n\n@JsonClass(generateAdapter = true)\ninternal data class SimplePlace(\n    @Json(name = \"geometry\")\n    val geometry: Geometry,\n    @Json(name = \"name\")\n    val name: String = \"\",\n    @Json(name = \"photos\")\n    val photos: List<Photo> = emptyList(),\n    @Json(name = \"place_id\")\n    val placeId: String,\n    @Json(name = \"types\")\n    val types: List<String> = emptyList(),\n    @Json(name = \"vicinity\")\n    val vicinity: String = \"\",\n    @Json(name = \"formatted_address\")\n    val formattedAddress: String = \"\"\n)\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/repository/PlaceRepository.kt",
    "content": "package com.rtchagas.pingplacepicker.repository\n\nimport android.graphics.Bitmap\nimport com.google.android.gms.maps.model.LatLng\nimport com.google.android.libraries.places.api.model.PhotoMetadata\nimport com.google.android.libraries.places.api.model.Place\nimport io.reactivex.Single\n\n/**\n * We decided to interface the Places repository as there's a lot of\n * room to improve the place search and retrieval.\n * We could have different repositories to fetch places locally from\n * a cached database or from other providers than Google.\n */\ninternal interface PlaceRepository {\n\n    fun getNearbyPlaces(): Single<List<Place>>\n\n    fun getNearbyPlaces(location: LatLng): Single<List<Place>>\n\n    fun getPlacePhoto(photoMetadata: PhotoMetadata): Single<Bitmap>\n\n    fun getPlaceByLocation(location: LatLng): Single<Place>\n}\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/repository/googlemaps/CustomPlace.kt",
    "content": "package com.rtchagas.pingplacepicker.repository.googlemaps\n\nimport android.net.Uri\nimport com.google.android.gms.maps.model.LatLng\nimport com.google.android.gms.maps.model.LatLngBounds\nimport com.google.android.libraries.places.api.model.*\nimport kotlinx.parcelize.Parcelize\nimport com.google.android.libraries.places.api.model.Place.BooleanPlaceAttributeValue.UNKNOWN\n\n@Parcelize\ninternal class CustomPlace(\n    var placeId: String,\n    var placeName: String,\n    var placePhotos: MutableList<PhotoMetadata>,\n    var placeAddress: String,\n    var placeTypes: MutableList<Type>,\n    var placeLatLng: LatLng\n) : Place() {\n\n    override fun getUserRatingsTotal(): Int? {\n        return null\n    }\n\n    /**\n     * Default value only.\n     * Clients shouldn't rely on this.\n     */\n    override fun getBusinessStatus(): BusinessStatus {\n        return BusinessStatus.OPERATIONAL\n    }\n\n    override fun getName(): String {\n        return placeName\n    }\n\n    override fun getOpeningHours(): OpeningHours? {\n        return null\n    }\n\n    override fun getCurbsidePickup(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getDelivery(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getDineIn(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getReservable(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getServesBeer(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getServesBreakfast(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getServesBrunch(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getServesDinner(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getServesLunch(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getServesVegetarianFood(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getServesWine(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getTakeout(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getWheelchairAccessibleEntrance(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getId(): String {\n        return placeId\n    }\n\n    override fun getPhotoMetadatas(): MutableList<PhotoMetadata> {\n        return placePhotos\n    }\n\n    override fun getSecondaryOpeningHours(): MutableList<OpeningHours>? {\n        return null\n    }\n\n    override fun getWebsiteUri(): Uri? {\n        return null\n    }\n\n    override fun getPhoneNumber(): String? {\n        return null\n    }\n\n    override fun getRating(): Double? {\n        return null\n    }\n\n    override fun getIconBackgroundColor(): Int? {\n        return null\n    }\n\n    override fun getPriceLevel(): Int? {\n        return null\n    }\n\n    override fun getAddressComponents(): AddressComponents? {\n        return null\n    }\n\n    override fun getCurrentOpeningHours(): OpeningHours? {\n        return null\n    }\n\n    override fun getAttributions(): MutableList<String> {\n        return mutableListOf()\n    }\n\n    override fun getAddress(): String {\n        return placeAddress\n    }\n\n    override fun getEditorialSummary(): String? {\n        return null\n    }\n\n    override fun getEditorialSummaryLanguageCode(): String? {\n        return null\n    }\n\n    override fun getIconUrl(): String? {\n        return null\n    }\n\n    override fun getPlusCode(): PlusCode? {\n        return null\n    }\n\n    override fun getUtcOffsetMinutes(): Int? {\n        return null\n    }\n\n    override fun getTypes(): MutableList<Type> {\n        return placeTypes\n    }\n\n    override fun getViewport(): LatLngBounds? {\n        return null\n    }\n\n    override fun describeContents(): Int {\n        return 0\n    }\n\n    override fun getLatLng(): LatLng {\n        return placeLatLng\n    }\n}\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/repository/googlemaps/GoogleMapsAPI.kt",
    "content": "package com.rtchagas.pingplacepicker.repository.googlemaps\n\nimport com.rtchagas.pingplacepicker.model.SearchResult\nimport io.reactivex.Single\nimport retrofit2.http.GET\nimport retrofit2.http.Query\nimport java.util.*\n\ninternal interface GoogleMapsAPI {\n\n    @GET(\"place/nearbysearch/json?rankby=distance\")\n    fun searchNearby(\n        @Query(\"location\") location: String,\n        @Query(\"key\") apiKey: String,\n        @Query(\"language\") language: String = Locale.getDefault().language\n    ): Single<SearchResult>\n\n    @GET(\"geocode/json\")\n    fun findByLocation(\n        @Query(\"latlng\") location: String,\n        @Query(\"key\") apiKey: String,\n        @Query(\"language\") language: String = Locale.getDefault().language\n    ): Single<SearchResult>\n}\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/repository/googlemaps/GoogleMapsRepository.kt",
    "content": "package com.rtchagas.pingplacepicker.repository.googlemaps\n\nimport android.annotation.SuppressLint\nimport android.graphics.Bitmap\nimport com.google.android.gms.maps.model.LatLng\nimport com.google.android.libraries.places.api.model.PhotoMetadata\nimport com.google.android.libraries.places.api.model.Place\nimport com.google.android.libraries.places.api.model.PlaceLikelihood\nimport com.google.android.libraries.places.api.net.FetchPhotoRequest\nimport com.google.android.libraries.places.api.net.FindCurrentPlaceRequest\nimport com.google.android.libraries.places.api.net.PlacesClient\nimport com.rtchagas.pingplacepicker.Config\nimport com.rtchagas.pingplacepicker.PingPlacePicker\nimport com.rtchagas.pingplacepicker.model.SearchResult\nimport com.rtchagas.pingplacepicker.model.SimplePlace\nimport com.rtchagas.pingplacepicker.repository.PlaceRepository\nimport io.reactivex.Single\nimport java.util.*\n\n\ninternal class GoogleMapsRepository constructor(\n    private val googleClient: PlacesClient,\n    private val googleMapsAPI: GoogleMapsAPI\n) : PlaceRepository {\n\n\n    /**\n     * Finds all nearby places ranked by likelihood of being the place where the device is.\n     *\n     * This call will be charged according to\n     * [Places SDK for Android Usage and\n       Billing](https://developers.google.com/places/android-sdk/usage-and-billing#find-current-place)\n     */\n    @SuppressLint(\"MissingPermission\")\n    override fun getNearbyPlaces(): Single<List<Place>> {\n\n        // Create request\n        val request = FindCurrentPlaceRequest.builder(getPlaceFields()).build()\n\n        return Single.create { emitter ->\n            googleClient.findCurrentPlace(request).addOnCompleteListener { task ->\n                if (task.isSuccessful) {\n                    task.result?.let {\n                        val placeList = sortByLikelihood(it.placeLikelihoods)\n                        emitter.onSuccess(placeList.map { likelihood -> likelihood.place })\n                    }\n                    // Empty result\n                    emitter.onSuccess(listOf())\n                } else {\n                    emitter.tryOnError(task.exception ?: Exception(\"No places for you...\"))\n                }\n            }\n        }\n    }\n\n    /** Finds all nearby places ranked by distance from the requested location.\n     *\n     * This call will be charged according to\n     * [Places SDK WEB API Usage and\n    Billing](https://developers.google.com/maps/billing/understanding-cost-of-use#nearby-search)\n     */\n    override fun getNearbyPlaces(location: LatLng): Single<List<Place>> {\n\n        val locationParam = \"${location.latitude},${location.longitude}\"\n\n        return googleMapsAPI.searchNearby(locationParam, PingPlacePicker.mapsApiKey)\n            .map { searchResult ->\n                val placeList = mutableListOf<CustomPlace>()\n                for (simplePlace in searchResult.results) {\n                    placeList.add(mapToCustomPlace(simplePlace))\n                }\n                placeList\n            }\n    }\n\n    /**\n     * Fetches a photo for the place.\n     *\n     * This call will be charged according to\n     * [Places SDK for Android Usage and\n       Billing](https://developers.google.com/places/android-sdk/usage-and-billing#places-photo)\n     */\n    override fun getPlacePhoto(photoMetadata: PhotoMetadata): Single<Bitmap> {\n\n        // Create a FetchPhotoRequest.\n        val photoRequest = FetchPhotoRequest.builder(photoMetadata)\n            .setMaxWidth(Config.PLACE_IMG_WIDTH)\n            .setMaxHeight(Config.PLACE_IMG_HEIGHT)\n            .build()\n\n        return Single.create { emitter ->\n            googleClient.fetchPhoto(photoRequest).addOnSuccessListener {\n                val bitmap = it.bitmap\n                emitter.onSuccess(bitmap)\n            }.addOnFailureListener {\n                emitter.tryOnError(it)\n            }\n        }\n    }\n\n    /**\n     * Uses Google Maps GeoLocation API to retrieve a place by its latitude and longitude.\n     * This call will be charged according to\n     * [Places SDK for Android Usage and\n       Billing](https://developers.google.com/maps/documentation/geocoding/usage-and-billing#pricing-for-the-geocoding-api)\n     */\n    override fun getPlaceByLocation(location: LatLng): Single<Place> {\n\n        val paramLocation = \"${location.latitude},${location.longitude}\"\n\n        return googleMapsAPI.findByLocation(paramLocation, PingPlacePicker.mapsApiKey)\n            .map { result: SearchResult ->\n                if ((\"OK\" == result.status) && result.results.isNotEmpty()) {\n                    return@map mapToCustomPlace(result.results[0])\n                }\n                return@map PlaceFromCoordinates(location.latitude, location.longitude)\n            }\n    }\n\n    /**\n     * These fields are not charged by Google.\n     * https://developers.google.com/places/android-sdk/usage-and-billing#basic-data\n     */\n    private fun getPlaceFields(): List<Place.Field> {\n\n        return listOf(\n            Place.Field.ID,\n            Place.Field.NAME,\n            Place.Field.ADDRESS,\n            Place.Field.LAT_LNG,\n            Place.Field.TYPES,\n            Place.Field.PHOTO_METADATAS\n        )\n    }\n\n    private fun mapToCustomPlace(place: SimplePlace): CustomPlace {\n\n        val photoList = mutableListOf<PhotoMetadata>()\n        place.photos.forEach {\n            val photoMetadata = PhotoMetadata.builder(it.photoReference)\n                .setAttributions(it.htmlAttributions.toString())\n                .setHeight(it.height)\n                .setWidth(it.width)\n                .build()\n            photoList.add(photoMetadata)\n        }\n\n        val typeList = mutableListOf<Place.Type>()\n        place.types.forEach { simpleType ->\n            val placeType = Place.Type.values()\n                .find { it.name == simpleType.uppercase(Locale.US) } ?: Place.Type.OTHER\n            typeList.add(placeType)\n        }\n\n        val latLng = LatLng(place.geometry.location.lat, place.geometry.location.lng)\n\n        val address: String = place.formattedAddress.ifEmpty { place.vicinity }\n\n        val name: String = buildPlaceName(place.name, address)\n\n        return CustomPlace(place.placeId, name, photoList, address, typeList, latLng)\n    }\n\n    private fun buildPlaceName(originalName: String, address: String): String {\n        // We have a nice name, use it\n        if (originalName.isNotEmpty()) {\n            return originalName\n        }\n        // Return the first part of the address, usually the street + number\n        return address.split(\",\").first()\n    }\n\n    /**\n     * Sorts the list by Likelihood. The best ranked places come first.\n     */\n    private fun sortByLikelihood(placeLikelihoods: List<PlaceLikelihood>): List<PlaceLikelihood> {\n\n        val mutableList = placeLikelihoods.toMutableList()\n\n        mutableList.sortByDescending { it.likelihood }\n\n        return mutableList\n    }\n}"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/repository/googlemaps/PlaceFromCoordinates.kt",
    "content": "package com.rtchagas.pingplacepicker.repository.googlemaps\n\nimport android.location.Location\nimport android.net.Uri\nimport android.os.Parcel\nimport android.os.Parcelable\nimport com.google.android.gms.maps.model.LatLng\nimport com.google.android.gms.maps.model.LatLngBounds\nimport com.google.android.libraries.places.api.model.AddressComponents\nimport com.google.android.libraries.places.api.model.OpeningHours\nimport com.google.android.libraries.places.api.model.PhotoMetadata\nimport com.google.android.libraries.places.api.model.Place\nimport com.google.android.libraries.places.api.model.Place.BooleanPlaceAttributeValue.UNKNOWN\nimport com.google.android.libraries.places.api.model.PlusCode\nimport kotlin.math.absoluteValue\n\n/**\n * Place without any additional info. Just latitude and longitude.\n */\ninternal class PlaceFromCoordinates(\n    private val latitude: Double,\n    private val longitude: Double\n) : Place() {\n\n    constructor(parcel: Parcel) : this(\n        parcel.readDouble(),\n        parcel.readDouble()\n    )\n\n    override fun getUserRatingsTotal(): Int? {\n        return null\n    }\n\n    /**\n     * Default value only.\n     * Clients shouldn't rely on this.\n     */\n    override fun getBusinessStatus(): BusinessStatus {\n        return BusinessStatus.OPERATIONAL\n    }\n\n    override fun getName(): String {\n        return \"${formatLatitude(latitude)}, ${formatLongitude(longitude)}\"\n    }\n\n    override fun getOpeningHours(): OpeningHours? {\n        return null\n    }\n\n    override fun getCurbsidePickup(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getDelivery(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getDineIn(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getReservable(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getServesBeer(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getServesBreakfast(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getServesBrunch(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getServesDinner(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getServesLunch(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getServesVegetarianFood(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getServesWine(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getTakeout(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getWheelchairAccessibleEntrance(): BooleanPlaceAttributeValue {\n        return UNKNOWN\n    }\n\n    override fun getId(): String? {\n        return null\n    }\n\n    override fun getPhotoMetadatas(): MutableList<PhotoMetadata> {\n        return mutableListOf()\n    }\n\n    override fun getSecondaryOpeningHours(): MutableList<OpeningHours>? {\n        return null\n    }\n\n    override fun getWebsiteUri(): Uri? {\n        return null\n    }\n\n    override fun getPhoneNumber(): String? {\n        return null\n    }\n\n    override fun getRating(): Double? {\n        return null\n    }\n\n    override fun getIconBackgroundColor(): Int? {\n        return null\n    }\n\n    override fun getPriceLevel(): Int? {\n        return null\n    }\n\n    override fun getAddressComponents(): AddressComponents? {\n        return null\n    }\n\n    override fun getCurrentOpeningHours(): OpeningHours? {\n        return null\n    }\n\n    override fun getAttributions(): MutableList<String> {\n        return mutableListOf()\n    }\n\n    override fun getAddress(): String? {\n        return null\n    }\n\n    override fun getEditorialSummary(): String? {\n        return null\n    }\n\n    override fun getEditorialSummaryLanguageCode(): String? {\n        return null\n    }\n\n    override fun getIconUrl(): String? {\n        return null\n    }\n\n    override fun getPlusCode(): PlusCode? {\n        return null\n    }\n\n    override fun getUtcOffsetMinutes(): Int? {\n        return null\n    }\n\n    override fun getTypes(): MutableList<Type> {\n        return mutableListOf()\n    }\n\n    override fun getViewport(): LatLngBounds? {\n        return null\n    }\n\n    override fun getLatLng(): LatLng {\n        return LatLng(latitude, longitude)\n    }\n\n    override fun writeToParcel(parcel: Parcel, flags: Int) {\n        parcel.writeDouble(latitude)\n        parcel.writeDouble(longitude)\n    }\n\n    override fun describeContents(): Int {\n        return 0\n    }\n\n    companion object CREATOR : Parcelable.Creator<PlaceFromCoordinates> {\n        override fun createFromParcel(parcel: Parcel): PlaceFromCoordinates {\n            return PlaceFromCoordinates(parcel)\n        }\n\n        override fun newArray(size: Int): Array<PlaceFromCoordinates?> {\n            return arrayOfNulls(size)\n        }\n    }\n\n    // formatting methods -----------------------------------------------------------------\n\n    private fun formatLatitude(latitude: Double): String {\n        val direction = if (latitude > 0) \"N\" else \"S\"\n        return \"${\n            replaceDelimiters(\n                Location.convert(\n                    latitude.absoluteValue,\n                    Location.FORMAT_SECONDS\n                )\n            )\n        } $direction\"\n    }\n\n    private fun formatLongitude(longitude: Double): String {\n        val direction = if (longitude > 0) \"W\" else \"E\"\n        return \"${\n            replaceDelimiters(\n                Location.convert(\n                    longitude.absoluteValue,\n                    Location.FORMAT_SECONDS\n                )\n            )\n        } $direction\"\n    }\n\n    private fun replaceDelimiters(original: String): String {\n\n        val parts: List<String> = original.split(\":\")\n\n        val degrees: String = parts[0]\n        val minutes: String = parts[1]\n        var seconds: String = parts[2]\n\n        val idx = seconds.indexOfAny(charArrayOf(',', '.'))\n        if (idx >= 0) {\n            seconds = seconds.substring(0, idx)\n        }\n\n        return \"${degrees}° ${minutes}' ${seconds}\\\"\"\n    }\n}\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/ui/UiExtensions.kt",
    "content": "package com.rtchagas.pingplacepicker.ui\n\nimport android.content.Context\nimport android.view.View\nimport android.widget.Toast\nimport androidx.annotation.StringRes\nimport com.jakewharton.rxbinding3.view.clicks\nimport io.reactivex.android.schedulers.AndroidSchedulers\nimport io.reactivex.disposables.Disposable\nimport java.util.concurrent.TimeUnit\n\ninternal fun View.onclick(callback: () -> Unit): Disposable = clicks()\n    .throttleFirst(1, TimeUnit.SECONDS)\n    .observeOn(AndroidSchedulers.mainThread())\n    .subscribe {\n        callback()\n    }\n\n/**\n * Display the simple Toast message with the [Toast.LENGTH_SHORT] duration.\n *\n * @param message the message text.\n */\nfun Context.toast(message: CharSequence): Toast = Toast\n    .makeText(this, message, Toast.LENGTH_SHORT)\n    .apply { show() }\n\n/**\n * Display the simple Toast message with the [Toast.LENGTH_SHORT] duration.\n *\n * @param resId the resource ID of the message text.\n */\nfun Context.toast(@StringRes resId: Int): Toast = Toast\n    .makeText(this, resId, Toast.LENGTH_SHORT)\n    .apply { show() }\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/ui/UiUtils.kt",
    "content": "package com.rtchagas.pingplacepicker.ui\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.content.res.Configuration\nimport android.util.TypedValue\nimport androidx.annotation.ColorInt\nimport com.google.android.libraries.places.api.model.Place\nimport com.rtchagas.pingplacepicker.R\nimport java.util.*\n\n\ninternal object UiUtils {\n\n    /**\n     * Gets the place drawable resource according to its type\n     */\n    @SuppressLint(\"DiscouragedApi\")\n    fun getPlaceDrawableRes(context: Context, place: Place): Int {\n\n        val defType = \"drawable\"\n        val defPackage = context.packageName\n\n        place.types?.let {\n            for (type: Place.Type in it) {\n                val name = type.name.lowercase(Locale.ENGLISH)\n                val id: Int =\n                    context.resources.getIdentifier(\"ic_places_$name\", defType, defPackage)\n                if (id > 0) return id\n            }\n        }\n\n        // Default resource\n        return R.drawable.ic_map_marker_black_24dp\n    }\n\n    /**\n     * Returns whether the current selected theme is night mode or not\n     */\n    fun isNightModeEnabled(context: Context): Boolean {\n\n        val nightMode: Int =\n            (context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK)\n\n        return nightMode == Configuration.UI_MODE_NIGHT_YES\n    }\n\n    @ColorInt\n    fun getColorAttr(context: Context, colorAttr: Int): Int {\n        val typedValue = TypedValue()\n        context.theme.resolveAttribute(colorAttr, typedValue, true)\n        return typedValue.data\n    }\n}\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/ui/activity/BaseActivity.kt",
    "content": "package com.rtchagas.pingplacepicker.ui.activity\n\nimport android.os.Bundle\nimport android.view.LayoutInflater\nimport androidx.appcompat.app.AppCompatActivity\nimport androidx.viewbinding.ViewBinding\n\ntypealias ActivityInflater<T> = (LayoutInflater) -> T\n\nabstract class BaseActivity<T : ViewBinding>(\n    private val inflate: ActivityInflater<T>\n) : AppCompatActivity() {\n\n    private var _binding: T? = null\n\n    /**\n     * The view binding for this fragment.\n     *\n     * [https://developer.android.com/topic/libraries/view-binding]\n     *\n     * This property is only valid between [onCreate] and [onDestroy].\n     */\n    val binding: T get() = _binding!!\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        _binding = inflate(layoutInflater)\n        setContentView(binding.root)\n    }\n\n    override fun onDestroy() {\n        super.onDestroy()\n        _binding = null\n    }\n}\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/ui/activity/PlacePickerActivity.kt",
    "content": "package com.rtchagas.pingplacepicker.ui.activity\n\nimport android.annotation.SuppressLint\nimport android.app.Activity\nimport android.content.Intent\nimport android.graphics.Bitmap\nimport android.graphics.Canvas\nimport android.location.Location\nimport android.os.Bundle\nimport android.util.Log\nimport android.view.Menu\nimport android.view.MenuItem\nimport android.view.View\nimport androidx.coordinatorlayout.widget.CoordinatorLayout\nimport androidx.core.content.res.ResourcesCompat\nimport androidx.core.graphics.drawable.DrawableCompat\nimport androidx.core.view.doOnLayout\nimport androidx.core.view.isVisible\nimport androidx.recyclerview.widget.LinearLayoutManager\nimport com.google.android.gms.location.FusedLocationProviderClient\nimport com.google.android.gms.location.LocationServices\nimport com.google.android.gms.maps.CameraUpdateFactory\nimport com.google.android.gms.maps.GoogleMap\nimport com.google.android.gms.maps.OnMapReadyCallback\nimport com.google.android.gms.maps.SupportMapFragment\nimport com.google.android.gms.maps.model.*\nimport com.google.android.libraries.places.api.model.Place\nimport com.google.android.libraries.places.api.model.RectangularBounds\nimport com.google.android.libraries.places.widget.Autocomplete\nimport com.google.android.libraries.places.widget.model.AutocompleteActivityMode\nimport com.google.android.material.appbar.AppBarLayout\nimport com.google.android.material.elevation.ElevationOverlayProvider\nimport com.google.android.material.snackbar.Snackbar\nimport com.google.maps.android.SphericalUtil\nimport com.karumi.dexter.listener.PermissionDeniedResponse\nimport com.karumi.dexter.listener.PermissionGrantedResponse\nimport com.karumi.dexter.listener.single.BasePermissionListener\nimport com.rtchagas.pingplacepicker.PingPlacePicker\nimport com.rtchagas.pingplacepicker.R\nimport com.rtchagas.pingplacepicker.databinding.ActivityPlacePickerBinding\nimport com.rtchagas.pingplacepicker.helper.PermissionsHelper\nimport com.rtchagas.pingplacepicker.inject.PingKoinComponent\nimport com.rtchagas.pingplacepicker.ui.UiUtils\nimport com.rtchagas.pingplacepicker.ui.adapter.PlacePickerAdapter\nimport com.rtchagas.pingplacepicker.ui.fragment.PlaceConfirmDialogFragment\nimport com.rtchagas.pingplacepicker.ui.onclick\nimport com.rtchagas.pingplacepicker.ui.toast\nimport com.rtchagas.pingplacepicker.viewmodel.PlacePickerViewModel\nimport com.rtchagas.pingplacepicker.viewmodel.Resource\nimport io.reactivex.disposables.CompositeDisposable\nimport org.koin.androidx.viewmodel.ext.android.viewModel\nimport kotlin.math.abs\n\ninternal class PlacePickerActivity :\n    BaseActivity<ActivityPlacePickerBinding>(ActivityPlacePickerBinding::inflate),\n    PingKoinComponent,\n    OnMapReadyCallback,\n    GoogleMap.OnMarkerClickListener,\n    PlaceConfirmDialogFragment.OnPlaceConfirmedListener {\n\n    companion object {\n\n        private const val TAG = \"Ping#PlacePicker\"\n\n        // For passing extra parameters to this activity.\n        const val EXTRA_LOCATION = \"extra_location\"\n        const val EXTRA_RETURN_ACTUAL_LATLNG = \"extra_return_actual_latlng\"\n\n        // Keys for storing activity state.\n        private const val STATE_CAMERA_POSITION = \"state_camera_position\"\n        private const val STATE_LOCATION = \"state_location\"\n\n        private const val AUTOCOMPLETE_REQUEST_CODE = 1001\n\n        private const val DIALOG_CONFIRM_PLACE_TAG = \"dialog_place_confirm\"\n    }\n\n    private var googleMap: GoogleMap? = null\n\n    private var isLocationPermissionGranted = false\n\n    private var cameraPosition: CameraPosition? = null\n\n    private val defaultLocation = LatLng(37.4219999, -122.0862462)\n\n    private var defaultZoom = -1f\n\n    private var lastKnownLocation: LatLng? = null\n\n    private var placeAdapter: PlacePickerAdapter? = null\n\n    private val viewModel: PlacePickerViewModel by viewModel()\n\n    private val disposables = CompositeDisposable()\n\n    private lateinit var fusedLocationProviderClient: FusedLocationProviderClient\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        // Configure the toolbar\n        setSupportActionBar(binding.toolbar)\n        supportActionBar?.setDisplayHomeAsUpEnabled(true)\n\n        // Check whether a pre-defined location was set.\n        intent.getParcelableExtra<LatLng?>(EXTRA_LOCATION)?.let {\n            lastKnownLocation = it\n        }\n\n        // Retrieve location and camera position from saved instance state.\n        lastKnownLocation = savedInstanceState\n            ?.getParcelable(STATE_LOCATION) ?: lastKnownLocation\n        cameraPosition = savedInstanceState\n            ?.getParcelable(STATE_CAMERA_POSITION) ?: cameraPosition\n\n        // Construct a FusedLocationProviderClient\n        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)\n\n        // Sets the default zoom\n        defaultZoom = resources.getInteger(R.integer.default_zoom).toFloat()\n\n        // Initialize the UI\n        initializeUi()\n\n        // Restore any active fragment\n        restoreFragments()\n\n        // Initializes the map\n        val mapFragment = supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment\n        mapFragment.getMapAsync(this)\n    }\n\n    @Deprecated(\"Deprecated in Java\")\n    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {\n        super.onActivityResult(requestCode, resultCode, data)\n\n        if ((requestCode == AUTOCOMPLETE_REQUEST_CODE) && (resultCode == Activity.RESULT_OK)) {\n            data?.run {\n                val place = Autocomplete.getPlaceFromIntent(this)\n                moveCameraToSelectedPlace(place)\n                showConfirmPlacePopup(place)\n            }\n        }\n    }\n\n    override fun onCreateOptionsMenu(menu: Menu): Boolean {\n        menuInflater.inflate(R.menu.menu_place_picker, menu)\n        return true\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n\n        if (android.R.id.home == item.itemId) {\n            finishAfterTransition()\n            return true\n        }\n\n        if (R.id.action_search == item.itemId) {\n            requestPlacesSearch()\n            return true\n        }\n\n        return super.onOptionsItemSelected(item)\n    }\n\n    /**\n     * Saves the state of the map when the activity is paused.\n     */\n    override fun onSaveInstanceState(outState: Bundle) {\n        super.onSaveInstanceState(outState)\n        outState.putParcelable(STATE_CAMERA_POSITION, googleMap?.cameraPosition)\n        outState.putParcelable(STATE_LOCATION, lastKnownLocation)\n    }\n\n    override fun onDestroy() {\n        super.onDestroy()\n        disposables.clear()\n    }\n\n    @SuppressLint(\"PotentialBehaviorOverride\")\n    override fun onMapReady(map: GoogleMap) {\n        googleMap = map\n        setMapStyle()\n        map.setOnMarkerClickListener(this)\n        checkForPermission()\n    }\n\n    override fun onMarkerClick(marker: Marker): Boolean {\n\n        val place = marker.tag as Place\n        showConfirmPlacePopup(place)\n\n        return !resources.getBoolean(R.bool.auto_center_on_marker_click)\n    }\n\n    override fun onPlaceConfirmed(place: Place) {\n        val selectedLatLng = googleMap?.cameraPosition?.target ?: LatLng(0.0, 0.0)\n        PingPlacePicker.onPlaceSelectedListener?.onPlaceSelected(place, selectedLatLng)\n        finishAfterTransition()\n    }\n\n    private fun adjustElevationOverlayColors() {\n\n        // Set the correct elevation overlay to the CollapsingToolbarLayout\n        val elevationOverlayProvider = ElevationOverlayProvider(this)\n\n        val scrimColor: Int = elevationOverlayProvider.compositeOverlayIfNeeded(\n            UiUtils.getColorAttr(this, R.attr.colorPrimarySurface),\n            resources.getDimension(R.dimen.material_elevation_app_bar)\n        )\n\n        // Set the correct elevation to the content container\n        val containerColor = elevationOverlayProvider.compositeOverlayWithThemeSurfaceColorIfNeeded(\n            resources.getDimension(R.dimen.material_elevation_app_bar)\n        )\n\n        with(binding) {\n            collapsingToolbarLayout.setContentScrimColor(scrimColor)\n            mapContainer.setBackgroundColor(containerColor)\n        }\n    }\n\n    private fun bindPlaces(places: List<Place>) {\n\n        // Bind to the recycler view\n\n        if (placeAdapter == null) {\n            placeAdapter = PlacePickerAdapter(places) { showConfirmPlacePopup(it) }\n        } else {\n            placeAdapter?.swapData(places)\n        }\n\n        binding.rvNearbyPlaces.adapter = placeAdapter\n\n        // Bind to the map\n\n        googleMap?.run {\n\n            clear()\n\n            for (place in places) {\n                place.latLng?.let {\n                    val marker: Marker? = addMarker(\n                        MarkerOptions()\n                            .position(it)\n                            .icon(getPlaceMarkerBitmap(place))\n                    )\n\n                    marker?.tag = place\n                }\n            }\n        }\n    }\n\n    private fun checkForPermission() {\n\n        PermissionsHelper.checkForLocationPermission(this, object : BasePermissionListener() {\n\n            override fun onPermissionDenied(response: PermissionDeniedResponse?) {\n                isLocationPermissionGranted = false\n                initMap()\n            }\n\n            override fun onPermissionGranted(response: PermissionGrantedResponse?) {\n                isLocationPermissionGranted = true\n                initMap()\n            }\n        })\n    }\n\n    private fun getCurrentLatLngBounds(): LatLngBounds {\n\n        val radius = resources.getInteger(R.integer.autocomplete_search_bias_radius).toDouble()\n        val location: LatLng = lastKnownLocation ?: defaultLocation\n\n        val northEast: LatLng = SphericalUtil.computeOffset(location, radius, 45.0)\n        val southWest: LatLng = SphericalUtil.computeOffset(location, radius, 225.0)\n\n        return LatLngBounds(southWest, northEast)\n    }\n\n    private fun getDeviceLocation(animate: Boolean) = try {\n\n        // Get the best and most recent location of the device, which may be null in rare\n        // cases when a location is not available.\n\n        fusedLocationProviderClient.lastLocation\n            .addOnFailureListener(this) { setDefaultLocation() }\n            .addOnSuccessListener(this) { location: Location? ->\n\n                // In rare cases location may be null...\n                if (location == null) {\n                    retryWhenLocationIsNotAvailable(animate)\n                    return@addOnSuccessListener\n                }\n\n                // Set the map's camera position to the current location of the device.\n                val latLng = LatLng(location.latitude, location.longitude)\n                lastKnownLocation = latLng\n\n                val update = CameraUpdateFactory.newLatLngZoom(latLng, defaultZoom)\n\n                if (animate) {\n                    googleMap?.animateCamera(update)\n                } else {\n                    googleMap?.moveCamera(update)\n                }\n\n                // Load the places near this location\n                loadNearbyPlaces()\n            }\n    } catch (e: SecurityException) {\n        Log.e(TAG, e.toString())\n    }\n\n    @Suppress(\"DEPRECATION\")\n    private fun getPlaceMarkerBitmap(place: Place): BitmapDescriptor {\n\n        val innerIconSize: Int = resources.getDimensionPixelSize(R.dimen.marker_inner_icon_size)\n\n        val bgDrawable = ResourcesCompat.getDrawable(\n            resources,\n            R.drawable.ic_map_marker_solid_red_32dp, null\n        )!!\n\n        val fgDrawable = ResourcesCompat.getDrawable(\n            resources,\n            UiUtils.getPlaceDrawableRes(this, place), null\n        )!!\n        DrawableCompat.setTint(fgDrawable, resources.getColor(R.color.colorMarkerInnerIcon))\n\n        val bitmap = Bitmap.createBitmap(\n            bgDrawable.intrinsicWidth,\n            bgDrawable.intrinsicHeight, Bitmap.Config.ARGB_8888\n        )\n\n        val canvas = Canvas(bitmap)\n\n        bgDrawable.setBounds(0, 0, canvas.width, canvas.height)\n\n        val left = (canvas.width - innerIconSize) / 2\n        val top = (canvas.height - innerIconSize) / 3\n        val right = left + innerIconSize\n        val bottom = top + innerIconSize\n\n        fgDrawable.setBounds(left, top, right, bottom)\n\n        bgDrawable.draw(canvas)\n        fgDrawable.draw(canvas)\n\n        return BitmapDescriptorFactory.fromBitmap(bitmap)\n    }\n\n    private fun handlePlaceByLocation(result: Resource<Place?>) {\n\n        binding.pbLoading.hide()\n\n        when (result.status) {\n            Resource.Status.LOADING ->\n                binding.pbLoading.show()\n\n            Resource.Status.SUCCESS ->\n                result.data?.run { showConfirmPlacePopup(this) }\n\n            Resource.Status.ERROR ->\n                toast(R.string.picker_load_this_place_error)\n\n            Resource.Status.NO_DATA ->\n                Log.d(TAG, \"No places data found...\")\n        }\n    }\n\n    private fun handlePlacesLoaded(result: Resource<List<Place>>) {\n\n        binding.pbLoading.hide()\n\n        when (result.status) {\n            Resource.Status.LOADING ->\n                binding.pbLoading.show()\n\n            Resource.Status.SUCCESS ->\n                bindPlaces((result.data ?: listOf()))\n\n            Resource.Status.ERROR ->\n                toast(R.string.picker_load_places_error)\n\n            Resource.Status.NO_DATA ->\n                Log.d(TAG, \"No places data found...\")\n        }\n    }\n\n    private fun initializeUi() = with(binding) {\n\n        // Some material components still don't support setting the correct\n        // elevation for dark themes, so we should handle that\n        adjustElevationOverlayColors()\n\n        // Initialize the recycler view\n        rvNearbyPlaces.layoutManager = LinearLayoutManager(this@PlacePickerActivity)\n\n        // Bind the click listeners\n        disposables.addAll(\n            btnMyLocation.onclick { getDeviceLocation(true) },\n            btnRefreshLocation.onclick { refreshNearbyPlaces() },\n            cardSearch.onclick { requestPlacesSearch() },\n            mapContainer.onclick { selectThisPlace() }\n        )\n\n        // Hide or show the refresh places button according to nearby search flag\n        btnRefreshLocation.isVisible = PingPlacePicker.isNearbySearchEnabled\n\n        // Hide or show the card search according to the width\n        cardSearch.isVisible = resources.getBoolean(R.bool.show_card_search)\n\n        // Add a nice fade effect to toolbar\n        appBarLayout.addOnOffsetChangedListener { appBarLayout, verticalOffset ->\n            toolbar.alpha = abs(verticalOffset / appBarLayout.totalScrollRange.toFloat())\n        }\n\n        // Disable vertical scrolling on appBarLayout (it messes with the map...)\n\n        // Set default behavior\n        val appBarLayoutParams = appBarLayout.layoutParams as CoordinatorLayout.LayoutParams\n        appBarLayoutParams.behavior = AppBarLayout.Behavior()\n\n        // Disable the drag\n        val behavior = appBarLayoutParams.behavior as AppBarLayout.Behavior\n        behavior.setDragCallback(object : AppBarLayout.Behavior.DragCallback() {\n            override fun canDrag(appBarLayout: AppBarLayout): Boolean {\n                return false\n            }\n        })\n\n        // Set the size of AppBarLayout to 68% of the total height\n        coordinator.doOnLayout {\n            val size: Int = (it.height * 68) / 100\n            appBarLayoutParams.height = size\n        }\n    }\n\n    private fun initMap() {\n\n        // Turn on/off the My Location layer and the related control on the map\n        updateLocationUI()\n\n        // Restore any saved state\n        restoreMapState()\n\n        if (isLocationPermissionGranted) {\n\n            if (lastKnownLocation == null) {\n                // Get the current location of the device and set the position of the map\n                getDeviceLocation(false)\n            } else {\n                // Use the last know location to point the map to\n                setDefaultLocation()\n                loadNearbyPlaces()\n            }\n        } else {\n            setDefaultLocation()\n        }\n    }\n\n    private fun loadNearbyPlaces() {\n        viewModel.getNearbyPlaces(lastKnownLocation ?: defaultLocation)\n            .observe(this) { handlePlacesLoaded(it) }\n    }\n\n    private fun moveCameraToSelectedPlace(place: Place) {\n        place.latLng?.let {\n            googleMap?.moveCamera(CameraUpdateFactory.newLatLngZoom(it, defaultZoom))\n        }\n    }\n\n    private fun refreshNearbyPlaces() {\n        googleMap?.cameraPosition?.run {\n            viewModel.getNearbyPlaces(target)\n                .observe(this@PlacePickerActivity) { handlePlacesLoaded(it) }\n        }\n    }\n\n    private fun requestPlacesSearch() {\n\n        // This only works if location permission is granted\n        if (!isLocationPermissionGranted) {\n            checkForPermission()\n            return\n        }\n\n        // Places API needs a location as well...\n        if (lastKnownLocation == null) {\n            return\n        }\n\n        // These fields are not charged by Google:\n        // https://developers.google.com/places/android-sdk/usage-and-billing#basic-data\n        val placeFields = listOf(\n            Place.Field.ID,\n            Place.Field.NAME,\n            Place.Field.ADDRESS,\n            Place.Field.LAT_LNG,\n            Place.Field.TYPES,\n            Place.Field.PHOTO_METADATAS\n        )\n\n        val rectangularBounds = RectangularBounds.newInstance(getCurrentLatLngBounds())\n\n        // Start the autocomplete intent.\n        val intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.OVERLAY, placeFields)\n            .setLocationBias(rectangularBounds)\n            .build(this)\n\n        startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE)\n    }\n\n    private fun restoreFragments() {\n        val confirmFragment = supportFragmentManager\n            .findFragmentByTag(DIALOG_CONFIRM_PLACE_TAG) as PlaceConfirmDialogFragment?\n        confirmFragment?.run {\n            confirmListener = this@PlacePickerActivity\n        }\n    }\n\n    private fun restoreMapState() {\n        cameraPosition?.run {\n            googleMap?.moveCamera(CameraUpdateFactory.newCameraPosition(this))\n        }\n    }\n\n    private fun retryWhenLocationIsNotAvailable(animate: Boolean) {\n        // Location is not available. Ask the user to retry.\n        setDefaultLocation()\n        Snackbar\n            .make(binding.root, R.string.picker_location_unavailable, Snackbar.LENGTH_INDEFINITE)\n            .setAction(R.string.places_try_again) { getDeviceLocation(animate) }\n            .show()\n    }\n\n    private fun selectThisPlace() {\n        googleMap?.cameraPosition?.run {\n            viewModel.getPlaceByLocation(target)\n                .observe(this@PlacePickerActivity) { handlePlaceByLocation(it) }\n        }\n    }\n\n    private fun setDefaultLocation() {\n        val default: LatLng = lastKnownLocation ?: defaultLocation\n        googleMap?.moveCamera(CameraUpdateFactory.newLatLngZoom(default, defaultZoom))\n    }\n\n    /**\n     * Customise the styling of the base map using a JSON object defined in a raw resource file.\n     */\n    private fun setMapStyle() {\n\n        if (!UiUtils.isNightModeEnabled(this)) return\n\n        try {\n            googleMap?.run {\n                val success = setMapStyle(\n                    MapStyleOptions.loadRawResourceStyle(\n                        this@PlacePickerActivity, R.raw.maps_night_style\n                    )\n                )\n                if (!success) {\n                    Log.e(TAG, \"Style parsing failed.\")\n                }\n            }\n        } catch (e: Exception) {\n            Log.e(TAG, \"Can't style the map\", e)\n        }\n    }\n\n    private fun showConfirmPlacePopup(place: Place) {\n        val fragment = PlaceConfirmDialogFragment.newInstance(place, this)\n        fragment.show(supportFragmentManager, DIALOG_CONFIRM_PLACE_TAG)\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    private fun updateLocationUI() {\n\n        googleMap?.let {\n\n            with(it.uiSettings) {\n                isMyLocationButtonEnabled = false\n                isMapToolbarEnabled = false\n            }\n\n            if (isLocationPermissionGranted) {\n                it.isMyLocationEnabled = true\n                binding.btnMyLocation.visibility = View.VISIBLE\n            } else {\n                binding.btnMyLocation.visibility = View.GONE\n                it.isMyLocationEnabled = false\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/ui/adapter/PlacePickerAdapter.kt",
    "content": "package com.rtchagas.pingplacepicker.ui.adapter\n\nimport android.view.LayoutInflater\nimport android.view.ViewGroup\nimport androidx.recyclerview.widget.RecyclerView\nimport com.google.android.libraries.places.api.model.Place\nimport com.rtchagas.pingplacepicker.databinding.ItemPlaceBinding\nimport com.rtchagas.pingplacepicker.ui.UiUtils\n\ninternal class PlacePickerAdapter(\n    private var placeList: List<Place>,\n    private val clickListener: (Place) -> Unit\n) : RecyclerView.Adapter<PlacePickerAdapter.PlaceViewHolder>() {\n\n    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PlaceViewHolder {\n        val inflater = LayoutInflater.from(parent.context)\n        val binding = ItemPlaceBinding.inflate(inflater, parent, false)\n        return PlaceViewHolder(binding)\n    }\n\n    override fun onBindViewHolder(holder: PlaceViewHolder, position: Int) {\n        holder.bind(placeList[position], clickListener)\n    }\n\n    override fun getItemCount(): Int =\n        placeList.size\n\n    fun swapData(newPlaceList: List<Place>) {\n        placeList = newPlaceList\n        notifyDataSetChanged()\n    }\n\n    inner class PlaceViewHolder(private val binding: ItemPlaceBinding) :\n        RecyclerView.ViewHolder(binding.root) {\n\n        fun bind(place: Place, listener: (Place) -> Unit) {\n\n            with(binding) {\n                root.setOnClickListener { listener(place) }\n                ivPlaceType.setImageResource(UiUtils.getPlaceDrawableRes(itemView.context, place))\n                tvPlaceName.text = place.name\n                tvPlaceAddress.text = place.address\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/ui/fragment/PlaceConfirmDialogFragment.kt",
    "content": "package com.rtchagas.pingplacepicker.ui.fragment\n\nimport android.app.Dialog\nimport android.content.Context\nimport android.graphics.Bitmap\nimport android.os.Bundle\nimport android.util.Log\nimport android.view.LayoutInflater\nimport android.view.View\nimport androidx.appcompat.app.AlertDialog\nimport androidx.appcompat.app.AppCompatDialogFragment\nimport androidx.core.view.isVisible\nimport androidx.transition.TransitionManager\nimport coil.load\nimport com.google.android.libraries.places.api.model.Place\nimport com.rtchagas.pingplacepicker.Config\nimport com.rtchagas.pingplacepicker.PingPlacePicker\nimport com.rtchagas.pingplacepicker.R\nimport com.rtchagas.pingplacepicker.databinding.FragmentDialogPlaceConfirmBinding\nimport com.rtchagas.pingplacepicker.helper.UrlSignerHelper\nimport com.rtchagas.pingplacepicker.inject.PingKoinComponent\nimport com.rtchagas.pingplacepicker.ui.UiUtils\nimport com.rtchagas.pingplacepicker.viewmodel.PlaceConfirmDialogViewModel\nimport com.rtchagas.pingplacepicker.viewmodel.Resource\nimport org.koin.androidx.viewmodel.ext.android.viewModel\nimport java.util.*\n\n\ninternal class PlaceConfirmDialogFragment : AppCompatDialogFragment(), PingKoinComponent {\n\n    private var _binding: FragmentDialogPlaceConfirmBinding? = null\n\n    private val binding: FragmentDialogPlaceConfirmBinding\n        get() = _binding!!\n\n    private val viewModel: PlaceConfirmDialogViewModel by viewModel()\n\n    private lateinit var place: Place\n\n    var confirmListener: OnPlaceConfirmedListener? = null\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        // Check mandatory parameters for this fragment\n        if (requireArguments().getParcelable<Place>(ARG_PLACE) == null) {\n            throw IllegalArgumentException(\"You must pass a Place as argument to this fragment\")\n        }\n\n        arguments?.run {\n            place = getParcelable(ARG_PLACE)!!\n        }\n    }\n\n    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {\n\n        val builder = AlertDialog.Builder(requireActivity())\n\n        builder.setTitle(R.string.picker_place_confirm)\n            .setView(getContentView(requireContext()))\n            .setPositiveButton(android.R.string.ok) { _, _ ->\n                confirmListener?.onPlaceConfirmed(place)\n                dismiss()\n            }\n            .setNegativeButton(R.string.picker_place_confirm_cancel) { _, _ ->\n                // Just dismiss here...\n                dismiss()\n            }\n\n        return builder.create()\n    }\n\n    override fun onDestroyView() {\n        super.onDestroyView()\n        _binding = null\n    }\n\n    private fun getContentView(context: Context): View {\n        _binding = FragmentDialogPlaceConfirmBinding.inflate(LayoutInflater.from(context))\n        initializeUi()\n        return binding.root\n    }\n\n    private fun initializeUi() = with(binding) {\n\n        if (place.name.isNullOrEmpty()) {\n            tvPlaceName.isVisible = false\n        } else {\n            tvPlaceName.text = place.name\n        }\n\n        tvPlaceAddress.text = place.address\n\n        fetchPlaceMap()\n        fetchPlacePhoto()\n    }\n\n    private fun fetchPlaceMap() = with(binding.ivPlaceMap) {\n\n        isVisible =\n            if (resources.getBoolean(R.bool.show_confirmation_map)) true\n            else return@with\n\n        val staticMapUrl = getFinalMapUrl()\n\n        binding.ivPlaceMap.load(staticMapUrl) {\n            listener(\n                onError = { request, error ->\n                    isVisible = false\n                    Log.w(TAG, \"Error loading map image: ${request.data}\", error.throwable)\n                }\n            )\n        }\n    }\n\n    private fun fetchPlacePhoto() {\n\n        val photoMetadata = place.photoMetadatas?.firstOrNull()\n\n        if (resources.getBoolean(R.bool.show_confirmation_photo)\n            && (photoMetadata != null)\n        ) {\n            viewModel.getPlacePhoto(photoMetadata)\n                .observe(this) { handlePlacePhotoLoaded(it) }\n        } else {\n            handlePlacePhotoLoaded(Resource.noData())\n        }\n    }\n\n    private fun getFinalMapUrl(): String {\n\n        var mapUrl = Config.STATIC_MAP_URL\n            .format(\n                place.latLng?.latitude,\n                place.latLng?.longitude,\n                PingPlacePicker.mapsApiKey,\n                Locale.getDefault().language\n            )\n\n        if (UiUtils.isNightModeEnabled(requireContext())) {\n            mapUrl += Config.STATIC_MAP_URL_STYLE_DARK\n        }\n\n        if (PingPlacePicker.urlSigningSecret.isNotEmpty()) {\n            // Sign the URL\n            return UrlSignerHelper.signUrl(mapUrl, PingPlacePicker.urlSigningSecret)\n        }\n\n        return mapUrl\n    }\n\n    private fun handlePlacePhotoLoaded(result: Resource<Bitmap>) = with(binding.ivPlacePhoto) {\n        if (result.status == Resource.Status.SUCCESS) {\n            TransitionManager.beginDelayedTransition(binding.root)\n            visibility = View.VISIBLE\n            setImageBitmap(result.data)\n        } else {\n            visibility = View.GONE\n        }\n    }\n\n    /**\n     * Listener called when a place is updated.\n     */\n    interface OnPlaceConfirmedListener {\n        fun onPlaceConfirmed(place: Place)\n    }\n\n    companion object {\n\n        private const val TAG = \"Ping#PlaceConfirmDialog\"\n        private const val ARG_PLACE = \"arg_place\"\n\n        fun newInstance(\n            place: Place,\n            listener: OnPlaceConfirmedListener\n        ): PlaceConfirmDialogFragment {\n\n            val args = Bundle()\n            args.putParcelable(ARG_PLACE, place)\n\n            return PlaceConfirmDialogFragment().apply {\n                arguments = args\n                confirmListener = listener\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/viewmodel/BaseViewModel.kt",
    "content": "package com.rtchagas.pingplacepicker.viewmodel\n\nimport androidx.lifecycle.ViewModel\nimport io.reactivex.disposables.CompositeDisposable\nimport io.reactivex.disposables.Disposable\n\n/**\n * ViewModel that automatically disposes\n * registered [org.reactivestreams.Publisher]s\n */\ninternal abstract class BaseViewModel : ViewModel() {\n\n    private val compositeDisposable = CompositeDisposable()\n\n    override fun onCleared() {\n        super.onCleared()\n        clearDisposables()\n    }\n\n    fun addDisposable(disposable: Disposable) {\n        compositeDisposable.add(disposable)\n    }\n\n    private fun clearDisposables() {\n        compositeDisposable.clear()\n    }\n}\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/viewmodel/PlaceConfirmDialogViewModel.kt",
    "content": "package com.rtchagas.pingplacepicker.viewmodel\n\nimport android.graphics.Bitmap\nimport androidx.lifecycle.LiveData\nimport androidx.lifecycle.MutableLiveData\nimport com.google.android.libraries.places.api.model.PhotoMetadata\nimport com.rtchagas.pingplacepicker.repository.PlaceRepository\nimport io.reactivex.android.schedulers.AndroidSchedulers\nimport io.reactivex.disposables.Disposable\nimport io.reactivex.schedulers.Schedulers\n\ninternal class PlaceConfirmDialogViewModel(\n    private val repository: PlaceRepository\n) : BaseViewModel() {\n\n    private val placePhotoLiveData: MutableLiveData<Resource<Bitmap>> = MutableLiveData()\n\n    fun getPlacePhoto(photoMetadata: PhotoMetadata): LiveData<Resource<Bitmap>> {\n\n        // If we already loaded the places for this location, return the same live data\n        // instead of fetching (and charging) again.\n        placePhotoLiveData.value?.run {\n            return placePhotoLiveData\n        }\n\n        val disposable: Disposable = repository.getPlacePhoto(photoMetadata)\n            .subscribeOn(Schedulers.io())\n            .observeOn(AndroidSchedulers.mainThread())\n            .doOnSubscribe { placePhotoLiveData.value = Resource.loading() }\n            .subscribe(\n                { result: Bitmap -> placePhotoLiveData.value = Resource.success(result) },\n                { error: Throwable -> placePhotoLiveData.value = Resource.error(error) }\n            )\n\n        // Keep track of this disposable during the ViewModel lifecycle\n        addDisposable(disposable)\n\n        return placePhotoLiveData\n    }\n}\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/viewmodel/PlacePickerViewModel.kt",
    "content": "package com.rtchagas.pingplacepicker.viewmodel\n\nimport androidx.lifecycle.LiveData\nimport androidx.lifecycle.MutableLiveData\nimport com.google.android.gms.maps.model.LatLng\nimport com.google.android.libraries.places.api.model.Place\nimport com.rtchagas.pingplacepicker.PingPlacePicker\nimport com.rtchagas.pingplacepicker.repository.PlaceRepository\nimport io.reactivex.android.schedulers.AndroidSchedulers\nimport io.reactivex.disposables.Disposable\nimport io.reactivex.schedulers.Schedulers\n\ninternal class PlacePickerViewModel(private val repository: PlaceRepository) : BaseViewModel() {\n\n    // Keep the place list in this view model state\n    private val placeList: MutableLiveData<Resource<List<Place>>> = MutableLiveData()\n\n    private var lastLocation: LatLng = LatLng(0.0, 0.0)\n\n    fun getNearbyPlaces(location: LatLng): LiveData<Resource<List<Place>>> {\n\n        // If we already loaded the places for this location, return the same live data\n        // instead of fetching (and charging) again.\n        placeList.value?.run {\n            if (lastLocation == location) return placeList\n        }\n\n        // Update the last fetched location\n        lastLocation = location\n\n        val placeQuery =\n            if (PingPlacePicker.isNearbySearchEnabled)\n                repository.getNearbyPlaces(location)\n            else\n                repository.getNearbyPlaces()\n\n        val disposable: Disposable = placeQuery\n            .subscribeOn(Schedulers.io())\n            .observeOn(AndroidSchedulers.mainThread())\n            .doOnSubscribe { placeList.value = Resource.loading() }\n            .subscribe(\n                { result: List<Place> -> placeList.value = Resource.success(result) },\n                { error: Throwable -> placeList.value = Resource.error(error) }\n            )\n\n        // Keep track of this disposable during the ViewModel lifecycle\n        addDisposable(disposable)\n\n        return placeList\n    }\n\n    fun getPlaceByLocation(location: LatLng): LiveData<Resource<Place?>> {\n\n        val liveData = MutableLiveData<Resource<Place?>>()\n\n        val disposable: Disposable = repository.getPlaceByLocation(location)\n            .subscribeOn(Schedulers.io())\n            .observeOn(AndroidSchedulers.mainThread())\n            .doOnSubscribe { liveData.value = Resource.loading() }\n            .subscribe(\n                { result: Place? -> liveData.value = Resource.success(result) },\n                { error: Throwable -> liveData.value = Resource.error(error) }\n            )\n\n        // Keep track of this disposable during the ViewModel lifecycle\n        addDisposable(disposable)\n\n        return liveData\n    }\n}\n"
  },
  {
    "path": "library/src/main/java/com/rtchagas/pingplacepicker/viewmodel/Resource.kt",
    "content": "package com.rtchagas.pingplacepicker.viewmodel\n\n/**\n * Resource holder provided to the UI\n */\ninternal class Resource<T> private constructor(\n    val status: Status,\n    val data: T?,\n    val error: Throwable?\n) {\n\n    /**\n     * Possible status types of a response provided to the UI\n     */\n    enum class Status {\n        LOADING,\n        SUCCESS,\n        ERROR,\n        NO_DATA\n    }\n\n    companion object {\n\n        fun <T> loading(): Resource<T> {\n            return Resource(Status.LOADING, null, null)\n        }\n\n        fun <T> success(data: T): Resource<T> {\n            return Resource(Status.SUCCESS, data, null)\n        }\n\n        fun <T> error(error: Throwable?): Resource<T> {\n            return Resource(Status.ERROR, null, error)\n        }\n\n        fun <T> noData(): Resource<T> {\n            return Resource(Status.NO_DATA, null, null)\n        }\n    }\n}\n"
  },
  {
    "path": "library/src/main/res/drawable/bg_button_round.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item android:state_pressed=\"false\">\n        <shape android:shape=\"oval\">\n            <solid android:color=\"@color/material_white\" />\n            <size android:width=\"32dp\" android:height=\"32dp\" />\n        </shape>\n    </item>\n\n    <item android:state_pressed=\"true\">\n        <shape android:shape=\"oval\">\n            <solid android:color=\"@color/material_grey200\" />\n            <size android:width=\"32dp\" android:height=\"32dp\" />\n        </shape>\n    </item>\n\n</selector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_arrow_back_black_24dp.xml",
    "content": "<vector android:autoMirrored=\"true\" android:height=\"24dp\"\n    android:viewportHeight=\"24.0\" android:viewportWidth=\"24.0\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#FF000000\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "library/src/main/res/drawable/ic_close_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportWidth=\"24.0\"\n        android:viewportHeight=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z\"/>\n</vector>\n"
  },
  {
    "path": "library/src/main/res/drawable/ic_crosshairs_gps_black_24dp.xml",
    "content": "<!-- drawable/crosshairs_gps.xml -->\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M12,8A4,4 0 0,1 16,12A4,4 0 0,1 12,16A4,4 0 0,1 8,12A4,4 0 0,1 12,8M3.05,13H1V11H3.05C3.5,6.83 6.83,3.5 11,3.05V1H13V3.05C17.17,3.5 20.5,6.83 20.95,11H23V13H20.95C20.5,17.17 17.17,20.5 13,20.95V23H11V20.95C6.83,20.5 3.5,17.17 3.05,13M12,5A7,7 0 0,0 5,12A7,7 0 0,0 12,19A7,7 0 0,0 19,12A7,7 0 0,0 12,5Z\"/>\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_magnify_black_24dp.xml",
    "content": "<!-- drawable/ic_magnify_black_24dpify_black_24dp.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_magnify_toolbar_menu_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorOnPrimarySurface\"\n    android:viewportWidth=\"24.0\"\n    android:viewportHeight=\"24.0\">\n    <path\n        android:fillColor=\"#FFFFFFFF\"\n        android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\" />\n</vector>\n"
  },
  {
    "path": "library/src/main/res/drawable/ic_map_marker_black_24dp.xml",
    "content": "<!-- drawable/ic_map_marker_black_24dp.xml -->\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M12,11.5A2.5,2.5 0 0,1 9.5,9A2.5,2.5 0 0,1 12,6.5A2.5,2.5 0 0,1 14.5,9A2.5,2.5 0 0,1 12,11.5M12,2A7,7 0 0,0 5,9C5,14.25 12,22 12,22C12,22 19,14.25 19,9A7,7 0 0,0 12,2Z\"/>\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_map_marker_radius_black_24dp.xml",
    "content": "<!-- drawable/map_marker_radius.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M12,2C15.31,2 18,4.66 18,7.95C18,12.41 12,19 12,19C12,19 6,12.41 6,7.95C6,4.66 8.69,2 12,2M12,6A2,2 0 0,0 10,8A2,2 0 0,0 12,10A2,2 0 0,0 14,8A2,2 0 0,0 12,6M20,19C20,21.21 16.42,23 12,23C7.58,23 4,21.21 4,19C4,17.71 5.22,16.56 7.11,15.83L7.75,16.74C6.67,17.19 6,17.81 6,18.5C6,19.88 8.69,21 12,21C15.31,21 18,19.88 18,18.5C18,17.81 17.33,17.19 16.25,16.74L16.89,15.83C18.78,16.56 20,17.71 20,19Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_map_marker_select_red_48dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"48dp\"\n    android:height=\"48dp\"\n    android:viewportWidth=\"48\"\n    android:viewportHeight=\"48\">\n    <path\n        android:fillColor=\"#EF5350\"\n        android:pathData=\"M38.2558,14.5577C38.2558,7.0849 31.944,1.026 24.1527,1.0019V1C24.1454,1 24.1372,1.0009 24.1289,1.0009C24.1217,1.0009 24.1135,1 24.1062,1V1.0019C16.3143,1.026 10.0031,7.0849 10.0031,14.5577C10.0031,14.5577 9.8545,17.9323 11.6149,21.4284C12.9266,24.0362 14.5912,25.7794 16.3003,28.1506C18.9353,31.8058 20.187,33.7253 21.5007,37.2636C22.4339,39.7745 23.3293,42.7376 24.1285,47C24.9286,42.7376 25.8245,39.7745 26.7577,37.2636C28.0728,33.7248 29.3245,31.8054 31.9581,28.1506C33.6672,25.7798 35.3308,24.0362 36.644,21.4284C38.4039,17.9323 38.2558,14.5577 38.2558,14.5577ZM24.1193,19.463C21.2291,19.463 18.8874,17.2184 18.8874,14.4482C18.8874,11.6794 21.2287,9.4358 24.1193,9.4358C27.0104,9.4358 29.3516,11.6794 29.3516,14.4482C29.3516,17.2179 27.0104,19.463 24.1193,19.463Z\"\n        android:strokeWidth=\"1.0\"\n        android:strokeColor=\"#ffffff\" />\n    <path\n        android:fillColor=\"#952F2D\"\n        android:pathData=\"M18,14.4166a6,5.75 0,1 0,12 0a6,5.75 0,1 0,-12 0z\" />\n</vector>\n"
  },
  {
    "path": "library/src/main/res/drawable/ic_map_marker_solid_red_32dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"32dp\"\n        android:height=\"32dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"@color/colorMarker\"\n        android:pathData=\"M4.2506,8.3303L4.2506,8.3301C4.2056,4.8003 6.8468,1.25 11.9962,1.25C16.7586,1.25 19.75,4.8071 19.75,8.3333C19.75,10.8396 18.3163,12.6056 16.5556,14.7143C16.5291,14.746 16.5025,14.7778 16.4759,14.8097C14.8739,16.7278 13.0514,18.9099 11.995,22.1298C10.9439,18.9191 9.1422,16.764 7.5519,14.8618C7.5228,14.827 7.4938,14.7923 7.4648,14.7577C5.7162,12.6654 4.2818,10.8973 4.2506,8.3303Z\"\n        android:strokeColor=\"@color/colorSurface\"\n        android:strokeWidth=\"1.0\"/>\n</vector>\n"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_accounting.xml",
    "content": "<!-- drawable/cash_multiple.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M5,6H23V18H5V6M14,9A3,3 0 0,1 17,12A3,3 0 0,1 14,15A3,3 0 0,1 11,12A3,3 0 0,1 14,9M9,8A2,2 0 0,1 7,10V14A2,2 0 0,1 9,16H19A2,2 0 0,1 21,14V10A2,2 0 0,1 19,8H9M1,10H3V20H19V22H1V10Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_airport.xml",
    "content": "<!-- drawable/airplane.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M21,16V14L13,9V3.5A1.5,1.5 0 0,0 11.5,2A1.5,1.5 0 0,0 10,3.5V9L2,14V16L10,13.5V19L8,20.5V22L11.5,21L15,22V20.5L13,19V13.5L21,16Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_amusement_park.xml",
    "content": "<!-- drawable/human_handsup.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M5,1C5,3.7 6.56,6.16 9,7.32V22H11V15H13V22H15V7.31C17.44,6.16 19,3.7 19,1H17A5,5 0 0,1 12,6A5,5 0 0,1 7,1M12,1C10.89,1 10,1.89 10,3C10,4.11 10.89,5 12,5C13.11,5 14,4.11 14,3C14,1.89 13.11,1 12,1Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_aquarium.xml",
    "content": "<!-- drawable/fish.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M12,20L12.76,17C9.5,16.79 6.59,15.4 5.75,13.58C5.66,14.06 5.53,14.5 5.33,14.83C4.67,16 3.33,16 2,16C3.1,16 3.5,14.43 3.5,12.5C3.5,10.57 3.1,9 2,9C3.33,9 4.67,9 5.33,10.17C5.53,10.5 5.66,10.94 5.75,11.42C6.4,10 8.32,8.85 10.66,8.32L9,5C11,5 13,5 14.33,5.67C15.46,6.23 16.11,7.27 16.69,8.38C19.61,9.08 22,10.66 22,12.5C22,14.38 19.5,16 16.5,16.66C15.67,17.76 14.86,18.78 14.17,19.33C13.33,20 12.67,20 12,20M17,11A1,1 0 0,0 16,12A1,1 0 0,0 17,13A1,1 0 0,0 18,12A1,1 0 0,0 17,11Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_art_gallery.xml",
    "content": "<!-- drawable/drama_masks.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M8.11,19.45C5.94,18.65 4.22,16.78 3.71,14.35L2.05,6.54C1.81,5.46 2.5,4.4 3.58,4.17L13.35,2.1L13.38,2.09C14.45,1.88 15.5,2.57 15.72,3.63L16.07,5.3L20.42,6.23H20.45C21.5,6.47 22.18,7.53 21.96,8.59L20.3,16.41C19.5,20.18 15.78,22.6 12,21.79C10.42,21.46 9.08,20.61 8.11,19.45V19.45M20,8.18L10.23,6.1L8.57,13.92V13.95C8,16.63 9.73,19.27 12.42,19.84C15.11,20.41 17.77,18.69 18.34,16L20,8.18M16,16.5C15.37,17.57 14.11,18.16 12.83,17.89C11.56,17.62 10.65,16.57 10.5,15.34L16,16.5M8.47,5.17L4,6.13L5.66,13.94L5.67,13.97C5.82,14.68 6.12,15.32 6.53,15.87C6.43,15.1 6.45,14.3 6.62,13.5L7.05,11.5C6.6,11.42 6.21,11.17 6,10.81C6.06,10.2 6.56,9.66 7.25,9.5C7.33,9.5 7.4,9.5 7.5,9.5L8.28,5.69C8.32,5.5 8.38,5.33 8.47,5.17M15.03,12.23C15.35,11.7 16.03,11.42 16.72,11.57C17.41,11.71 17.91,12.24 18,12.86C17.67,13.38 17,13.66 16.3,13.5C15.61,13.37 15.11,12.84 15.03,12.23M10.15,11.19C10.47,10.66 11.14,10.38 11.83,10.53C12.5,10.67 13.03,11.21 13.11,11.82C12.78,12.34 12.11,12.63 11.42,12.5C10.73,12.33 10.23,11.8 10.15,11.19M11.97,4.43L13.93,4.85L13.77,4.05L11.97,4.43Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_atm.xml",
    "content": "<!-- drawable/cash_usd.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M20,18H4V6H20M20,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V6C22,4.89 21.1,4 20,4M11,17H13V16H14A1,1 0 0,0 15,15V12A1,1 0 0,0 14,11H11V10H15V8H13V7H11V8H10A1,1 0 0,0 9,9V12A1,1 0 0,0 10,13H13V14H9V16H11V17Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_bakery.xml",
    "content": "<!-- drawable/cupcake.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M12,1.5A2.5,2.5 0 0,1 14.5,4A2.5,2.5 0 0,1 12,6.5A2.5,2.5 0 0,1 9.5,4A2.5,2.5 0 0,1 12,1.5M15.87,5C18,5 20,7 20,9C22.7,9 22.7,13 20,13H4C1.3,13 1.3,9 4,9C4,7 6,5 8.13,5C8.57,6.73 10.14,8 12,8C13.86,8 15.43,6.73 15.87,5M5,15H8L9,22H7L5,15M10,15H14L13,22H11L10,15M16,15H19L17,22H15L16,15Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_bank.xml",
    "content": "<!-- drawable/bank.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M11.5,1L2,6V8H21V6M16,10V17H19V10M2,22H21V19H2M10,10V17H13V10M4,10V17H7V10H4Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_bar.xml",
    "content": "<!-- drawable/glass_cocktail.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M7.5,7L5.5,5H18.5L16.5,7M11,13V19H6V21H18V19H13V13L21,5V3H3V5L11,13Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_beauty_salon.xml",
    "content": "<!-- drawable/content_cut.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M19,3L13,9L15,11L22,4V3M12,12.5A0.5,0.5 0 0,1 11.5,12A0.5,0.5 0 0,1 12,11.5A0.5,0.5 0 0,1 12.5,12A0.5,0.5 0 0,1 12,12.5M6,20A2,2 0 0,1 4,18C4,16.89 4.9,16 6,16A2,2 0 0,1 8,18C8,19.11 7.1,20 6,20M6,8A2,2 0 0,1 4,6C4,4.89 4.9,4 6,4A2,2 0 0,1 8,6C8,7.11 7.1,8 6,8M9.64,7.64C9.87,7.14 10,6.59 10,6A4,4 0 0,0 6,2A4,4 0 0,0 2,6A4,4 0 0,0 6,10C6.59,10 7.14,9.87 7.64,9.64L10,12L7.64,14.36C7.14,14.13 6.59,14 6,14A4,4 0 0,0 2,18A4,4 0 0,0 6,22A4,4 0 0,0 10,18C10,17.41 9.87,16.86 9.64,16.36L12,14L19,21H22V20L9.64,7.64Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_bicycle_store.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M5,20.5A3.5,3.5 0 0,1 1.5,17A3.5,3.5 0 0,1 5,13.5A3.5,3.5 0 0,1 8.5,17A3.5,3.5 0 0,1 5,20.5M5,12A5,5 0 0,0 0,17A5,5 0 0,0 5,22A5,5 0 0,0 10,17A5,5 0 0,0 5,12M14.8,10H19V8.2H15.8L13.86,4.93C13.57,4.43 13,4.1 12.4,4.1C11.93,4.1 11.5,4.29 11.2,4.6L7.5,8.29C7.19,8.6 7,9 7,9.5C7,10.13 7.33,10.66 7.85,10.97L11.2,13V18H13V11.5L10.75,9.85L13.07,7.5M19,20.5A3.5,3.5 0 0,1 15.5,17A3.5,3.5 0 0,1 19,13.5A3.5,3.5 0 0,1 22.5,17A3.5,3.5 0 0,1 19,20.5M19,12A5,5 0 0,0 14,17A5,5 0 0,0 19,22A5,5 0 0,0 24,17A5,5 0 0,0 19,12M16,4.8C17,4.8 17.8,4 17.8,3C17.8,2 17,1.2 16,1.2C15,1.2 14.2,2 14.2,3C14.2,4 15,4.8 16,4.8Z\"/>\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_book_store.xml",
    "content": "<!-- drawable/book_open_page_variant.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M19,2L14,6.5V17.5L19,13V2M6.5,5C4.55,5 2.45,5.4 1,6.5V21.16C1,21.41 1.25,21.66 1.5,21.66C1.6,21.66 1.65,21.59 1.75,21.59C3.1,20.94 5.05,20.5 6.5,20.5C8.45,20.5 10.55,20.9 12,22C13.35,21.15 15.8,20.5 17.5,20.5C19.15,20.5 20.85,20.81 22.25,21.56C22.35,21.61 22.4,21.59 22.5,21.59C22.75,21.59 23,21.34 23,21.09V6.5C22.4,6.05 21.75,5.75 21,5.5V7.5L21,13V19C19.9,18.65 18.7,18.5 17.5,18.5C15.8,18.5 13.35,19.15 12,20V13L12,8.5V6.5C10.55,5.4 8.45,5 6.5,5V5Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_bowling_alley.xml",
    "content": "<!-- drawable/bowling.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12.5,11A1.5,1.5 0 0,0 11,12.5A1.5,1.5 0 0,0 12.5,14A1.5,1.5 0 0,0 14,12.5A1.5,1.5 0 0,0 12.5,11M12,5A2,2 0 0,0 10,7A2,2 0 0,0 12,9A2,2 0 0,0 14,7A2,2 0 0,0 12,5M5.93,8.5C5.38,9.45 5.71,10.67 6.66,11.22C7.62,11.78 8.84,11.45 9.4,10.5C9.95,9.53 9.62,8.31 8.66,7.76C7.71,7.21 6.5,7.53 5.93,8.5Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_bus_station.xml",
    "content": "<!-- drawable/bus.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M18,11H6V6H18M16.5,17A1.5,1.5 0 0,1 15,15.5A1.5,1.5 0 0,1 16.5,14A1.5,1.5 0 0,1 18,15.5A1.5,1.5 0 0,1 16.5,17M7.5,17A1.5,1.5 0 0,1 6,15.5A1.5,1.5 0 0,1 7.5,14A1.5,1.5 0 0,1 9,15.5A1.5,1.5 0 0,1 7.5,17M4,16C4,16.88 4.39,17.67 5,18.22V20A1,1 0 0,0 6,21H7A1,1 0 0,0 8,20V19H16V20A1,1 0 0,0 17,21H18A1,1 0 0,0 19,20V18.22C19.61,17.67 20,16.88 20,16V6C20,2.5 16.42,2 12,2C7.58,2 4,2.5 4,6V16Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_cafe.xml",
    "content": "<!-- drawable/coffee.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M2,21H20V19H2M20,8H18V5H20M20,3H4V13A4,4 0 0,0 8,17H14A4,4 0 0,0 18,13V10H20A2,2 0 0,0 22,8V5C22,3.89 21.1,3 20,3Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_campground.xml",
    "content": "<!-- drawable/basecamp.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M2,16.25C2,16.25 4,3.75 12,3.75C20,3.75 22,16.25 22,16.25C22,16.25 20,20.25 12,20.25C4,20.25 2,16.25 2,16.25M3.35,15.65C3.35,15.65 4.3,19 12,19C17,19 20,17.8 20.65,15.85C21.3,13.9 15.65,7.6 14.65,7.6C13.65,7.6 11.2,12 10.45,12C8.45,12 8.9,10 7.15,10C5.4,10 3.35,15.65 3.35,15.65Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_car_dealer.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M5,11L6.5,6.5H17.5L19,11M17.5,16A1.5,1.5 0 0,1 16,14.5A1.5,1.5 0 0,1 17.5,13A1.5,1.5 0 0,1 19,14.5A1.5,1.5 0 0,1 17.5,16M6.5,16A1.5,1.5 0 0,1 5,14.5A1.5,1.5 0 0,1 6.5,13A1.5,1.5 0 0,1 8,14.5A1.5,1.5 0 0,1 6.5,16M18.92,6C18.72,5.42 18.16,5 17.5,5H6.5C5.84,5 5.28,5.42 5.08,6L3,12V20A1,1 0 0,0 4,21H5A1,1 0 0,0 6,20V19H18V20A1,1 0 0,0 19,21H20A1,1 0 0,0 21,20V12L18.92,6Z\"/>\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_car_rental.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M5,11L6.5,6.5H17.5L19,11M17.5,16A1.5,1.5 0 0,1 16,14.5A1.5,1.5 0 0,1 17.5,13A1.5,1.5 0 0,1 19,14.5A1.5,1.5 0 0,1 17.5,16M6.5,16A1.5,1.5 0 0,1 5,14.5A1.5,1.5 0 0,1 6.5,13A1.5,1.5 0 0,1 8,14.5A1.5,1.5 0 0,1 6.5,16M18.92,6C18.72,5.42 18.16,5 17.5,5H6.5C5.84,5 5.28,5.42 5.08,6L3,12V20A1,1 0 0,0 4,21H5A1,1 0 0,0 6,20V19H18V20A1,1 0 0,0 19,21H20A1,1 0 0,0 21,20V12L18.92,6Z\"/>\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_car_repair.xml",
    "content": "<!-- drawable/wrench.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M22.7,19L13.6,9.9C14.5,7.6 14,4.9 12.1,3C10.1,1 7.1,0.6 4.7,1.7L9,6L6,9L1.6,4.7C0.4,7.1 0.9,10.1 2.9,12.1C4.8,14 7.5,14.5 9.8,13.6L18.9,22.7C19.3,23.1 19.9,23.1 20.3,22.7L22.6,20.4C23.1,20 23.1,19.3 22.7,19Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_car_wash.xml",
    "content": "<!-- drawable/car_wash.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M5,13L6.5,8.5H17.5L19,13M17.5,18A1.5,1.5 0 0,1 16,16.5A1.5,1.5 0 0,1 17.5,15A1.5,1.5 0 0,1 19,16.5A1.5,1.5 0 0,1 17.5,18M6.5,18A1.5,1.5 0 0,1 5,16.5A1.5,1.5 0 0,1 6.5,15A1.5,1.5 0 0,1 8,16.5A1.5,1.5 0 0,1 6.5,18M18.92,8C18.72,7.42 18.16,7 17.5,7H6.5C5.84,7 5.28,7.42 5.08,8L3,14V22A1,1 0 0,0 4,23H5A1,1 0 0,0 6,22V21H18V22A1,1 0 0,0 19,23H20A1,1 0 0,0 21,22V14M7,5A1.5,1.5 0 0,0 8.5,3.5C8.5,2.5 7,0.8 7,0.8C7,0.8 5.5,2.5 5.5,3.5A1.5,1.5 0 0,0 7,5M12,5A1.5,1.5 0 0,0 13.5,3.5C13.5,2.5 12,0.8 12,0.8C12,0.8 10.5,2.5 10.5,3.5A1.5,1.5 0 0,0 12,5M17,5A1.5,1.5 0 0,0 18.5,3.5C18.5,2.5 17,0.8 17,0.8C17,0.8 15.5,2.5 15.5,3.5A1.5,1.5 0 0,0 17,5Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_casino.xml",
    "content": "<!-- drawable/cards_playing_outline.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M11.19,2.25C11.97,2.26 12.71,2.73 13,3.5L18,15.45C18.09,15.71 18.14,16 18.13,16.25C18.11,17 17.65,17.74 16.9,18.05L9.53,21.1C9.27,21.22 9,21.25 8.74,21.25C7.97,21.23 7.24,20.77 6.93,20L1.97,8.05C1.55,7.04 2.04,5.87 3.06,5.45L10.42,2.4C10.67,2.31 10.93,2.25 11.19,2.25M14.67,2.25H16.12A2,2 0 0,1 18.12,4.25V10.6L14.67,2.25M20.13,3.79L21.47,4.36C22.5,4.78 22.97,5.94 22.56,6.96L20.13,12.82V3.79M11.19,4.22L3.8,7.29L8.77,19.3L16.17,16.24L11.19,4.22M8.65,8.54L11.88,10.95L11.44,14.96L8.21,12.54L8.65,8.54Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_cemetery.xml",
    "content": "<!-- drawable/grave_stone.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M10,2H14C17.31,2 19,4.69 19,8V18.66C16.88,17.63 15.07,17 12,17C8.93,17 7.12,17.63 5,18.66V8C5,4.69 6.69,2 10,2M8,8V9.5H16V8H8M9,12V13.5H15V12H9M3,22V21.31C5.66,19.62 13.23,15.84 21,21.25V22H3Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_church.xml",
    "content": "<!-- drawable/church.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M11,2H13V4H15V6H13V9.4L22,13V15L20,14.2V22H14V17A2,2 0 0,0 12,15A2,2 0 0,0 10,17V22H4V14.2L2,15V13L11,9.4V6H9V4H11V2M6,20H8V15L7,14L6,15V20M16,20H18V15L17,14L16,15V20Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_city_hall.xml",
    "content": "<!-- drawable/city_variant.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M19,9V7A2,2 0 0,0 17,5H16V2H14V5H13A2,2 0 0,0 11,7V9A2,2 0 0,0 9,11V12H5A2,2 0 0,0 3,14V22H6V20H8V22H12V20H14V22H16V20H18V22H21V11A2,2 0 0,0 19,9M8,18H6V16H8V18M14,18H12V16H14V18M14,14H12V12H14V14M13,9V7H17V9H13M18,18H16V16H18V18M18,14H16V12H18V14Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_clothing_store.xml",
    "content": "<!-- drawable/hanger.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M20.76,16.34H20.75C21.5,16.77 22,17.58 22,18.5A2.5,2.5 0 0,1 19.5,21H4.5A2.5,2.5 0 0,1 2,18.5C2,17.58 2.5,16.77 3.25,16.34H3.24L11,11.86C11,11.86 11,11 12,10C13,10 14,9.1 14,8A2,2 0 0,0 12,6A2,2 0 0,0 10,8H8A4,4 0 0,1 12,4A4,4 0 0,1 16,8C16,9.86 14.73,11.42 13,11.87L20.76,16.34M4.5,19V19H19.5V19C19.67,19 19.84,18.91 19.93,18.75C20.07,18.5 20,18.21 19.75,18.07L12,13.59L4.25,18.07C4,18.21 3.93,18.5 4.07,18.75C4.16,18.91 4.33,19 4.5,19Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_convenience_store.xml",
    "content": "<!-- drawable/store_24_hour.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M16,12H15V10H13V7H14V9H15V7H16M11,10H9V11H11V12H8V9H10V8H8V7H11M19,7V4H5V7H2V20H10V16H14V20H22V7H19Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_courthouse.xml",
    "content": "<!-- drawable/gavel.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M2.3,20.28L11.9,10.68L10.5,9.26L9.78,9.97C9.39,10.36 8.76,10.36 8.37,9.97L7.66,9.26C7.27,8.87 7.27,8.24 7.66,7.85L13.32,2.19C13.71,1.8 14.34,1.8 14.73,2.19L15.44,2.9C15.83,3.29 15.83,3.92 15.44,4.31L14.73,5L16.15,6.43C16.54,6.04 17.17,6.04 17.56,6.43C17.95,6.82 17.95,7.46 17.56,7.85L18.97,9.26L19.68,8.55C20.07,8.16 20.71,8.16 21.1,8.55L21.8,9.26C22.19,9.65 22.19,10.29 21.8,10.68L16.15,16.33C15.76,16.72 15.12,16.72 14.73,16.33L14.03,15.63C13.63,15.24 13.63,14.6 14.03,14.21L14.73,13.5L13.32,12.09L3.71,21.7C3.32,22.09 2.69,22.09 2.3,21.7C1.91,21.31 1.91,20.67 2.3,20.28M20,19A2,2 0 0,1 22,21V22H12V21A2,2 0 0,1 14,19H20Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_dentist.xml",
    "content": "<!-- drawable/tooth.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M7,2C4,2 2,5 2,8C2,10.11 3,13 4,14C5,15 6,22 8,22C12.54,22 10,15 12,15C14,15 11.46,22 16,22C18,22 19,15 20,14C21,13 22,10.11 22,8C22,5 20,2 17,2C14,2 14,3 12,3C10,3 10,2 7,2Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_department_store.xml",
    "content": "<!-- drawable/store.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M12,18H6V14H12M21,14V12L20,7H4L3,12V14H4V20H14V14H18V20H20V14M20,4H4V6H20V4Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_doctor.xml",
    "content": "<!-- drawable/doctor.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M14.84,16.26C17.86,16.83 20,18.29 20,20V22H4V20C4,18.29 6.14,16.83 9.16,16.26L12,21L14.84,16.26M8,8H16V10A4,4 0 0,1 12,14A4,4 0 0,1 8,10V8M8,7L8.41,2.9C8.46,2.39 8.89,2 9.41,2H14.6C15.11,2 15.54,2.39 15.59,2.9L16,7H8M12,3H11V4H10V5H11V6H12V5H13V4H12V3Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_electrician.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M16,7V3H14V7H10V3H8V7H8C7,7 6,8 6,9V14.5L9.5,18V21H14.5V18L18,14.5V9C18,8 17,7 16,7Z\"/>\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_electronics_store.xml",
    "content": "<!-- drawable/television_classic.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M8.16,3L6.75,4.41L9.34,7H4C2.89,7 2,7.89 2,9V19C2,20.11 2.89,21 4,21H20C21.11,21 22,20.11 22,19V9C22,7.89 21.11,7 20,7H14.66L17.25,4.41L15.84,3L12,6.84L8.16,3M4,9H17V19H4V9M19.5,9A1,1 0 0,1 20.5,10A1,1 0 0,1 19.5,11A1,1 0 0,1 18.5,10A1,1 0 0,1 19.5,9M19.5,12A1,1 0 0,1 20.5,13A1,1 0 0,1 19.5,14A1,1 0 0,1 18.5,13A1,1 0 0,1 19.5,12Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_embassy.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M11.5,1L2,6V8H21V6M16,10V17H19V10M2,22H21V19H2M10,10V17H13V10M4,10V17H7V10H4Z\"/>\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_establishment.xml",
    "content": "<!-- drawable/home_city.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M0,21V10L7.5,5L15,10V21H10V14H5V21H0M24,2V21H17V8.93L16,8.27V6H14V6.93L10,4.27V2H24M21,14H19V16H21V14M21,10H19V12H21V10M21,6H19V8H21V6Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_finance.xml",
    "content": "<!-- drawable/currency_usd.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M7,15H9C9,16.08 10.37,17 12,17C13.63,17 15,16.08 15,15C15,13.9 13.96,13.5 11.76,12.97C9.64,12.44 7,11.78 7,9C7,7.21 8.47,5.69 10.5,5.18V3H13.5V5.18C15.53,5.69 17,7.21 17,9H15C15,7.92 13.63,7 12,7C10.37,7 9,7.92 9,9C9,10.1 10.04,10.5 12.24,11.03C14.36,11.56 17,12.22 17,15C17,16.79 15.53,18.31 13.5,18.82V21H10.5V18.82C8.47,18.31 7,16.79 7,15Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_fire_station.xml",
    "content": "<!-- drawable/fire_truck.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M17.04,2C16.85,2 16.66,2.04 16.5,2.14L5.59,8.5H9.55L17.5,3.86C18,3.58 18.13,2.97 17.85,2.5C17.68,2.2 17.38,2 17.04,2M16,8V10H3A2,2 0 0,0 1,12H2V15H1V19H3A3,3 0 0,0 6,22A3,3 0 0,0 9,19H15A3,3 0 0,0 18,22A3,3 0 0,0 21,19H23V12.5L19.5,8H16M18,9.5H19L21.5,12.5V13.5H18V9.5M4,12H7V15H4V12M9,12H12V15H9V12M14,12H16V15H14V12M6,17.5A1.5,1.5 0 0,1 7.5,19A1.5,1.5 0 0,1 6,20.5A1.5,1.5 0 0,1 4.5,19A1.5,1.5 0 0,1 6,17.5M18,17.5A1.5,1.5 0 0,1 19.5,19A1.5,1.5 0 0,1 18,20.5A1.5,1.5 0 0,1 16.5,19A1.5,1.5 0 0,1 18,17.5Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_florist.xml",
    "content": "<!-- drawable/flower.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M3,13A9,9 0 0,0 12,22C12,17 7.97,13 3,13M12,5.5A2.5,2.5 0 0,1 14.5,8A2.5,2.5 0 0,1 12,10.5A2.5,2.5 0 0,1 9.5,8A2.5,2.5 0 0,1 12,5.5M5.6,10.25A2.5,2.5 0 0,0 8.1,12.75C8.63,12.75 9.12,12.58 9.5,12.31C9.5,12.37 9.5,12.43 9.5,12.5A2.5,2.5 0 0,0 12,15A2.5,2.5 0 0,0 14.5,12.5C14.5,12.43 14.5,12.37 14.5,12.31C14.88,12.58 15.37,12.75 15.9,12.75C17.28,12.75 18.4,11.63 18.4,10.25C18.4,9.25 17.81,8.4 16.97,8C17.81,7.6 18.4,6.74 18.4,5.75C18.4,4.37 17.28,3.25 15.9,3.25C15.37,3.25 14.88,3.41 14.5,3.69C14.5,3.63 14.5,3.56 14.5,3.5A2.5,2.5 0 0,0 12,1A2.5,2.5 0 0,0 9.5,3.5C9.5,3.56 9.5,3.63 9.5,3.69C9.12,3.41 8.63,3.25 8.1,3.25A2.5,2.5 0 0,0 5.6,5.75C5.6,6.74 6.19,7.6 7.03,8C6.19,8.4 5.6,9.25 5.6,10.25M12,22A9,9 0 0,0 21,13C16,13 12,17 12,22Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_food.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M15.5,21L14,8H16.23L15.1,3.46L16.84,3L18.09,8H22L20.5,21H15.5M5,11H10A3,3 0 0,1 13,14H2A3,3 0 0,1 5,11M13,18A3,3 0 0,1 10,21H5A3,3 0 0,1 2,18H13M3,15H8L9.5,16.5L11,15H12A1,1 0 0,1 13,16A1,1 0 0,1 12,17H3A1,1 0 0,1 2,16A1,1 0 0,1 3,15Z\"/>\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_funeral_home.xml",
    "content": "<!-- drawable/skull.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M12,2A9,9 0 0,0 3,11C3,14.03 4.53,16.82 7,18.47V22H9V19H11V22H13V19H15V22H17V18.46C19.47,16.81 21,14 21,11A9,9 0 0,0 12,2M8,11A2,2 0 0,1 10,13A2,2 0 0,1 8,15A2,2 0 0,1 6,13A2,2 0 0,1 8,11M16,11A2,2 0 0,1 18,13A2,2 0 0,1 16,15A2,2 0 0,1 14,13A2,2 0 0,1 16,11M12,14L13.5,17H10.5L12,14Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_furniture_store.xml",
    "content": "<!-- drawable/sofa.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M7,6H9A2,2 0 0,1 11,8V12H5V8A2,2 0 0,1 7,6M15,6H17A2,2 0 0,1 19,8V12H13V8A2,2 0 0,1 15,6M1,9H2A1,1 0 0,1 3,10V12A2,2 0 0,0 5,14H19A2,2 0 0,0 21,12V11L21,10A1,1 0 0,1 22,9H23A1,1 0 0,1 24,10V19H21V17H3V19H0V10A1,1 0 0,1 1,9Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_gas_station.xml",
    "content": "<!-- drawable/gas_station.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M18,10A1,1 0 0,1 17,9A1,1 0 0,1 18,8A1,1 0 0,1 19,9A1,1 0 0,1 18,10M12,10H6V5H12M19.77,7.23L19.78,7.22L16.06,3.5L15,4.56L17.11,6.67C16.17,7 15.5,7.93 15.5,9A2.5,2.5 0 0,0 18,11.5C18.36,11.5 18.69,11.42 19,11.29V18.5A1,1 0 0,1 18,19.5A1,1 0 0,1 17,18.5V14C17,12.89 16.1,12 15,12H14V5C14,3.89 13.1,3 12,3H6C4.89,3 4,3.89 4,5V21H14V13.5H15.5V18.5A2.5,2.5 0 0,0 18,21A2.5,2.5 0 0,0 20.5,18.5V9C20.5,8.31 20.22,7.68 19.77,7.23Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_gym.xml",
    "content": "<!-- drawable/dumbbell.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M4.22,14.12L3.5,13.41C2.73,12.63 2.73,11.37 3.5,10.59C4.3,9.8 5.56,9.8 6.34,10.59L8.92,13.16L13.16,8.92L10.59,6.34C9.8,5.56 9.8,4.3 10.59,3.5C11.37,2.73 12.63,2.73 13.41,3.5L14.12,4.22L19.78,9.88L20.5,10.59C21.27,11.37 21.27,12.63 20.5,13.41C19.7,14.2 18.44,14.2 17.66,13.41L15.08,10.84L10.84,15.08L13.41,17.66C14.2,18.44 14.2,19.7 13.41,20.5C12.63,21.27 11.37,21.27 10.59,20.5L9.88,19.78L4.22,14.12M3.16,19.42L4.22,18.36L2.81,16.95C2.42,16.56 2.42,15.93 2.81,15.54C3.2,15.15 3.83,15.15 4.22,15.54L8.46,19.78C8.85,20.17 8.85,20.8 8.46,21.19C8.07,21.58 7.44,21.58 7.05,21.19L5.64,19.78L4.58,20.84L3.16,19.42M19.42,3.16L20.84,4.58L19.78,5.64L21.19,7.05C21.58,7.44 21.58,8.07 21.19,8.46C20.8,8.86 20.17,8.86 19.78,8.46L15.54,4.22C15.15,3.83 15.15,3.2 15.54,2.81C15.93,2.42 16.56,2.42 16.95,2.81L18.36,4.22L19.42,3.16Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_hair_care.xml",
    "content": "<!-- drawable/content_cut.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M19,3L13,9L15,11L22,4V3M12,12.5A0.5,0.5 0 0,1 11.5,12A0.5,0.5 0 0,1 12,11.5A0.5,0.5 0 0,1 12.5,12A0.5,0.5 0 0,1 12,12.5M6,20A2,2 0 0,1 4,18C4,16.89 4.9,16 6,16A2,2 0 0,1 8,18C8,19.11 7.1,20 6,20M6,8A2,2 0 0,1 4,6C4,4.89 4.9,4 6,4A2,2 0 0,1 8,6C8,7.11 7.1,8 6,8M9.64,7.64C9.87,7.14 10,6.59 10,6A4,4 0 0,0 6,2A4,4 0 0,0 2,6A4,4 0 0,0 6,10C6.59,10 7.14,9.87 7.64,9.64L10,12L7.64,14.36C7.14,14.13 6.59,14 6,14A4,4 0 0,0 2,18A4,4 0 0,0 6,22A4,4 0 0,0 10,18C10,17.41 9.87,16.86 9.64,16.36L12,14L19,21H22V20L9.64,7.64Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_hardware_store.xml",
    "content": "<!-- drawable/hammer.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M16,5L19,8L18.5,8.5C19.5,9.5 20,10 20.5,9.5L22,11C22,12 20.5,13.5 19.5,13.5L18,12C18.5,11.5 18,11 17,10L16,11L13,8C14.5,6 13,4 9,5C10,4 11,3 12,3C12.5,3 14,3 16,5M2,20L4,22L14,12L12,10L2,20Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_health.xml",
    "content": "<!-- drawable/heart_pulse.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M7.5,4A5.5,5.5 0 0,0 2,9.5C2,10 2.09,10.5 2.22,11H6.3L7.57,7.63C7.87,6.83 9.05,6.75 9.43,7.63L11.5,13L12.09,11.58C12.22,11.25 12.57,11 13,11H21.78C21.91,10.5 22,10 22,9.5A5.5,5.5 0 0,0 16.5,4C14.64,4 13,4.93 12,6.34C11,4.93 9.36,4 7.5,4V4M3,12.5A1,1 0 0,0 2,13.5A1,1 0 0,0 3,14.5H5.44L11,20C12,20.9 12,20.9 13,20L18.56,14.5H21A1,1 0 0,0 22,13.5A1,1 0 0,0 21,12.5H13.4L12.47,14.8C12.07,15.81 10.92,15.67 10.55,14.83L8.5,9.5L7.54,11.83C7.39,12.21 7.05,12.5 6.6,12.5H3Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_hindu_temple.xml",
    "content": "<!-- drawable/hinduism.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M15,2L13.5,3.5L15,5L16.5,3.5L15,2M11,3C10,9 17,10 20,6L18,4.5C17,6 13,8 11,3M9,7C7,7 4.5,8.5 4.5,8.5L6,11C7,10 9,9.5 10,10C12,11 9,13 7,12V15.5C10,14 12,16 11,17.5C8,22 3,16 3,13C1,19 6,22 9,22C12,22 14,20 12.5,15H14C12.5,19.5 18,24 21,18C22,16 22,9.5 17,9.5C13,9.5 14,15 10.5,13.5C14,10 12,7 9,7M19,12C22,15 15,21 15,15C15,13 17,10.5 19,12Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_home_goods_store.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M8,2H16L20,14H4L8,2M11,15H13V20H18V22H6V20H11V15Z\"/>\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_hospital.xml",
    "content": "<!-- drawable/hospital.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M18,14H14V18H10V14H6V10H10V6H14V10H18M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_insurance_agency.xml",
    "content": "<!-- drawable/shield_home.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M11,13H13V16H16V11H18L12,6L6,11H8V16H11V13M12,1L21,5V11C21,16.55 17.16,21.74 12,23C6.84,21.74 3,16.55 3,11V5L12,1Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_jewelry_store.xml",
    "content": "<!-- drawable/diamond_stone.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M16,9H19L14,16M10,9H14L12,17M5,9H8L10,16M15,4H17L19,7H16M11,4H13L14,7H10M7,4H9L8,7H5M6,2L2,8L12,22L22,8L18,2H6Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_laundry.xml",
    "content": "<!-- drawable/washing_machine.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M14.83,11.17C16.39,12.73 16.39,15.27 14.83,16.83C13.27,18.39 10.73,18.39 9.17,16.83L14.83,11.17M6,2H18A2,2 0 0,1 20,4V20A2,2 0 0,1 18,22H6A2,2 0 0,1 4,20V4A2,2 0 0,1 6,2M7,4A1,1 0 0,0 6,5A1,1 0 0,0 7,6A1,1 0 0,0 8,5A1,1 0 0,0 7,4M10,4A1,1 0 0,0 9,5A1,1 0 0,0 10,6A1,1 0 0,0 11,5A1,1 0 0,0 10,4M12,8A6,6 0 0,0 6,14A6,6 0 0,0 12,20A6,6 0 0,0 18,14A6,6 0 0,0 12,8Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_lawyer.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M12,3C10.73,3 9.6,3.8 9.18,5H3V7H4.95L2,14C1.53,16 3,17 5.5,17C8,17 9.56,16 9,14L6.05,7H9.17C9.5,7.85 10.15,8.5 11,8.83V20H2V22H22V20H13V8.82C13.85,8.5 14.5,7.85 14.82,7H17.95L15,14C14.53,16 16,17 18.5,17C21,17 22.56,16 22,14L19.05,7H21V5H14.83C14.4,3.8 13.27,3 12,3M12,5A1,1 0 0,1 13,6A1,1 0 0,1 12,7A1,1 0 0,1 11,6A1,1 0 0,1 12,5M5.5,10.25L7,14H4L5.5,10.25M18.5,10.25L20,14H17L18.5,10.25Z\"/>\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_library.xml",
    "content": "<!-- drawable/library.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M12,8A3,3 0 0,0 15,5A3,3 0 0,0 12,2A3,3 0 0,0 9,5A3,3 0 0,0 12,8M12,11.54C9.64,9.35 6.5,8 3,8V19C6.5,19 9.64,20.35 12,22.54C14.36,20.35 17.5,19 21,19V8C17.5,8 14.36,9.35 12,11.54Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_liquor_store.xml",
    "content": "<!-- drawable/glass_wine.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    android:width=\"24dp\"\r\n    android:height=\"24dp\"\r\n    android:viewportWidth=\"24\"\r\n    android:viewportHeight=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M15.5,21.27L14.66,21.18C13.9,21.11 13.25,20.6 13,19.87C12.47,17.91 12.47,15.83 13,13.87C15.32,13.4 17,11.37 17,9C17,7 15,2 15,2H9C9,2 7,7 7,9C7,11.38 8.67,13.42 11,13.9C11.53,15.86 11.53,17.94 11,19.9C10.76,20.62 10.12,21.13 9.37,21.21L8.5,21.3C8.5,21.3 8,21.28 8,22H16C16,21.28 15.5,21.27 15.5,21.27M9.44,7L10.44,4H13.56L14.56,7H9.44Z\" />\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_local_government_office.xml",
    "content": "<!-- drawable/domain.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M18,15H16V17H18M18,11H16V13H18M20,19H12V17H14V15H12V13H14V11H12V9H20M10,7H8V5H10M10,11H8V9H10M10,15H8V13H10M10,19H8V17H10M6,7H4V5H6M6,11H4V9H6M6,15H4V13H6M6,19H4V17H6M12,7V3H2V21H22V7H12Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_locksmith.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M22,18V22H18V19H15V16H12L9.74,13.74C9.19,13.91 8.61,14 8,14A6,6 0 0,1 2,8A6,6 0 0,1 8,2A6,6 0 0,1 14,8C14,8.61 13.91,9.19 13.74,9.74L22,18M7,5A2,2 0 0,0 5,7A2,2 0 0,0 7,9A2,2 0 0,0 9,7A2,2 0 0,0 7,5Z\"/>\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_lodging.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M19,7H11V14H3V5H1V20H3V17H21V20H23V11A4,4 0 0,0 19,7M7,13A3,3 0 0,0 10,10A3,3 0 0,0 7,7A3,3 0 0,0 4,10A3,3 0 0,0 7,13Z\"/>\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_meal_takeaway.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000000\"\n        android:pathData=\"M22.1275,6.9447V4H20.369L19.17,4.3995L17.9708,4H17.4276L15.7895,4.4094L14.1514,4H13.608L12.409,4.3995L11.2098,4H10.2961V6.9379L10.1753,8.2253H8.1832V5.4786C8.1832,4.6631 7.5197,4 6.7044,4H1V6.5353H5.6479V8.2253H3.1127V10.7606H3.9916L4.8368,20.9017H23L22.1275,6.9447ZM1.8452,5.69V4.8448H6.7048C7.0542,4.8448 7.3386,5.129 7.3386,5.4786V8.2253H6.4934V5.69H1.8452ZM9.0626,20.0565H5.6147L4.8399,10.7606H9.8372L9.0626,20.0565ZM10.7189,9.9154H3.9579V9.0706H10.7189V9.9154ZM19.6184,20.0567H11.6009L12.3755,10.7608H13.254V8.2253H11.0243L11.1035,7.3801H20.4102L19.6184,20.0567ZM20.4377,6.5353H11.1416V4.8675L12.4094,5.2903L13.7453,4.8448H14.0473L15.7895,5.2804L17.5315,4.8448H17.8335L19.17,5.2903L20.4377,4.8675V6.5353Z\"/>\n</vector>\n"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_mosque.xml",
    "content": "<!-- drawable/islam.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M12.3,2C12.2,2 12.1,2 12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22C15,22 16.7,21 18.5,19.5C13,21 8,17 8,12C8,7 13,3 18.5,4.5C16.86,2.86 14.62,1.96 12.3,2M16.8,6.2L15.3,9.7L11.6,10L14.5,12.5L13.6,16L16.8,14L20,16L19,12.5L22,10L18.3,9.7L16.8,6.2Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_movie_rental.xml",
    "content": "<!-- drawable/filmstrip.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M18,9H16V7H18M18,13H16V11H18M18,17H16V15H18M8,9H6V7H8M8,13H6V11H8M8,17H6V15H8M18,3V5H16V3H8V5H6V3H4V21H6V19H8V21H16V19H18V21H20V3H18Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_movie_theater.xml",
    "content": "<!-- drawable/video_vintage.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M18,14.5V11A1,1 0 0,0 17,10H16C18.24,8.39 18.76,5.27 17.15,3C15.54,0.78 12.42,0.26 10.17,1.87C9.5,2.35 8.96,3 8.6,3.73C6.25,2.28 3.17,3 1.72,5.37C0.28,7.72 1,10.8 3.36,12.25C3.57,12.37 3.78,12.5 4,12.58V21A1,1 0 0,0 5,22H17A1,1 0 0,0 18,21V17.5L22,21.5V10.5L18,14.5M13,4A2,2 0 0,1 15,6A2,2 0 0,1 13,8A2,2 0 0,1 11,6A2,2 0 0,1 13,4M6,6A2,2 0 0,1 8,8A2,2 0 0,1 6,10A2,2 0 0,1 4,8A2,2 0 0,1 6,6Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_moving_company.xml",
    "content": "<!-- drawable/truck_delivery.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M3,4A2,2 0 0,0 1,6V17H3A3,3 0 0,0 6,20A3,3 0 0,0 9,17H15A3,3 0 0,0 18,20A3,3 0 0,0 21,17H23V12L20,8H17V4M10,6L14,10L10,14V11H4V9H10M17,9.5H19.5L21.47,12H17M6,15.5A1.5,1.5 0 0,1 7.5,17A1.5,1.5 0 0,1 6,18.5A1.5,1.5 0 0,1 4.5,17A1.5,1.5 0 0,1 6,15.5M18,15.5A1.5,1.5 0 0,1 19.5,17A1.5,1.5 0 0,1 18,18.5A1.5,1.5 0 0,1 16.5,17A1.5,1.5 0 0,1 18,15.5Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_museum.xml",
    "content": "<!-- drawable/bank.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M11.5,1L2,6V8H21V6M16,10V17H19V10M2,22H21V19H2M10,10V17H13V10M4,10V17H7V10H4Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_night_club.xml",
    "content": "<!-- drawable/glass_cocktail.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M7.5,7L5.5,5H18.5L16.5,7M11,13V19H6V21H18V19H13V13L21,5V3H3V5L11,13Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_painter.xml",
    "content": "<!-- drawable/format_paint.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M18,4V3A1,1 0 0,0 17,2H5A1,1 0 0,0 4,3V7A1,1 0 0,0 5,8H17A1,1 0 0,0 18,7V6H19V10H9V21A1,1 0 0,0 10,22H12A1,1 0 0,0 13,21V12H21V4H18Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_park.xml",
    "content": "<!-- drawable/nature_people.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M4.5,11A1.5,1.5 0 0,0 6,9.5A1.5,1.5 0 0,0 4.5,8A1.5,1.5 0 0,0 3,9.5A1.5,1.5 0 0,0 4.5,11M22.17,9.17C22.17,5.3 19.04,2.17 15.17,2.17A7,7 0 0,0 8.17,9.17C8.17,12.64 10.69,15.5 14,16.06V20H6V17H7V13A1,1 0 0,0 6,12H3A1,1 0 0,0 2,13V17H3V22H19V20H16V16.12C19.47,15.71 22.17,12.76 22.17,9.17Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_parking.xml",
    "content": "<!-- drawable/parking.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M13.2,11H10V7H13.2A2,2 0 0,1 15.2,9A2,2 0 0,1 13.2,11M13,3H6V21H10V15H13A6,6 0 0,0 19,9C19,5.68 16.31,3 13,3Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_pet_store.xml",
    "content": "<!-- drawable/paw.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M8.35,3C9.53,2.83 10.78,4.12 11.14,5.9C11.5,7.67 10.85,9.25 9.67,9.43C8.5,9.61 7.24,8.32 6.87,6.54C6.5,4.77 7.17,3.19 8.35,3M15.5,3C16.69,3.19 17.35,4.77 17,6.54C16.62,8.32 15.37,9.61 14.19,9.43C13,9.25 12.35,7.67 12.72,5.9C13.08,4.12 14.33,2.83 15.5,3M3,7.6C4.14,7.11 5.69,8 6.5,9.55C7.26,11.13 7,12.79 5.87,13.28C4.74,13.77 3.2,12.89 2.41,11.32C1.62,9.75 1.9,8.08 3,7.6M21,7.6C22.1,8.08 22.38,9.75 21.59,11.32C20.8,12.89 19.26,13.77 18.13,13.28C17,12.79 16.74,11.13 17.5,9.55C18.31,8 19.86,7.11 21,7.6M19.33,18.38C19.37,19.32 18.65,20.36 17.79,20.75C16,21.57 13.88,19.87 11.89,19.87C9.9,19.87 7.76,21.64 6,20.75C5,20.26 4.31,18.96 4.44,17.88C4.62,16.39 6.41,15.59 7.47,14.5C8.88,13.09 9.88,10.44 11.89,10.44C13.89,10.44 14.95,13.05 16.3,14.5C17.41,15.72 19.26,16.75 19.33,18.38Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_pharmacy.xml",
    "content": "<!-- drawable/pharmacy.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M16,14H13V17H11V14H8V12H11V9H13V12H16M21,5H18.35L19.5,1.85L17.15,1L15.69,5H3V7L5,13L3,19V21H21V19L19,13L21,7V5Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_physiotherapist.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M4,12V3H2V12A5,5 0 0,0 7,17H13V15H7A3,3 0 0,1 4,12M22.83,17.24C22.45,16.5 21.54,16.27 20.8,16.61L19.71,17.11L16.3,10.13C15.96,9.45 15.27,9 14.5,9H11V3H5V11A3,3 0 0,0 8,14H15L18.41,21L22.13,19.3C22.9,18.94 23.23,18 22.83,17.24Z\"/>\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_place_of_worship.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000000\"\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M11.1102,1.0004C11.1707,1.0031 11.2228,1.0329 11.2736,1.0777C11.3547,1.1494 11.4541,1.3057 11.4541,1.628V18.7448C11.4541,19.1093 11.1212,19.6399 10.6374,19.957C9.3109,20.5816 7.998,19.7026 7.2157,18.6159C6.6768,17.8404 6.3311,16.6757 6.8203,14.7299C7.1862,13.7159 7.4051,12.2739 8.0239,9.9328C8.0239,9.927 8.0239,9.9212 8.0239,9.9157C8.3159,8.6252 8.5954,7.9515 8.8062,7.6031C9.017,7.2547 9.1245,7.2196 9.365,7.0271C9.6054,6.8346 9.8993,6.4636 10.027,5.8751C10.1546,5.2865 10.2075,4.428 10.2075,2.9349C10.2075,1.5855 10.7315,1.1032 10.9899,1.0263C11.0383,1.012 11.0739,0.9987 11.1102,1.0004Z\"/>\n    <path\n        android:fillColor=\"#000000\"\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M12.8898,1.0003C12.9261,0.9976 12.9704,1.0116 13.0188,1.0262C13.2771,1.1031 13.8011,1.5854 13.8011,2.9348C13.8011,4.428 13.8539,5.2864 13.9817,5.875C14.1093,6.4636 14.4032,6.8345 14.6436,7.027C14.884,7.2195 14.9916,7.2546 15.2024,7.603C15.4133,7.9514 15.6927,8.6251 15.9848,9.9156C15.9848,9.9214 15.9848,9.9272 15.9848,9.9327C16.602,12.2683 16.824,13.7077 17.1884,14.7213C17.1884,14.724 17.1884,14.7276 17.1884,14.7298C17.6775,16.6755 17.3318,17.8402 16.7929,18.6157C15.9937,19.6168 14.519,20.6914 13.3627,19.9568C12.8788,19.6398 12.5545,19.1093 12.5545,18.7447V1.6279C12.5545,1.3056 12.6539,1.1493 12.7351,1.0777C12.7858,1.0329 12.8293,1.0032 12.8898,1.0003Z\"/>\n    <path\n        android:fillColor=\"#000000\"\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M5.4963,16.4494C5.504,17.6317 5.8342,18.5544 6.313,19.2434C6.9657,20.1827 7.8401,20.6684 8.4107,20.9456V22.4674H1.043L1,17.7733C2.4142,17.4313 3.4443,17.2007 4.2325,16.9652C4.7296,16.8167 5.1441,16.6584 5.4963,16.4494Z\"/>\n    <path\n        android:fillColor=\"#000000\"\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M18.5123,16.4494C18.8645,16.6584 19.279,16.8167 19.7761,16.9652C20.5643,17.2007 21.5858,17.4314 23,17.7733L22.957,22.4674H15.5979V20.9456C16.1686,20.6682 17.0439,20.1812 17.6956,19.2434C18.1744,18.5544 18.5047,17.6317 18.5123,16.4494Z\"/>\n</vector>\n"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_plumber.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M22.7,19L13.6,9.9C14.5,7.6 14,4.9 12.1,3C10.1,1 7.1,0.6 4.7,1.7L9,6L6,9L1.6,4.7C0.4,7.1 0.9,10.1 2.9,12.1C4.8,14 7.5,14.5 9.8,13.6L18.9,22.7C19.3,23.1 19.9,23.1 20.3,22.7L22.6,20.4C23.1,20 23.1,19.3 22.7,19Z\"/>\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_police.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M6,6.9L3.87,4.78L5.28,3.37L7.4,5.5L6,6.9M13,1V4H11V1H13M20.13,4.78L18,6.9L16.6,5.5L18.72,3.37L20.13,4.78M4.5,10.5V12.5H1.5V10.5H4.5M19.5,10.5H22.5V12.5H19.5V10.5M6,20H18A2,2 0 0,1 20,22H4A2,2 0 0,1 6,20M12,5A6,6 0 0,1 18,11V19H6V11A6,6 0 0,1 12,5Z\"/>\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_post_office.xml",
    "content": "<!-- drawable/email.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M20,8L12,13L4,8V6L12,11L20,6M20,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V6C22,4.89 21.1,4 20,4Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_real_estate_agency.xml",
    "content": "<!-- drawable/home_city.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M0,21V10L7.5,5L15,10V21H10V14H5V21H0M24,2V21H17V8.93L16,8.27V6H14V6.93L10,4.27V2H24M21,14H19V16H21V14M21,10H19V12H21V10M21,6H19V8H21V6Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_restaurant.xml",
    "content": "<!-- drawable/silverware_fork_knife.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M11,9H9V2H7V9H5V2H3V9C3,11.12 4.66,12.84 6.75,12.97V22H9.25V12.97C11.34,12.84 13,11.12 13,9V2H11V9M16,6V14H18.5V22H21V2C18.24,2 16,4.24 16,6Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_roofing_contractor.xml",
    "content": "<!-- drawable/store.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M12,18H6V14H12M21,14V12L20,7H4L3,12V14H4V20H14V14H18V20H20V14M20,4H4V6H20V4Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_rv_park.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000000\"\n        android:pathData=\"M7.2212,13.3836C5.8769,13.3836 4.7868,14.2556 4.7868,15.3311C4.7868,16.4066 5.8769,17.2787 7.2212,17.2787C8.5656,17.2787 9.6557,16.407 9.6557,15.3311C9.6557,14.2553 8.566,13.3836 7.2212,13.3836ZM7.2212,16.413C6.4743,16.413 5.8689,15.9287 5.8689,15.3311C5.8689,14.7336 6.4743,14.2492 7.2212,14.2492C7.9682,14.2492 8.5736,14.7336 8.5736,15.3311C8.5736,15.9287 7.9686,16.413 7.2212,16.413Z\"/>\n    <path\n        android:fillColor=\"#000000\"\n        android:pathData=\"M19.0877,12.9508V9.3804C19.0877,8.0657 17.7556,7 16.1127,7H3.9755C2.3322,7 1,8.0657 1,9.3804V12.9508C1,14.2654 2.3322,15.3311 3.9755,15.3311H4.2458C4.2458,14.0185 5.5809,12.9508 7.2212,12.9508C8.8616,12.9508 10.1963,14.0185 10.1963,15.3311H16.1123C17.7556,15.3311 19.0877,14.2654 19.0877,12.9508ZM6.4099,10.3541C6.4099,10.5933 6.1678,10.787 5.8693,10.787H3.7052C3.4062,10.787 3.1641,10.5933 3.1641,10.3541V9.2723C3.1641,9.0331 3.4062,8.8394 3.7052,8.8394H5.8693C6.1678,8.8394 6.4099,9.0331 6.4099,9.2723V10.3541ZM11.2788,10.3541C11.2788,10.5933 11.0367,10.787 10.7377,10.787H8.5736C8.2747,10.787 8.0326,10.5933 8.0326,10.3541V9.2723C8.0326,9.0331 8.2747,8.8394 8.5736,8.8394H10.7377C11.0367,8.8394 11.2788,9.0331 11.2788,9.2723V10.3541ZM16.2377,14.0327C16.2377,14.2718 15.9952,14.4655 15.6967,14.4655H13.5326C13.2336,14.4655 12.9915,14.2718 12.9915,14.0327V9.2723C12.9915,9.0331 13.2336,8.8394 13.5326,8.8394H15.6967C15.9952,8.8394 16.2377,9.0331 16.2377,9.2723V14.0327Z\"/>\n    <path\n        android:fillColor=\"#000000\"\n        android:pathData=\"M13.9385,11.1656C13.7145,11.1656 13.5326,11.3111 13.5326,11.4903V12.1936C13.5326,12.3728 13.7145,12.5179 13.9385,12.5179C14.1624,12.5179 14.3443,12.3728 14.3443,12.1936V11.4903C14.3443,11.3111 14.1629,11.1656 13.9385,11.1656Z\"/>\n    <path\n        android:fillColor=\"#000000\"\n        android:pathData=\"M22.5491,13.3836C22.3002,13.3836 22.0986,13.5449 22.0986,13.7443V14.6817H18.7075C18.4326,14.9451 18.097,15.1664 17.7168,15.3311H22.7293C22.8783,15.3311 23,15.2341 23,15.1146V13.7443C23,13.5449 22.7979,13.3836 22.5491,13.3836Z\"/>\n</vector>\n"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_school.xml",
    "content": "<!-- drawable/school.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M12,3L1,9L12,15L21,10.09V17H23V9M5,13.18V17.18L12,21L19,17.18V13.18L12,17L5,13.18Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_shoe_store.xml",
    "content": "<!-- drawable/shoe_formal.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M21.5,9V8H20.5L19.5,9H15L14,8H13L7,12H4A2,2 0 0,0 2,14V16H10L13,15H15V16H21.5V14C21.5,14 22,13 22,11.5C22,10 21.5,9 21.5,9Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_shopping_mall.xml",
    "content": "<!-- drawable/shopping.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M12,13A5,5 0 0,1 7,8H9A3,3 0 0,0 12,11A3,3 0 0,0 15,8H17A5,5 0 0,1 12,13M12,3A3,3 0 0,1 15,6H9A3,3 0 0,1 12,3M19,6H17A5,5 0 0,0 12,1A5,5 0 0,0 7,6H5C3.89,6 3,6.89 3,8V20A2,2 0 0,0 5,22H19A2,2 0 0,0 21,20V8C21,6.89 20.1,6 19,6Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_spa.xml",
    "content": "<!-- drawable/spa.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M15.5,9.63C15.31,6.84 14.18,4.12 12.06,2C9.92,4.14 8.74,6.86 8.5,9.63C9.79,10.31 10.97,11.19 12,12.26C13.03,11.2 14.21,10.32 15.5,9.63M12,15.45C9.85,12.17 6.18,10 2,10C2,20 11.32,21.89 12,22C12.68,21.88 22,20 22,10C17.82,10 14.15,12.17 12,15.45Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_stadium.xml",
    "content": "<!-- drawable/stadium.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M5,3H7L10,5L7,7V8.33C8.47,8.12 10.18,8 12,8C13.82,8 15.53,8.12 17,8.33V3H19L22,5L19,7V8.71C20.85,9.17 22,9.8 22,10.5C22,11.88 17.5,13 12,13C6.5,13 2,11.88 2,10.5C2,9.8 3.15,9.17 5,8.71V3M12,9.5C8.69,9.5 7,9.67 7,10.5C7,11.33 8.69,11.5 12,11.5C15.31,11.5 17,11.33 17,10.5C17,9.67 15.31,9.5 12,9.5M12,14.75C15.81,14.75 19.2,14.08 21.4,13.05L20,21H15V19A2,2 0 0,0 13,17H11A2,2 0 0,0 9,19V21H4L2.6,13.05C4.8,14.08 8.19,14.75 12,14.75Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_storage.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24\"\n        android:viewportWidth=\"24\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M2,10.96C1.5,10.68 1.35,10.07 1.63,9.59L3.13,7C3.24,6.8 3.41,6.66 3.6,6.58L11.43,2.18C11.59,2.06 11.79,2 12,2C12.21,2 12.41,2.06 12.57,2.18L20.47,6.62C20.66,6.72 20.82,6.88 20.91,7.08L22.36,9.6C22.64,10.08 22.47,10.69 22,10.96L21,11.54V16.5C21,16.88 20.79,17.21 20.47,17.38L12.57,21.82C12.41,21.94 12.21,22 12,22C11.79,22 11.59,21.94 11.43,21.82L3.53,17.38C3.21,17.21 3,16.88 3,16.5V10.96C2.7,11.13 2.32,11.14 2,10.96M12,4.15V4.15L12,10.85V10.85L17.96,7.5L12,4.15M5,15.91L11,19.29V12.58L5,9.21V15.91M19,15.91V12.69L14,15.59C13.67,15.77 13.3,15.76 13,15.6V19.29L19,15.91M13.85,13.36L20.13,9.73L19.55,8.72L13.27,12.35L13.85,13.36Z\"/>\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_store.xml",
    "content": "<!-- drawable/store.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M12,18H6V14H12M21,14V12L20,7H4L3,12V14H4V20H14V14H18V20H20V14M20,4H4V6H20V4Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_subway_station.xml",
    "content": "<!-- drawable/subway_variant.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M18,11H13V6H18M16.5,17A1.5,1.5 0 0,1 15,15.5A1.5,1.5 0 0,1 16.5,14A1.5,1.5 0 0,1 18,15.5A1.5,1.5 0 0,1 16.5,17M11,11H6V6H11M7.5,17A1.5,1.5 0 0,1 6,15.5A1.5,1.5 0 0,1 7.5,14A1.5,1.5 0 0,1 9,15.5A1.5,1.5 0 0,1 7.5,17M12,2C7.58,2 4,2.5 4,6V15.5A3.5,3.5 0 0,0 7.5,19L6,20.5V21H18V20.5L16.5,19A3.5,3.5 0 0,0 20,15.5V6C20,2.5 16.42,2 12,2Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_supermarket.xml",
    "content": "<!-- drawable/cart.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M17,18C15.89,18 15,18.89 15,20A2,2 0 0,0 17,22A2,2 0 0,0 19,20C19,18.89 18.1,18 17,18M1,2V4H3L6.6,11.59L5.24,14.04C5.09,14.32 5,14.65 5,15A2,2 0 0,0 7,17H19V15H7.42A0.25,0.25 0 0,1 7.17,14.75C7.17,14.7 7.18,14.66 7.2,14.63L8.1,13H15.55C16.3,13 16.96,12.58 17.3,11.97L20.88,5.5C20.95,5.34 21,5.17 21,5A1,1 0 0,0 20,4H5.21L4.27,2M7,18C5.89,18 5,18.89 5,20A2,2 0 0,0 7,22A2,2 0 0,0 9,20C9,18.89 8.1,18 7,18Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_synagogue.xml",
    "content": "<!-- drawable/judaism.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M12,2L9.1,7H3.3L6.3,12L3.3,17H9.1L12,22L14.9,17H20.7L17.7,12L20.7,7H14.9L12,2M12,5L13.2,7H10.8L12,5M8.2,8.5L7.1,10.5L5.9,8.5H8.2M10,8.5H14L16,12L14,15.5H10L8,12L10,8.5M18,8.5L16.8,10.5L15.7,8.5H18M7.1,13.5L8.2,15.5H6L7.1,13.5M16.9,13.5L18.1,15.5H15.8L16.9,13.5M13.3,17L12,19L10.8,17H13.3Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_taxi_stand.xml",
    "content": "<!-- drawable/taxi.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M5,11L6.5,6.5H17.5L19,11M17.5,16A1.5,1.5 0 0,1 16,14.5A1.5,1.5 0 0,1 17.5,13A1.5,1.5 0 0,1 19,14.5A1.5,1.5 0 0,1 17.5,16M6.5,16A1.5,1.5 0 0,1 5,14.5A1.5,1.5 0 0,1 6.5,13A1.5,1.5 0 0,1 8,14.5A1.5,1.5 0 0,1 6.5,16M18.92,6C18.72,5.42 18.16,5 17.5,5H15V3H9V5H6.5C5.84,5 5.28,5.42 5.08,6L3,12V20A1,1 0 0,0 4,21H5A1,1 0 0,0 6,20V19H18V20A1,1 0 0,0 19,21H20A1,1 0 0,0 21,20V12L18.92,6Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_train_station.xml",
    "content": "<!-- drawable/train.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M12,2C8,2 4,2.5 4,6V15.5A3.5,3.5 0 0,0 7.5,19L6,20.5V21H8.23L10.23,19H14L16,21H18V20.5L16.5,19A3.5,3.5 0 0,0 20,15.5V6C20,2.5 16.42,2 12,2M7.5,17A1.5,1.5 0 0,1 6,15.5A1.5,1.5 0 0,1 7.5,14A1.5,1.5 0 0,1 9,15.5A1.5,1.5 0 0,1 7.5,17M11,10H6V6H11V10M13,10V6H18V10H13M16.5,17A1.5,1.5 0 0,1 15,15.5A1.5,1.5 0 0,1 16.5,14A1.5,1.5 0 0,1 18,15.5A1.5,1.5 0 0,1 16.5,17Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_transit_station.xml",
    "content": "<!-- drawable/transit_transfer.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M16.5,15.5H22V17H16.5V18.75L14,16.25L16.5,13.75V15.5M19.5,19.75V18L22,20.5L19.5,23V21.25H14V19.75H19.5M9.5,5.5A2,2 0 0,1 7.5,3.5A2,2 0 0,1 9.5,1.5A2,2 0 0,1 11.5,3.5A2,2 0 0,1 9.5,5.5M5.75,8.9L4,9.65V13H2V8.3L7.25,6.15C7.5,6.05 7.75,6 8,6C8.7,6 9.35,6.35 9.7,6.95L10.65,8.55C11.55,10 13.15,11 15,11V13C12.8,13 10.85,12 9.55,10.4L8.95,13.4L11,15.45V23H9V17L6.85,15L5.1,23H3L5.75,8.9Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_travel_agency.xml",
    "content": "<!-- drawable/beach.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M15,18.54C17.13,18.21 19.5,18 22,18V22H5C5,21.35 8.2,19.86 13,18.9V12.4C12.16,12.65 11.45,13.21 11,13.95C10.39,12.93 9.27,12.25 8,12.25C6.73,12.25 5.61,12.93 5,13.95C5.03,10.37 8.5,7.43 13,7.04V7A1,1 0 0,1 14,6A1,1 0 0,1 15,7V7.04C19.5,7.43 22.96,10.37 23,13.95C22.39,12.93 21.27,12.25 20,12.25C18.73,12.25 17.61,12.93 17,13.95C16.55,13.21 15.84,12.65 15,12.39V18.54M7,2A5,5 0 0,1 2,7V2H7Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_veterinary_care.xml",
    "content": "<!-- drawable/dog_side.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M19,3L15,7L18,10L19,9L20,10L22,8L19,5V3M3,7L2,8L5,11V14L4,15V21H6V18L8,15H15V21H17V11L14,8L13,9H5L3,7Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_places_zoo.xml",
    "content": "<!-- drawable/elephant.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n        android:width=\"24dp\"\r\n        android:height=\"24dp\"\r\n        android:viewportHeight=\"24\"\r\n        android:viewportWidth=\"24\">\r\n    <path\r\n        android:fillColor=\"#000\"\r\n        android:pathData=\"M19.5,15.5A0.5,0.5 0 0,1 19,16A0.5,0.5 0 0,1 18.5,15.5V8.5C18.5,6.57 16.43,5 14.5,5H6A4,4 0 0,0 2,9V19H6V15H11V19H15V14.5A0.5,0.5 0 0,1 15.5,14A0.5,0.5 0 0,1 16,14.5V16A3,3 0 0,0 19,19A3,3 0 0,0 22,16V14H19.5V15.5Z\"/>\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/ic_refresh_black_24dp.xml",
    "content": "<!-- drawable/refresh.xml -->\r\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    android:height=\"24dp\"\r\n    android:width=\"24dp\"\r\n    android:viewportWidth=\"24\"\r\n    android:viewportHeight=\"24\">\r\n    <path android:fillColor=\"#000\" android:pathData=\"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z\" />\r\n</vector>"
  },
  {
    "path": "library/src/main/res/drawable/wrapper_places_powered_by_google.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/places_powered_by_google_light\" />\n</layer-list>"
  },
  {
    "path": "library/src/main/res/drawable-night/wrapper_places_powered_by_google.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/places_powered_by_google_dark\" />\n</layer-list>"
  },
  {
    "path": "library/src/main/res/layout/activity_place_picker.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:id=\"@+id/coordinator\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\">\n\n    <com.google.android.material.appbar.AppBarLayout\n        android:id=\"@+id/appBarLayout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:fitsSystemWindows=\"true\"\n        app:theme=\"@style/PingTheme.AppBarOverlay\">\n\n        <com.google.android.material.appbar.CollapsingToolbarLayout\n            android:id=\"@+id/collapsingToolbarLayout\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            app:contentScrim=\"?attr/colorPrimarySurface\"\n            app:layout_scrollFlags=\"scroll|exitUntilCollapsed|snap\"\n            app:titleEnabled=\"false\">\n\n            <androidx.constraintlayout.widget.ConstraintLayout\n                android:id=\"@+id/mapContainer\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:background=\"?colorSurface\"\n                android:fitsSystemWindows=\"true\"\n                app:layout_collapseMode=\"parallax\"\n                app:layout_collapseParallaxMultiplier=\"0.4\">\n\n                <FrameLayout\n                    android:id=\"@+id/frameMap\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"0dp\"\n                    android:layout_marginBottom=\"@dimen/selector_margin\"\n                    app:layout_constraintBottom_toTopOf=\"@id/ivMarkerSelect\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"parent\">\n\n                    <fragment\n                        android:id=\"@+id/map\"\n                        android:name=\"com.google.android.gms.maps.SupportMapFragment\"\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"match_parent\" />\n\n                    <ImageView\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_gravity=\"center\"\n                        app:srcCompat=\"@drawable/ic_map_marker_select_red_48dp\"\n                        tools:ignore=\"ContentDescription\" />\n\n                </FrameLayout>\n\n                <com.google.android.material.floatingactionbutton.FloatingActionButton\n                    android:id=\"@+id/btnMyLocation\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginEnd=\"@dimen/default_margin\"\n                    android:layout_marginBottom=\"@dimen/default_margin\"\n                    app:backgroundTint=\"?colorSurface\"\n                    app:fabCustomSize=\"@dimen/button_my_location_size\"\n                    app:layout_constraintBottom_toBottomOf=\"@id/frameMap\"\n                    app:layout_constraintEnd_toEndOf=\"@id/frameMap\"\n                    app:rippleColor=\"?colorOnSurface\"\n                    app:srcCompat=\"@drawable/ic_crosshairs_gps_black_24dp\"\n                    app:tint=\"?colorOnSurface\" />\n\n                <com.google.android.material.floatingactionbutton.FloatingActionButton\n                    android:id=\"@+id/btnRefreshLocation\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginEnd=\"@dimen/default_margin\"\n                    android:layout_marginBottom=\"@dimen/default_margin\"\n                    app:backgroundTint=\"?colorSurface\"\n                    app:fabCustomSize=\"@dimen/button_my_location_size\"\n                    app:layout_constraintBottom_toTopOf=\"@id/btnMyLocation\"\n                    app:layout_constraintEnd_toEndOf=\"@id/frameMap\"\n                    app:rippleColor=\"?colorOnSurface\"\n                    app:srcCompat=\"@drawable/ic_refresh_black_24dp\"\n                    app:tint=\"?colorOnSurface\" />\n\n                <ImageView\n                    android:id=\"@+id/ivMarkerSelect\"\n                    style=\"@style/PingIcon.Secondary\"\n                    android:layout_marginStart=\"@dimen/guide_start_margin\"\n                    android:layout_marginBottom=\"@dimen/selector_margin\"\n                    android:contentDescription=\"@string/picker_select_this\"\n                    app:layout_constraintBottom_toBottomOf=\"parent\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:srcCompat=\"@drawable/ic_map_marker_black_24dp\" />\n\n                <TextView\n                    android:id=\"@+id/tvLocationSelect\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginStart=\"@dimen/guide_content_margin\"\n                    android:text=\"@string/picker_select_this\"\n                    android:textAppearance=\"@style/TextAppearance.MaterialComponents.Subtitle1\"\n                    android:textColor=\"?colorSecondary\"\n                    app:layout_constraintBottom_toBottomOf=\"@id/ivMarkerSelect\"\n                    app:layout_constraintStart_toStartOf=\"parent\"\n                    app:layout_constraintTop_toTopOf=\"@id/ivMarkerSelect\" />\n\n                <androidx.core.widget.ContentLoadingProgressBar\n                    android:id=\"@+id/pbLoading\"\n                    style=\"@style/Widget.AppCompat.ProgressBar\"\n                    android:layout_width=\"@dimen/icon_size_small\"\n                    android:layout_height=\"@dimen/icon_size_small\"\n                    android:indeterminate=\"true\"\n                    android:visibility=\"visible\"\n                    app:layout_constraintBottom_toBottomOf=\"@id/ivMarkerSelect\"\n                    app:layout_constraintEnd_toStartOf=\"@id/btnMyLocation\"\n                    app:layout_constraintStart_toEndOf=\"@id/btnMyLocation\"\n                    app:layout_constraintTop_toTopOf=\"@id/ivMarkerSelect\" />\n\n            </androidx.constraintlayout.widget.ConstraintLayout>\n\n            <androidx.appcompat.widget.Toolbar\n                android:id=\"@+id/toolbar\"\n                style=\"@style/PingToolbarStyle\"\n                android:theme=\"@style/PingTheme.AppBarOverlay\"\n                app:layout_collapseMode=\"pin\"\n                app:title=\"@string/picker_title\" />\n\n            <com.google.android.material.card.MaterialCardView\n                android:id=\"@+id/cardSearch\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"@dimen/card_search_height\"\n                android:layout_marginStart=\"@dimen/card_search_margin_horizontal\"\n                android:layout_marginTop=\"@dimen/card_search_margin_top\"\n                android:layout_marginEnd=\"@dimen/card_search_margin_horizontal\"\n                app:cardElevation=\"@dimen/material_elevation_app_bar\"\n                app:layout_collapseMode=\"parallax\"\n                app:layout_collapseParallaxMultiplier=\"0.7\"\n                app:rippleColor=\"@android:color/transparent\">\n\n                <ImageView\n                    style=\"@style/PingIcon.OnSurface\"\n                    android:layout_gravity=\"center_vertical\"\n                    android:layout_marginStart=\"@dimen/card_search_content_start_margin\"\n                    android:contentDescription=\"@android:string/search_go\"\n                    app:srcCompat=\"@drawable/ic_magnify_black_24dp\" />\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_gravity=\"center_vertical\"\n                    android:layout_marginStart=\"@dimen/card_search_content_margin\"\n                    android:text=\"@android:string/search_go\"\n                    android:textAppearance=\"@style/TextAppearance.MaterialComponents.Body1\"\n                    android:textColor=\"@color/material_on_surface_emphasis_medium\" />\n\n            </com.google.android.material.card.MaterialCardView>\n\n        </com.google.android.material.appbar.CollapsingToolbarLayout>\n\n    </com.google.android.material.appbar.AppBarLayout>\n\n    <androidx.core.widget.NestedScrollView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        app:layout_behavior=\"@string/appbar_scrolling_view_behavior\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:orientation=\"vertical\">\n\n            <TextView\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginStart=\"@dimen/guide_start_margin\"\n                android:layout_marginTop=\"@dimen/default_margin\"\n                android:layout_marginBottom=\"8dp\"\n                android:text=\"@string/picker_or_select_nearby\"\n                android:textAppearance=\"@style/TextAppearance.MaterialComponents.Body2\"\n                android:textColor=\"?android:textColorSecondary\" />\n\n            <androidx.recyclerview.widget.RecyclerView\n                android:id=\"@+id/rvNearbyPlaces\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                app:layout_behavior=\"@string/appbar_scrolling_view_behavior\"\n                tools:listitem=\"@layout/item_place\" />\n\n        </LinearLayout>\n    </androidx.core.widget.NestedScrollView>\n\n</androidx.coordinatorlayout.widget.CoordinatorLayout>"
  },
  {
    "path": "library/src/main/res/layout/fragment_dialog_place_confirm.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:paddingStart=\"@dimen/dialog_margin\"\n    android:paddingEnd=\"@dimen/dialog_margin\">\n\n    <TextView\n        android:id=\"@+id/tvPlaceName\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/default_margin\"\n        android:ellipsize=\"end\"\n        android:maxLines=\"1\"\n        android:textAppearance=\"@style/TextAppearance.MaterialComponents.Body2\"\n        android:textColor=\"?android:textColorPrimary\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        tools:text=\"Eiffel Tower\" />\n\n    <TextView\n        android:id=\"@+id/tvPlaceAddress\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"4dp\"\n        android:layout_marginBottom=\"@dimen/default_margin\"\n        android:ellipsize=\"end\"\n        android:maxLines=\"2\"\n        android:textAppearance=\"@style/TextAppearance.MaterialComponents.Body2\"\n        android:textColor=\"?android:textColorSecondary\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/tvPlaceName\"\n        tools:text=\"Champ de Mars, Avenue Anatole France, Paris, France\" />\n\n    <LinearLayout\n        android:id=\"@+id/llPlaceImages\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/default_margin\"\n        android:orientation=\"horizontal\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/tvPlaceAddress\">\n\n        <ImageView\n            android:id=\"@+id/ivPlacePhoto\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"@dimen/place_confirm_images_height\"\n            android:layout_weight=\"0.65\"\n            android:contentDescription=\"@string/description_place_image\"\n            android:scaleType=\"centerCrop\"\n            android:visibility=\"gone\"\n            tools:srcCompat=\"@tools:sample/backgrounds/scenic[11]\"\n            tools:visibility=\"visible\" />\n\n        <ImageView\n            android:id=\"@+id/ivPlaceMap\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"@dimen/place_confirm_images_height\"\n            android:layout_weight=\"0.35\"\n            android:contentDescription=\"@string/description_place_map\"\n            android:scaleType=\"centerCrop\"\n            android:visibility=\"gone\"\n            tools:srcCompat=\"@tools:sample/backgrounds/scenic[4]\"\n            tools:visibility=\"visible\" />\n\n    </LinearLayout>\n\n</androidx.constraintlayout.widget.ConstraintLayout>"
  },
  {
    "path": "library/src/main/res/layout/item_place.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:id=\"@+id/root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:background=\"?selectableItemBackground\">\n\n    <androidx.constraintlayout.widget.Guideline\n        android:id=\"@+id/gdMarginStart\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        app:layout_constraintGuide_begin=\"@dimen/guide_start_margin\" />\n\n    <androidx.constraintlayout.widget.Guideline\n        android:id=\"@+id/gdContent\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        app:layout_constraintGuide_begin=\"@dimen/guide_content_margin\" />\n\n    <androidx.constraintlayout.widget.Guideline\n        android:id=\"@+id/gdMarginEnd\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        app:layout_constraintGuide_end=\"@dimen/guide_end_margin\" />\n\n\n    <ImageView\n        android:id=\"@+id/ivPlaceType\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/tvPlaceAddress\"\n        app:layout_constraintStart_toStartOf=\"@id/gdMarginStart\"\n        app:layout_constraintTop_toTopOf=\"@+id/tvPlaceName\"\n        app:srcCompat=\"@drawable/ic_map_marker_black_24dp\"\n        tools:ignore=\"ContentDescription\"\n        app:tint=\"?attr/colorPrimary\" />\n\n    <TextView\n        android:id=\"@+id/tvPlaceName\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"@dimen/default_margin\"\n        android:ellipsize=\"end\"\n        android:maxLines=\"1\"\n        android:textAppearance=\"@style/TextAppearance.MaterialComponents.Body1\"\n        app:layout_constraintEnd_toEndOf=\"@id/gdMarginEnd\"\n        app:layout_constraintStart_toStartOf=\"@id/gdContent\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        tools:text=\"Eiffel Tower\" />\n\n    <TextView\n        android:id=\"@+id/tvPlaceAddress\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginBottom=\"@dimen/default_margin\"\n        android:ellipsize=\"end\"\n        android:maxLines=\"1\"\n        android:textAppearance=\"@style/TextAppearance.MaterialComponents.Body2\"\n        android:textColor=\"?android:textColorSecondary\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"@id/gdMarginEnd\"\n        app:layout_constraintStart_toStartOf=\"@+id/tvPlaceName\"\n        app:layout_constraintTop_toBottomOf=\"@+id/tvPlaceName\"\n        tools:text=\"Champ de Mars, Avenue Anatole France, Paris, France\" />\n</androidx.constraintlayout.widget.ConstraintLayout>"
  },
  {
    "path": "library/src/main/res/layout/places_autocomplete_impl_fragment_overlay.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:paddingTop=\"8dp\">\n\n    <com.google.android.material.card.MaterialCardView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"@dimen/places_autocomplete_overlay_padding\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layoutDirection=\"locale\"\n            android:orientation=\"vertical\"\n            android:textDirection=\"locale\">\n\n            <LinearLayout\n                android:id=\"@+id/places_autocomplete_search_bar_container\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"@dimen/card_search_height\"\n                android:orientation=\"horizontal\">\n\n                <ImageButton\n                    android:id=\"@+id/places_autocomplete_back_button\"\n                    style=\"@style/PingIcon.OnSurface\"\n                    android:layout_gravity=\"center_vertical\"\n                    android:layout_marginStart=\"@dimen/card_search_content_start_margin\"\n                    android:layout_marginEnd=\"20dp\"\n                    android:background=\"?attr/selectableItemBackgroundBorderless\"\n                    android:contentDescription=\"@string/places_cancel\"\n                    app:srcCompat=\"@drawable/ic_arrow_back_black_24dp\" />\n\n                <EditText\n                    android:id=\"@+id/places_autocomplete_search_bar\"\n                    android:layout_width=\"0dp\"\n                    android:layout_height=\"match_parent\"\n                    android:layout_weight=\"1\"\n                    android:background=\"@android:color/transparent\"\n                    android:hint=\"@string/places_autocomplete_search_hint\"\n                    android:imeOptions=\"flagNoExtractUi|actionSearch\"\n                    android:inputType=\"textNoSuggestions\"\n                    android:lines=\"1\"\n                    android:maxLines=\"1\"\n                    android:singleLine=\"true\"\n                    android:textAppearance=\"@style/TextAppearance.MaterialComponents.Body1\"\n                    android:textColor=\"@color/material_on_surface_emphasis_medium\" />\n\n                <ImageButton\n                    android:id=\"@+id/places_autocomplete_clear_button\"\n                    style=\"@style/PingIcon.OnSurface\"\n                    android:layout_gravity=\"center_vertical\"\n                    android:layout_marginEnd=\"16dp\"\n                    android:background=\"?attr/selectableItemBackgroundBorderless\"\n                    android:contentDescription=\"@string/places_autocomplete_clear_button\"\n                    android:padding=\"@dimen/places_autocomplete_search_bar_button_padding\"\n                    app:srcCompat=\"@drawable/ic_close_black_24dp\" />\n\n            </LinearLayout>\n\n            <!-- Separator line below the search bar -->\n            <View\n                android:id=\"@+id/places_autocomplete_search_bar_separator\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"1dp\"\n                android:layout_marginTop=\"2dp\"\n                android:layout_marginBottom=\"1dp\"\n                android:background=\"?colorSecondary\" />\n\n            <androidx.recyclerview.widget.RecyclerView\n                android:id=\"@+id/places_autocomplete_list\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"0dp\"\n                android:layout_marginStart=\"16dp\"\n                android:layout_weight=\"1\"\n                tools:listitem=\"@layout/places_autocomplete_item_prediction\" />\n\n            <!-- Error handling -->\n\n            <include layout=\"@layout/places_autocomplete_impl_error\" />\n\n            <!-- Powered by Google -->\n\n            <View\n                android:id=\"@+id/places_autocomplete_powered_by_google_separator\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"1dp\"\n                android:background=\"@color/places_autocomplete_separator\" />\n\n            <FrameLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\">\n\n                <ProgressBar\n                    android:id=\"@+id/places_autocomplete_progress\"\n                    style=\"@style/Widget.AppCompat.ProgressBar\"\n                    android:layout_width=\"@dimen/places_autocomplete_progress_size\"\n                    android:layout_height=\"@dimen/places_autocomplete_progress_size\"\n                    android:layout_gravity=\"center_vertical\"\n                    android:layout_marginStart=\"@dimen/places_autocomplete_progress_horizontal_margin\"\n                    android:indeterminate=\"true\"\n                    android:indeterminateTint=\"?colorSecondary\"\n                    android:indeterminateTintMode=\"src_atop\"\n                    android:padding=\"4dp\"\n                    tools:targetApi=\"lollipop\" />\n\n                <ImageView\n                    android:id=\"@+id/places_autocomplete_powered_by_google\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"@dimen/places_autocomplete_powered_by_google_height\"\n                    android:layout_gravity=\"center\"\n                    android:contentDescription=\"@string/places_powered_by_google\"\n                    android:scaleType=\"center\"\n                    android:src=\"@drawable/wrapper_places_powered_by_google\" />\n\n            </FrameLayout>\n\n        </LinearLayout>\n\n    </com.google.android.material.card.MaterialCardView>\n\n</FrameLayout>\n"
  },
  {
    "path": "library/src/main/res/menu/menu_place_picker.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <item\n        android:id=\"@+id/action_search\"\n        android:icon=\"@drawable/ic_magnify_toolbar_menu_24dp\"\n        android:title=\"@android:string/search_go\"\n        app:showAsAction=\"always\" />\n\n</menu>"
  },
  {
    "path": "library/src/main/res/raw/maps_night_style.json",
    "content": "[\n  {\n    \"elementType\": \"geometry\",\n    \"stylers\": [\n      {\n        \"color\": \"#242f3e\"\n      }\n    ]\n  },\n  {\n    \"elementType\": \"labels.text.fill\",\n    \"stylers\": [\n      {\n        \"color\": \"#746855\"\n      }\n    ]\n  },\n  {\n    \"elementType\": \"labels.text.stroke\",\n    \"stylers\": [\n      {\n        \"color\": \"#242f3e\"\n      }\n    ]\n  },\n  {\n    \"featureType\": \"administrative.locality\",\n    \"elementType\": \"labels.text.fill\",\n    \"stylers\": [\n      {\n        \"color\": \"#d59563\"\n      }\n    ]\n  },\n  {\n    \"featureType\": \"poi\",\n    \"elementType\": \"labels.text.fill\",\n    \"stylers\": [\n      {\n        \"color\": \"#d59563\"\n      }\n    ]\n  },\n  {\n    \"featureType\": \"poi.park\",\n    \"elementType\": \"geometry\",\n    \"stylers\": [\n      {\n        \"color\": \"#263c3f\"\n      }\n    ]\n  },\n  {\n    \"featureType\": \"poi.park\",\n    \"elementType\": \"labels.text.fill\",\n    \"stylers\": [\n      {\n        \"color\": \"#6b9a76\"\n      }\n    ]\n  },\n  {\n    \"featureType\": \"road\",\n    \"elementType\": \"geometry\",\n    \"stylers\": [\n      {\n        \"color\": \"#38414e\"\n      }\n    ]\n  },\n  {\n    \"featureType\": \"road\",\n    \"elementType\": \"geometry.stroke\",\n    \"stylers\": [\n      {\n        \"color\": \"#212a37\"\n      }\n    ]\n  },\n  {\n    \"featureType\": \"road\",\n    \"elementType\": \"labels.text.fill\",\n    \"stylers\": [\n      {\n        \"color\": \"#9ca5b3\"\n      }\n    ]\n  },\n  {\n    \"featureType\": \"road.highway\",\n    \"elementType\": \"geometry\",\n    \"stylers\": [\n      {\n        \"color\": \"#746855\"\n      }\n    ]\n  },\n  {\n    \"featureType\": \"road.highway\",\n    \"elementType\": \"geometry.stroke\",\n    \"stylers\": [\n      {\n        \"color\": \"#1f2835\"\n      }\n    ]\n  },\n  {\n    \"featureType\": \"road.highway\",\n    \"elementType\": \"labels.text.fill\",\n    \"stylers\": [\n      {\n        \"color\": \"#f3d19c\"\n      }\n    ]\n  },\n  {\n    \"featureType\": \"transit\",\n    \"elementType\": \"geometry\",\n    \"stylers\": [\n      {\n        \"color\": \"#2f3948\"\n      }\n    ]\n  },\n  {\n    \"featureType\": \"transit.station\",\n    \"elementType\": \"labels.text.fill\",\n    \"stylers\": [\n      {\n        \"color\": \"#d59563\"\n      }\n    ]\n  },\n  {\n    \"featureType\": \"water\",\n    \"elementType\": \"geometry\",\n    \"stylers\": [\n      {\n        \"color\": \"#17263c\"\n      }\n    ]\n  },\n  {\n    \"featureType\": \"water\",\n    \"elementType\": \"labels.text.fill\",\n    \"stylers\": [\n      {\n        \"color\": \"#515c6d\"\n      }\n    ]\n  },\n  {\n    \"featureType\": \"water\",\n    \"elementType\": \"labels.text.stroke\",\n    \"stylers\": [\n      {\n        \"color\": \"#17263c\"\n      }\n    ]\n  }\n]"
  },
  {
    "path": "library/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <color name=\"colorPrimary\">@color/material_bluegrey500</color>\n    <color name=\"colorPrimaryDark\">@color/material_bluegrey800</color>\n    <color name=\"colorOnPrimary\">@color/material_white</color>\n\n    <color name=\"colorSecondary\">@color/material_pink500</color>\n    <color name=\"colorSecondaryDark\">@color/material_pink800</color>\n    <color name=\"colorOnSecondary\">@color/material_white</color>\n\n    <color name=\"colorBackground\">@color/material_grey200</color>\n    <color name=\"colorOnBackground\">@color/material_black</color>\n\n    <color name=\"colorSurface\">@color/material_white</color>\n    <color name=\"colorOnSurface\">@color/material_black</color>\n\n    <color name=\"textColorPrimary\">@color/material_on_surface_emphasis_high_type</color>\n    <color name=\"textColorSecondary\">@color/material_on_surface_emphasis_medium</color>\n\n    <color name=\"colorMarker\">@color/material_red400</color>\n    <color name=\"colorMarkerInnerIcon\">@color/material_white</color>\n\n    <!-- Do not change -->\n    <color name=\"places_autocomplete_prediction_primary_text\">@color/textColorPrimary</color>\n    <color name=\"places_autocomplete_prediction_primary_text_highlight\">@color/colorSecondary</color>\n    <color name=\"places_autocomplete_prediction_secondary_text\">@color/textColorSecondary</color>\n    <color name=\"places_autocomplete_progress_tint\">@color/colorSecondary</color>\n    <color name=\"places_autocomplete_error_button\">@color/colorPrimary</color>\n\n</resources>\n"
  },
  {
    "path": "library/src/main/res/values/config.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <!--\n        Use /nearbysearch from Places Web API instead of findCurrentPlace()\n        from Places for Android API\n        - findCurrentPlace(): 0.030 USD per each (30.00 USD per 1000)\n        - /nearbysearch:      0.040 USD per each (40.00 USD per 1000)\n    -->\n    <bool name=\"enable_nearby_search\">false</bool>\n\n    <!-- 0.002 USD per each (2.00 USD per 1000) -->\n    <bool name=\"show_confirmation_photo\">true</bool>\n\n    <!-- 0.007 USD per each (7.00 USD per 1000) -->\n    <!-- Must enable Maps Static API in the key -->\n    <bool name=\"show_confirmation_map\">true</bool>\n\n    <!-- The zoom level that is initially applied to the map -->\n    <integer name=\"default_zoom\">17</integer>\n\n    <!-- Radius in meters from the map center from\n        where to bias the autocomplete search results -->\n    <integer name=\"autocomplete_search_bias_radius\">5000</integer>\n\n    <!-- If true, the map will automatically center (pan) to\n        the selected marker -->\n    <bool name=\"auto_center_on_marker_click\">false</bool>\n\n    <!-- Do not change this one -->\n    <bool name=\"show_card_search\">true</bool>\n\n</resources>\n"
  },
  {
    "path": "library/src/main/res/values/dimens.xml",
    "content": "<resources>\n\n    <dimen name=\"icon_size_small\">24dp</dimen>\n    <dimen name=\"icon_size_medium\">32dp</dimen>\n    <dimen name=\"button_my_location_size\">48dp</dimen>\n    <dimen name=\"place_confirm_images_height\">140dp</dimen>\n\n    <!-- Do not change! -->\n    <dimen name=\"default_margin\">16dp</dimen>\n    <dimen name=\"guide_start_margin\">16dp</dimen>\n    <dimen name=\"guide_content_margin\">70dp</dimen>\n    <dimen name=\"guide_end_margin\">16dp</dimen>\n    <dimen name=\"selector_margin\">20dp</dimen>\n    <dimen name=\"card_search_height\">48dp</dimen>\n    <dimen name=\"card_search_margin_top\">@dimen/default_margin</dimen>\n    <dimen name=\"card_search_margin_horizontal\">8dp</dimen>\n    <dimen name=\"card_search_content_start_margin\">16dp</dimen>\n    <dimen name=\"card_search_content_margin\">60dp</dimen>\n    <dimen name=\"dialog_margin\">24dp</dimen>\n    <dimen name=\"marker_inner_icon_size\">10dp</dimen>\n\n</resources>\n"
  },
  {
    "path": "library/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\" translatable=\"false\">Ping Place Picker</string>\n\n    <string name=\"picker_title\">Select a location</string>\n    <string name=\"picker_select_this\">Select this location</string>\n    <string name=\"picker_or_select_nearby\">Or choose a nearby place</string>\n    <string name=\"picker_load_places_error\">\"Couldn't load nearby places…\"</string>\n    <string name=\"picker_load_this_place_error\">\"Couldn't find the selected place…\"</string>\n    <string name=\"picker_place_confirm\">Use this place?</string>\n    <string name=\"picker_place_confirm_cancel\">Change location</string>\n    <string name=\"picker_location_unavailable\">Location is unavailable</string>\n\n    <!-- Content descriptions -->\n    <string name=\"description_place_image\">A photo of the selected place</string>\n    <string name=\"description_place_map\">A map of the selected place</string>\n\n    <!-- Permissions -->\n    <string name=\"permission_fine_location_title\">Location Permission</string>\n    <string name=\"permission_fine_location_message\">We only need your location to help you find relevant nearby places.</string>\n\n</resources>\n"
  },
  {
    "path": "library/src/main/res/values/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"PingThemeBase\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">\n\n        <item name=\"windowActionBar\">false</item>\n        <item name=\"windowNoTitle\">true</item>\n        <item name=\"windowActionModeOverlay\">true</item>\n\n        <item name=\"android:windowBackground\">@color/colorBackground</item>\n        <item name=\"android:colorBackground\">@color/colorBackground</item>\n\n        <item name=\"colorPrimary\">@color/colorPrimary</item>\n        <item name=\"colorPrimaryDark\">@color/colorPrimaryDark</item>\n        <item name=\"colorPrimaryVariant\">@color/colorPrimaryDark</item>\n\n        <item name=\"colorSecondary\">@color/colorSecondary</item>\n        <item name=\"colorSecondaryVariant\">@color/colorSecondaryDark</item>\n        <item name=\"colorAccent\">@color/colorSecondary</item>\n\n        <item name=\"colorSurface\">@color/colorSurface</item>\n\n        <item name=\"colorOnPrimary\">@color/colorOnPrimary</item>\n        <item name=\"colorOnSecondary\">@color/colorOnSecondary</item>\n        <item name=\"colorOnSurface\">@color/colorOnSurface</item>\n        <item name=\"colorOnBackground\">@color/colorOnBackground</item>\n\n        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>\n        <item name=\"android:textColorSecondary\">@color/textColorSecondary</item>\n    </style>\n\n    <style name=\"PingTheme\" parent=\"PingThemeBase\" />\n\n    <style name=\"PingTheme.AppBarOverlay\" parent=\"ThemeOverlay.MaterialComponents.Dark.ActionBar\">\n        <item name=\"colorControlNormal\">?attr/colorOnPrimarySurface</item>\n        <item name=\"actionMenuTextColor\">?attr/colorOnPrimarySurface</item>\n    </style>\n\n    <style name=\"PingTheme.NoStatus\">\n        <item name=\"android:windowTranslucentStatus\">true</item>\n    </style>\n\n    <style name=\"PingToolbarStyle\" parent=\"Widget.MaterialComponents.Toolbar.Surface\">\n        <!-- Toolbar should always be within an AppBarLayout which provides the background. -->\n        <item name=\"android:background\">@null</item>\n        <item name=\"android:layout_width\">match_parent</item>\n        <item name=\"android:layout_height\">?attr/actionBarSize</item>\n        <item name=\"titleTextColor\">?attr/colorOnPrimarySurface</item>\n    </style>\n\n    <style name=\"PingIcon\">\n        <item name=\"android:layout_width\">@dimen/icon_size_small</item>\n        <item name=\"android:layout_height\">@dimen/icon_size_small</item>\n        <item name=\"android:alpha\">0.54</item>\n    </style>\n\n    <style name=\"PingIcon.OnPrimary\">\n        <item name=\"android:tint\">?attr/colorOnPrimary</item>\n    </style>\n\n    <style name=\"PingIcon.OnSurface\">\n        <item name=\"android:tint\">?attr/colorOnSurface</item>\n    </style>\n\n    <style name=\"PingIcon.OnPrimarySurface\">\n        <item name=\"android:tint\">?attr/colorOnPrimarySurface</item>\n    </style>\n\n    <style name=\"PingIcon.Secondary\">\n        <item name=\"android:alpha\">1</item>\n        <item name=\"android:tint\">?attr/colorSecondary</item>\n    </style>\n\n    <!-- Do not change or inherit -->\n    <style name=\"PlacesAutocompleteBase\" parent=\"PingTheme\" />\n\n</resources>\n"
  },
  {
    "path": "library/src/main/res/values-ar/strings.xml",
    "content": "<resources>\n<string name=\"picker_title\">اختر موقع</string>\n<string name=\"picker_select_this\">اختيار هذا الموقع</string>\n<string name=\"picker_or_select_nearby\">او اختيار مكان مجاور</string>\n<string name=\"picker_load_places_error\">\"لا يمكن تحميل الاماكن المجاورة…\"</string>\n<string name=\"picker_load_this_place_error\">\"لا يمكن العثور على المكان المحدد…\"</string>\n<string name=\"picker_place_confirm\">استخدام هذا المكان؟</string>\n<string name=\"picker_place_confirm_cancel\">تغيير الموقع</string>\n<string name=\"picker_location_unavailable\">الموقع غير متاح</string>\n\n<!-- Content descriptions -->\n<string name=\"description_place_image\">صورة المكان المحدد</string>\n<string name=\"description_place_map\">خريطة المكان المحدد</string>\n\n<!-- Permissions -->\n<string name=\"permission_fine_location_title\">اذن الموقع</string>\n<string name=\"permission_fine_location_message\">نحن فى حاجة الى موقعك حتى نستطيع العثور على الاماكن المجاورة المرتبطة بك.</string>\n\n</resources>\n"
  },
  {
    "path": "library/src/main/res/values-ca/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"picker_title\">Tria una ubicació</string>\n    <string name=\"picker_select_this\">Escull aquesta ubicació</string>\n    <string name=\"picker_or_select_nearby\">O escull un lloc proper</string>\n    <string name=\"picker_load_places_error\">No es pot carregar els llocs propers ...</string>\n    <string name=\"picker_load_this_place_error\">No es pot trobar la ubicació seleccionada ...</string>\n    <string name=\"picker_place_confirm\">Fer servir aquesta ubicació?</string>\n    <string name=\"picker_place_confirm_cancel\">Canvia la ubicació</string>\n    <string name=\"picker_location_unavailable\">Ubicació no disponible</string>\n    <string name=\"description_place_image\">Una fotografia de la ubicació seleccionada</string>\n    <string name=\"description_place_map\">El mapa de la ubicació seleccionada</string>\n    <string name=\"permission_fine_location_title\">Permís de localització</string>\n    <string name=\"permission_fine_location_message\">Necessitem la teva localització per ajudar-te a trobar llocs propers</string>\n</resources>"
  },
  {
    "path": "library/src/main/res/values-cs/strings.xml",
    "content": "<resources>\n    <string name=\"picker_title\">Vyberte místo</string>\n    <string name=\"picker_select_this\">Vybrat toto umístění</string>\n    <string name=\"picker_or_select_nearby\">Nebo vyberte místo v okolí</string>\n    <string name=\"picker_load_places_error\">Nemohu načíst místa v okolí…</string>\n    <string name=\"picker_load_this_place_error\">\"Nemohu najít vybrané místo…\"</string>\n    <string name=\"picker_place_confirm\">Zvolit toto místo?</string>\n    <string name=\"picker_place_confirm_cancel\">Změnit umístění</string>\n    <string name=\"picker_location_unavailable\">Umístění není dostupné</string>\n\n    <!-- Content descriptions -->\n    <string name=\"description_place_image\">Obrázek zvoleného místa</string>\n    <string name=\"description_place_map\">Mapa zvoleného místa</string>\n\n    <!-- Permissions -->\n    <string name=\"permission_fine_location_title\">Oprávnění k přístupu k poloze</string>\n    <string name=\"permission_fine_location_message\">Potřebujeme znát vaši polohu, abychom mohli najít vhodná místa v okolí.</string>\n\n</resources>\n"
  },
  {
    "path": "library/src/main/res/values-de/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"picker_title\">Einen Ort auswählen</string>\n    <string name=\"picker_select_this\">Diesen Ort auswählen</string>\n    <string name=\"picker_place_confirm_cancel\">Ort ändern</string>\n    <string name=\"picker_place_confirm\">Diesen Ort verwenden?</string>\n    <string name=\"picker_or_select_nearby\">Oder Ort in der Nähe auswählen</string>\n    <string name=\"picker_location_unavailable\">Ort ist nicht verfügbar</string>\n    <string name=\"picker_load_this_place_error\">Konnte den ausgewählten Ort nicht finden…</string>\n    <string name=\"picker_load_places_error\">Konnte Orte in der Nähe nicht laden…</string>\n    <string name=\"permission_fine_location_title\">Standort-Berechtigungen</string>\n    <string name=\"permission_fine_location_message\">Wir benötigen Ihre Orte nur um Ihnen dabei zu helfen Orte in der Nähe zu finden.</string>\n    <string name=\"description_place_map\">Eine Karte des ausgewählten Ortes</string>\n    <string name=\"description_place_image\">Ein Foto des ausgewählten Ortes</string>\n</resources>"
  },
  {
    "path": "library/src/main/res/values-es-rES/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"picker_title\">Escoge una ubicación</string>\n    <string name=\"picker_select_this\">Escoge esta ubicación</string>\n    <string name=\"picker_or_select_nearby\">O escoje un lugar cercano</string>\n    <string name=\"picker_load_places_error\">No se puede cargar los lugares cercanos...</string>\n    <string name=\"picker_load_this_place_error\">No se puede encontrar la ubicación seleccionada...</string>\n    <string name=\"picker_place_confirm\">¿Usar esta ubicación?</string>\n    <string name=\"picker_place_confirm_cancel\">Cambia la ubicación</string>\n    <string name=\"picker_location_unavailable\">Ubicación no disponible</string>\n    <string name=\"description_place_image\">Una fotografía de la ubicación seleccionada</string>\n    <string name=\"description_place_map\">El mapa de la ubicación seleccionada</string>\n    <string name=\"permission_fine_location_title\">Permiso de localización</string>\n    <string name=\"permission_fine_location_message\">Necesitamos tu localización para ayudarte a encontrar sitios cercanos</string>\n</resources>"
  },
  {
    "path": "library/src/main/res/values-ko-rKR/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"picker_title\">위치 선택</string>\n    <string name=\"picker_select_this\">현재 위치 선택</string>\n    <string name=\"picker_or_select_nearby\">근처 장소</string>\n    <string name=\"picker_load_places_error\">\"근처 장소를 확인할 수 없습니다.\"</string>\n    <string name=\"picker_load_this_place_error\">\"선택한 장소를 찾을 수 없습니다.\"</string>\n    <string name=\"picker_place_confirm\">이 장소를 사용 하시겠습니까?</string>\n    <string name=\"picker_place_confirm_cancel\">장소 변경</string>\n    <string name=\"picker_location_unavailable\">위치를 사용할 수 없습니다.</string>\n\n    <!-- Content descriptions -->\n    <string name=\"description_place_image\">선택한 장소의 사진</string>\n    <string name=\"description_place_map\">선택한 장소의 지도</string>\n\n    <!-- Permissions -->\n    <string name=\"permission_fine_location_title\">위치 권한</string>\n    <string name=\"permission_fine_location_message\">주변 장소를 찾기 위해 위치 권한이 필요합니다.</string>\n</resources>\n"
  },
  {
    "path": "library/src/main/res/values-pt/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"description_place_image\">\"Imagem do local \"</string>\n    <string name=\"description_place_map\">Mapa do local selecionado</string>\n    <string name=\"permission_fine_location_message\">Precisamos da sua localização apenas para encontrar locais relevantes ao seu redor.</string>\n    <string name=\"permission_fine_location_title\">Permissão de Localização</string>\n    <string name=\"picker_load_places_error\">Não foi possível encontrar locais ao redor.</string>\n    <string name=\"picker_load_this_place_error\">\" Não foi possível encontrar o local selecionado…\"</string>\n    <string name=\"picker_location_unavailable\">Localização não está disponível</string>\n    <string name=\"picker_or_select_nearby\">Ou escolha um local ao redor</string>\n    <string name=\"picker_place_confirm\">Utilizar este local?</string>\n    <string name=\"picker_place_confirm_cancel\">Alterar localização</string>\n    <string name=\"picker_select_this\">Selecionar este local</string>\n    <string name=\"picker_title\">Escolha um local</string>\n</resources>\n"
  },
  {
    "path": "library/src/main/res/values-tr/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <string name=\"picker_title\">Select a location</string>\n    <string name=\"picker_select_this\">Bu konumu seç</string>\n    <string name=\"picker_or_select_nearby\">İsterseniz yakındaki bir yeri seçin</string>\n    <string name=\"picker_load_places_error\">\"Yakında bir yer bulunamadı…\"</string>\n    <string name=\"picker_load_this_place_error\">\"Seçtiğiniz yer bulunamadı…\"</string>\n    <string name=\"picker_place_confirm\">Bu konum kullanılsın mı?</string>\n    <string name=\"picker_place_confirm_cancel\">Konumu Değiştir</string>\n    <string name=\"picker_location_unavailable\">Lokasyon Bulunamadı</string>\n\n    <!-- Content descriptions -->\n    <string name=\"description_place_image\">Seçilen yerin fotoğrafı</string>\n    <string name=\"description_place_map\">Seçilen yerin haritası</string>\n\n    <!-- Permissions -->\n    <string name=\"permission_fine_location_title\">Konum İzini</string>\n    <string name=\"permission_fine_location_message\">Yakındaki yerleri gösterebilmek için konum izinine ihtiyacımız var.</string>\n\n</resources>"
  },
  {
    "path": "library/src/main/res/values-v21/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <style name=\"PingTheme.NoStatus\">\n        <item name=\"android:windowDrawsSystemBarBackgrounds\">true</item>\n        <item name=\"android:statusBarColor\">@android:color/transparent</item>\n    </style>\n\n    <style name=\"PingTheme\" parent=\"PingThemeBase\">\n        <item name=\"android:buttonBarNegativeButtonStyle\">\n            @style/Widget.MaterialComponents.Button.TextButton.Dialog\n        </item>\n        <item name=\"android:buttonBarPositiveButtonStyle\">\n            @style/Widget.MaterialComponents.Button.TextButton.Dialog\n        </item>\n    </style>\n</resources>"
  },
  {
    "path": "library/src/main/res/values-w600dp/config.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <bool name=\"show_card_search\">false</bool>\n</resources>"
  },
  {
    "path": "library/src/main/res/values-zh-rTW/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <string name=\"picker_title\">選擇附近的地點</string>\n    <string name=\"picker_select_this\">選取這個位置</string>\n    <string name=\"picker_or_select_nearby\">或選擇附近的地點</string>\n    <string name=\"picker_load_places_error\">\"無法載入附近地點\"</string>\n    <string name=\"picker_load_this_place_error\">\"找不到被選擇的地點\"</string>\n    <string name=\"picker_place_confirm\">要使用這個位置嗎?</string>\n    <string name=\"picker_place_confirm_cancel\">變更位置</string>\n    <string name=\"picker_location_unavailable\">位置不可用</string>\n\n    <!-- Content descriptions -->\n    <string name=\"description_place_image\">A photo of the selected place</string>\n    <string name=\"description_place_map\">A map of the selected place</string>\n\n    <!-- Permissions -->\n    <string name=\"permission_fine_location_title\">定位權限</string>\n    <string name=\"permission_fine_location_message\">我們需要你的定位，以便協助你快速找到地點</string>\n\n</resources>"
  },
  {
    "path": "library/src/test/java/com/rtchagas/pingplacepicker/ExampleUnitTest.java",
    "content": "package com.rtchagas.pingplacepicker;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.*;\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * @see <a href=\"http://d.android.com/tools/testing\">Testing documentation</a>\n */\npublic class ExampleUnitTest {\n    @Test\n    public void addition_isCorrect() {\n        assertEquals(4, 2 + 2);\n    }\n}"
  },
  {
    "path": "sample/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "sample/build.gradle",
    "content": "apply plugin: 'com.android.application'\napply plugin: 'kotlin-android'\n\nandroid {\n\n    namespace 'com.rtchagas.pingsample'\n\n    compileSdk 33\n\n    defaultConfig {\n        applicationId \"com.rtchagas.pingsample\"\n        minSdkVersion 21\n        targetSdkVersion 33\n        versionCode 1\n        versionName \"1.0\"\n        testInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\n    }\n\n    kotlin {\n        jvmToolchain(11)\n    }\n\n    buildFeatures {\n        viewBinding true\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: 'libs', include: ['*.jar'])\n    implementation project(':library')\n\n    // Kotlin\n    implementation \"org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version\"\n\n    // Support library\n    implementation 'androidx.appcompat:appcompat:1.6.1'\n    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'\n    implementation 'com.google.android.material:material:1.9.0'\n\n    // Places library\n    implementation 'com.google.android.libraries.places:places:3.2.0'\n\n    // Other\n    implementation 'com.github.mcginty:material-colors:1.1.0'\n\n    testImplementation 'junit:junit:4.13.2'\n}\n"
  },
  {
    "path": "sample/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile\n"
  },
  {
    "path": "sample/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <application\n        android:allowBackup=\"true\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:roundIcon=\"@mipmap/ic_launcher_round\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/AppTheme\"\n        tools:ignore=\"GoogleAppIndexingWarning\">\n\n        <meta-data\n            android:name=\"com.google.android.geo.API_KEY\"\n            android:value=\"@string/key_google_apis_android\" />\n\n        <activity\n            android:name=\".MainActivity\"\n            android:exported=\"true\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n    </application>\n\n</manifest>"
  },
  {
    "path": "sample/src/main/java/com/rtchagas/pingsample/MainActivity.kt",
    "content": "package com.rtchagas.pingsample\n\nimport android.os.Bundle\nimport com.google.android.gms.maps.model.LatLng\nimport com.google.android.libraries.places.api.model.Place\nimport com.rtchagas.pingplacepicker.PingPlacePicker\nimport com.rtchagas.pingplacepicker.ui.activity.BaseActivity\nimport com.rtchagas.pingplacepicker.ui.toast\nimport com.rtchagas.pingsample.databinding.ActivityMainBinding\n\nclass MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::inflate),\n    PingPlacePicker.OnPlaceSelectedListener {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        binding.btnOpenPlacePicker.setOnClickListener {\n            showPlacePicker()\n        }\n    }\n\n    private fun showPlacePicker() {\n\n        val builder = PingPlacePicker.Builder()\n\n        builder.setAndroidApiKey(getString(R.string.key_google_apis_android))\n            .setMapsApiKey(getString(R.string.key_google_apis_maps))\n            .setOnPlaceSelectedListener(this)\n\n        // If you want to set a initial location\n        // rather then the current device location.\n        // pingBuilder.setLatLng(LatLng(37.4219999, -122.0862462))\n\n        try {\n            val pingIntent = builder.build(this)\n            startActivity(pingIntent)\n        } catch (ex: Exception) {\n            toast(\"Google Play Services is not Available\")\n        }\n    }\n\n    override fun onPlaceSelected(place: Place, latLng: LatLng) {\n        toast(\"You selected: ${place.name}\\n Map location: $latLng\")\n    }\n}\n"
  },
  {
    "path": "sample/src/main/res/drawable/ic_launcher_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportHeight=\"108\"\n    android:viewportWidth=\"108\">\n    <path\n        android:fillColor=\"#008577\"\n        android:pathData=\"M0,0h108v108h-108z\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M9,0L9,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,0L19,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M29,0L29,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M39,0L39,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M49,0L49,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M59,0L59,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M69,0L69,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M79,0L79,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M89,0L89,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M99,0L99,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,9L108,9\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,19L108,19\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,29L108,29\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,39L108,39\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,49L108,49\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,59L108,59\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,69L108,69\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,79L108,79\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,89L108,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,99L108,99\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,29L89,29\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,39L89,39\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,49L89,49\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,59L89,59\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,69L89,69\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,79L89,79\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M29,19L29,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M39,19L39,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M49,19L49,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M59,19L59,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M69,19L69,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M79,19L79,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\"/>\n</vector>\n"
  },
  {
    "path": "sample/src/main/res/drawable-v24/ic_launcher_foreground.xml",
    "content": "<vector xmlns:aapt=\"http://schemas.android.com/aapt\"\n        xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"108dp\"\n        android:height=\"108dp\"\n        android:viewportHeight=\"108\"\n        android:viewportWidth=\"108\">\n    <path\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z\"\n        android:strokeColor=\"#00000000\"\n        android:strokeWidth=\"1\">\n        <aapt:attr name=\"android:fillColor\">\n            <gradient\n                android:endX=\"78.5885\"\n                android:endY=\"90.9159\"\n                android:startX=\"48.7653\"\n                android:startY=\"61.0927\"\n                android:type=\"linear\">\n                <item\n                    android:color=\"#44000000\"\n                    android:offset=\"0.0\"/>\n                <item\n                    android:color=\"#00000000\"\n                    android:offset=\"1.0\"/>\n            </gradient>\n        </aapt:attr>\n    </path>\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:fillType=\"nonZero\"\n        android:pathData=\"M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z\"\n        android:strokeColor=\"#00000000\"\n        android:strokeWidth=\"1\"/>\n</vector>\n"
  },
  {
    "path": "sample/src/main/res/layout/activity_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    tools:context=\".MainActivity\">\n\n    <com.google.android.material.appbar.AppBarLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        app:theme=\"@style/AppTheme.AppBarOverlay\">\n\n        <androidx.appcompat.widget.Toolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"?actionBarSize\"\n            android:background=\"@null\"\n            app:title=\"@string/app_name\" />\n\n    </com.google.android.material.appbar.AppBarLayout>\n\n\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/btnOpenPlacePicker\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/show_picker\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>"
  },
  {
    "path": "sample/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <background android:drawable=\"@drawable/ic_launcher_background\"/>\n    <foreground android:drawable=\"@drawable/ic_launcher_foreground\"/>\n</adaptive-icon>"
  },
  {
    "path": "sample/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <background android:drawable=\"@drawable/ic_launcher_background\"/>\n    <foreground android:drawable=\"@drawable/ic_launcher_foreground\"/>\n</adaptive-icon>"
  },
  {
    "path": "sample/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <color name=\"colorPrimary\">@color/material_teal500</color>\n    <color name=\"colorPrimaryDark\">@color/material_teal800</color>\n    <color name=\"colorOnPrimary\">@color/material_white</color>\n\n    <color name=\"colorSecondary\">@color/material_deeporange500</color>\n    <color name=\"colorSecondaryDark\">@color/material_deeporange800</color>\n    <color name=\"colorOnSecondary\">@color/material_white</color>\n\n    <color name=\"colorBackground\">@color/material_grey200</color>\n    <color name=\"colorOnBackground\">@color/material_black</color>\n\n    <color name=\"colorSurface\">@color/material_white</color>\n    <color name=\"colorOnSurface\">@color/material_black</color>\n\n    <color name=\"textColorPrimary\">@color/material_on_surface_emphasis_high_type</color>\n    <color name=\"textColorSecondary\">@color/material_on_surface_emphasis_medium</color>\n\n    <color name=\"colorMarker\">@color/material_deeporange400</color>\n    <color name=\"colorMarkerInnerIcon\">@color/material_white</color>\n\n</resources>\n"
  },
  {
    "path": "sample/src/main/res/values/keys.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <!-- TODO: Move to Firebase remote configs -->\n    <string name=\"key_google_apis_android\" translatable=\"false\">\"your android key\"</string>\n    <string name=\"key_google_apis_maps\" translatable=\"false\">\"your maps key\"</string>\n\n</resources>\n"
  },
  {
    "path": "sample/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\" translatable=\"false\">Ping Sample</string>\n    <string name=\"show_picker\" translatable=\"false\">Ping!</string>\n</resources>\n"
  },
  {
    "path": "sample/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">\n\n        <!-- Customize your theme here. -->\n\n        <item name=\"windowActionBar\">false</item>\n        <item name=\"windowNoTitle\">true</item>\n        <item name=\"windowActionModeOverlay\">true</item>\n\n        <item name=\"android:windowBackground\">@color/colorBackground</item>\n        <item name=\"android:colorBackground\">@color/colorBackground</item>\n\n        <item name=\"colorPrimary\">@color/colorPrimary</item>\n        <item name=\"colorPrimaryDark\">@color/colorPrimaryDark</item>\n        <item name=\"colorPrimaryVariant\">@color/colorPrimaryDark</item>\n\n        <item name=\"colorSecondary\">@color/colorSecondary</item>\n        <item name=\"colorSecondaryVariant\">@color/colorSecondaryDark</item>\n        <item name=\"colorAccent\">@color/colorSecondary</item>\n\n        <item name=\"colorSurface\">@color/colorSurface</item>\n\n        <item name=\"colorOnPrimary\">@color/colorOnPrimary</item>\n        <item name=\"colorOnSecondary\">@color/colorOnSecondary</item>\n        <item name=\"colorOnSurface\">@color/colorOnSurface</item>\n        <item name=\"colorOnBackground\">@color/colorOnBackground</item>\n\n        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>\n        <item name=\"android:textColorSecondary\">@color/textColorSecondary</item>\n\n    </style>\n\n    <style name=\"AppTheme.AppBarOverlay\" parent=\"ThemeOverlay.MaterialComponents.Dark.ActionBar\">\n        <item name=\"colorControlNormal\">?attr/colorOnPrimarySurface</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "sample/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <color name=\"colorPrimary\">@color/material_teal300</color>\n    <color name=\"colorPrimaryDark\">@color/colorSurface</color>\n    <color name=\"colorOnPrimary\">@color/material_black</color>\n\n    <color name=\"colorSecondary\">@color/material_deeporange200</color>\n    <color name=\"colorSecondaryDark\">@color/material_deeporange300</color>\n    <color name=\"colorOnSecondary\">@color/material_black</color>\n\n    <color name=\"colorBackground\">@color/colorSurface</color>\n    <color name=\"colorOnBackground\">@color/colorOnSurface</color>\n\n    <color name=\"colorSurface\">#202125</color>\n    <color name=\"colorOnSurface\">@color/material_white</color>\n\n    <color name=\"textColorPrimary\">@color/material_on_surface_emphasis_high_type</color>\n    <color name=\"textColorSecondary\">@color/material_on_surface_emphasis_medium</color>\n\n    <color name=\"colorMarker\">@color/material_deeporange200</color>\n    <color name=\"colorMarkerInnerIcon\">@color/colorSurface</color>\n\n</resources>\n"
  },
  {
    "path": "sample/src/test/java/com/rtchagas/pingsample/ExampleUnitTest.kt",
    "content": "package com.rtchagas.pingsample\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\nclass ExampleUnitTest {\n    @Test\n    fun addition_isCorrect() {\n        assertEquals(4, 2 + 2)\n    }\n}\n"
  },
  {
    "path": "settings.gradle",
    "content": "plugins {\n    id 'org.gradle.toolchains.foojay-resolver-convention' version '0.6.0'\n}\n\ninclude ':library', ':sample'\n"
  }
]