Giter VIP home page Giter VIP logo

pingplacepicker's Introduction

PING - Because Ping Is Not Google's Place Picker 😉

If you're here looking for a place picker you have probably read this:

Google Place Picker was deprecated

As of the end of January 2019, Google deprecated the so useful Place Picker bundled in the Places SDK for Android. The main reason was due the new pricing model of the Places API.

PING Place Picker is here to help you to (almost) plug-and-play replace the original Google's Place Picker.

Map expanded Place selected Results expanded Search result

A key difference

Different 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.

This was intentional and the reason is simple. By using the /nearbysearch from Google Places Web API we are going to be charged a lot for each map movement.

NearbySearch warning

According to Nearby Search pricing each request to the API is going to cost 0.04 USD per each (40.00 USD per 1000).

To 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).

Moreover, we don't fire a new request when the user moves the map.

Enabling nearby searches

If 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.

To do that, enable this flag in your project:

 <bool name="enable_nearby_search">true</bool>

By doing so, PING behaviour will be slightly changed:

  • All places will be fetched by /nearbysearch queries.
  • You get a button to refresh the places for the current location.
  • You can set the initial map position to get the places from via pingBuilder.setLatLng(LatLng)

Why use PING?

PING 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.

It 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.

Download

Add Jitpack in your root build.gradle at the end of repositories:

    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

Step 2. Add the dependency

    dependencies {
            // Places library
            implementation 'com.google.android.libraries.places:places:2.0.0'
            // PING Place Picker
            implementation 'com.github.rtchagas:pingplacepicker:2.0.+'
    }

Setup

  1. Add Google Play Services to your project - How to
  2. Sign up for API keys - How to
  3. Add the Android API key to your AndroidManifest file as in the sample project.
  4. Optional but strongly recommended to enable R8 in you gradle.properties file

Hands on

Check the sample project for a full working example.

- Kotlin

    private fun showPlacePicker() {  
        val builder = PingPlacePicker.IntentBuilder()
	builder.setAndroidApiKey("YOUR_ANDROID_API_KEY")  
        	.setMapsApiKey("YOUR_MAPS_API_KEY")
	
	// If you want to set a initial location rather then the current device location.
	// NOTE: enable_nearby_search MUST be true.
        // builder.setLatLng(LatLng(37.4219999, -122.0862462))
	
        try {
            val placeIntent = pingBuilder.build(this)
            startActivityForResult(placeIntent, REQUEST_PLACE_PICKER)
        }
        catch (ex: Exception) {  
            toast("Google Play Services is not Available")  
        }
    }
    
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {  
	super.onActivityResult(requestCode, resultCode, data)  
	if ((requestCode == REQUEST_PLACE_PICKER) && (resultCode == Activity.RESULT_OK)) {  
	    val place: Place? = PingPlacePicker.getPlace(data!!)  
	    toast("You selected: ${place?.name}")  
	}  
    }

- Java

    private void showPlacePicker() {
	PingPlacePicker.IntentBuilder builder = new PingPlacePicker.IntentBuilder();
	builder.setAndroidApiKey("YOUR_ANDROID_API_KEY")
	       .setMapsApiKey("YOUR_MAPS_API_KEY");
	
	// If you want to set a initial location rather then the current device location.
	// NOTE: enable_nearby_search MUST be true.
        // builder.setLatLng(new LatLng(37.4219999, -122.0862462))
	
	try {
	    Intent placeIntent = builder.build(getActivity());  
	    startActivityForResult(placeIntent, REQUEST_PLACE_PICKER);  
	}  
	catch (Exception ex) {  
	    // Google Play services is not available... 
	}
    }
    
    @Override  
    public void onActivityResult(int requestCode, int resultCode, Intent data) {  
        if ((requestCode == REQUEST_PLACE_PICKER) && (resultCode == RESULT_OK)) {  
            Place place = PingPlacePicker.getPlace(data);  
	    if (place != null) {  
                Toast.makeText(this, "You selected the place: " + place.getName(), Toast.LENGTH_SHORT).show();
            }  
        }
    }

API Keys

PING needs two API keys in order to work.

It 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.

Key Restriction Purpose
Android key Android Applications Used as the Places API key. Main purpose is to retrieve the current places and place details.
Maps key APIs: Geocoding, Maps Static and Places API only 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.

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. A nice approach is to save the key in the cloud through "Firebase remote config" and fetch it at runtime.

Configuration

As some features are charged by Google, you can alter the default PING Place Picker behaviour by overriding below resources:

<!-- 0.002 USD per each (2.00 USD per 1000) -->  
<bool name="show_confirmation_photo">true</bool>  

<!-- 0.007 USD per each (7.00 USD per 1000) -->  
<bool name="show_confirmation_map">true</bool>

<!-- If true, the map will automatically center (pan) to
     the selected marker -->
<bool name="auto_center_on_marker_click">false</bool>

Theming

PING is fully customizable and you just need to override some colors to make it seamlessly connected to your app.

Since release 2.0.0 PING supports dark/night mode by default.
Please make sure your app provide the correct resources to switch to night mode.

You can always refer to Material Design documentation to know more about dark theme and how to implement it.

To customize PING you need to override these colors:

For day/light theme:

  • res/values/colors.xml
    <!-- Toolbar color, places icons, text on top of primary surfaces -->
    <color name="colorPrimary">@color/material_teal500</color>
    <color name="colorPrimaryDark">@color/material_teal800</color>
    <color name="colorOnPrimary">@color/material_white</color>

    <!-- Accent color in buttons and actions -->
    <color name="colorSecondary">@color/material_deeporange500</color>
    <color name="colorSecondaryDark">@color/material_deeporange800</color>
    <color name="colorOnSecondary">@color/material_white</color>

    <!-- Main activity background -->
    <color name="colorBackground">@color/material_grey200</color>
    <color name="colorOnBackground">@color/material_black</color>

    <!-- Cards and elevated views background -->
    <color name="colorSurface">@color/material_white</color>
    <color name="colorOnSurface">@color/material_black</color>

    <!-- Text colors -->
    <color name="textColorPrimary">@color/material_on_surface_emphasis_high_type</color>
    <color name="textColorSecondary">@color/material_on_surface_emphasis_medium</color>

    <color name="colorMarker">@color/material_deeporange400</color>
    <color name="colorMarkerInnerIcon">@color/material_white</color>

For night/dark theme:

  • res/values-night/colors.xml
    <color name="colorPrimary">@color/material_teal300</color>
    <!-- Let the primary dark color as the surface color to not colorfy the status bar -->
    <color name="colorPrimaryDark">@color/colorSurface</color>
    <color name="colorOnPrimary">@color/material_black</color>

    <color name="colorSecondary">@color/material_deeporange200</color>
    <color name="colorSecondaryDark">@color/material_deeporange300</color>
    <color name="colorOnSecondary">@color/material_black</color>

    <color name="colorBackground">@color/colorSurface</color>
    <color name="colorOnBackground">@color/colorOnSurface</color>

    <color name="colorSurface">#202125</color>
    <color name="colorOnSurface">@color/material_white</color>

    <color name="textColorPrimary">@color/material_on_surface_emphasis_high_type</color>
    <color name="textColorSecondary">@color/material_on_surface_emphasis_medium</color>

    <color name="colorMarker">@color/material_deeporange200</color>
    <color name="colorMarkerInnerIcon">@color/colorSurface</color>

In case of doubt in how to implement the new styles, please take a look at the sample app.

Contribute

Let's together make PING awesome!

Please feel free to contribute with improvements.

License

Copyright 2020 Rafael Chagas

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

pingplacepicker's People

Contributors

dzungpv avatar islamassem avatar jongha avatar lucasxvirtual avatar mahasadhu avatar percula avatar rtchagas avatar shudy avatar t104360088 avatar thubalek avatar tuongnm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pingplacepicker's Issues

Improvement: Update koin version

I'm using latest stable version of koin in my project:

def koin_version = '2.0.1'
implementation "org.koin:koin-android:$koin_version"

In pingplacepicker this version is used:
implementation 'org.koin:koin-android:2.0.0-rc-2'
When I'm starting PlacePicker it crashes. Stacktrace point to Koin dependencies in library.

 java.lang.NoSuchMethodError: No direct method <init>(Lorg/koin/core/qualifier/Qualifier;Lkotlin/reflect/KClass;)V in class Lorg/koin/core/definition/BeanDefinition; or its super classes (declaration of 'org.koin.core.definition.BeanDefinition' appears in /data/app/com.oitchau.debug-RnTBdgwQJYqnF5iT34jFRQ==/split_lib_slice_0_apk.apk!classes3.dex)
        at com.rtchagas.pingplacepicker.inject.RepositoryModuleKt$repositoryModule$1.invoke(RepositoryModule.kt:57)
        at com.rtchagas.pingplacepicker.inject.RepositoryModuleKt$repositoryModule$1.invoke(Unknown Source:2)
        at org.koin.dsl.ModuleKt.module(Module.kt:31)
        at org.koin.dsl.ModuleKt.module$default(Module.kt:29)
        at com.rtchagas.pingplacepicker.inject.RepositoryModuleKt.<clinit>(RepositoryModule.kt:17)
        at com.rtchagas.pingplacepicker.inject.RepositoryModuleKt.getRepositoryModule(RepositoryModule.kt:17)
        at com.rtchagas.pingplacepicker.PingPlacePicker$IntentBuilder$initKoin$1.invoke(PingPlacePicker.kt:74)
        at com.rtchagas.pingplacepicker.PingPlacePicker$IntentBuilder$initKoin$1.invoke(PingPlacePicker.kt:20)
        at org.koin.dsl.KoinApplicationKt.koinApplication(KoinApplication.kt:28)
        at com.rtchagas.pingplacepicker.PingPlacePicker$IntentBuilder.initKoin(PingPlacePicker.kt:70)
        at com.rtchagas.pingplacepicker.PingPlacePicker$IntentBuilder.build(PingPlacePicker.kt:52)

Due to gradle default dependency resolving strategy it pick higher version of the library, so when I decreased dependency in my project to 2.0.0-rc2 the PingPlacePicker starded working.
So could you please update this dependency in the next release

Dependencies error, Manifest Merger failed after adding the dependency

Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [com.github.rtchagas:pingplacepicker:1.0.4] C:\Users\dell.gradle\caches\transforms-1\files-1.1\pingplacepicker-1.0.4.aar\bea39304e99fc86a33ad7d0ec21ee063\AndroidManifest.xml as the library might be using APIs not available in 16
Suggestion: use a compatible library with a minSdk of at most 16,
or increase this project's minSdk version to at least 19,
or use tools:overrideLibrary="com.rtchagas.pingplacepicker" to force usage (may lead to runtime failures)

Androidx fragment crash

Hi @rtchagas
When I use this library in a java project, I got the strange errors

  1. My project layout have wrong position in ConstraintLayout
  2. I got the crash in androidx fragment

This is crash message:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean androidx.fragment.app.FragmentManagerImpl.isDestroyed()' on a null object reference
at androidx.fragment.app.Fragment.performDetach(Fragment.java:2844)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1034)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:434)
at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2076)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1866)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1821)
at androidx.fragment.app.FragmentManagerImpl.execSingleAction(FragmentManagerImpl.java:1696)
at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:299)
at androidx.fragment.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:256)
at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1244)
at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
at androidx.viewpager.widget.ViewPager$3.run(ViewPager.java:273)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:966)
at android.view.Choreographer.doCallbacks(Choreographer.java:778)
at android.view.Choreographer.doFrame(Choreographer.java:710)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:952)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:169)
at android.app.ActivityThread.main(ActivityThread.java:6585)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

Do you have any idea? Thanks for you help

The nearby searches function is unavailable and how to add signature to the request URL

Hi rtchagas,
Question 1: According to the chapter of "Enabling nearby searches" in your guideline, I add the property to my project, and it's not work. Whether is this featrue unavailable until now. Next version will work? When do you release next version that contains the function.


To do that, enable this flag in your project:
<bool ### name="enable_nearby_search">true


Question 2: How to add a digital signature to the request URL.
A requirement as bellow mentioned in google map document("https://developers.google.com/maps/documentation/maps-static/get-api-key#dig-sig-key", chapter "Generating digital signatures"), client can add a digital signature for use with API keys to the request URL. Whether does your SDK support to set this feature. If not, can you
support it in next release version? When release next version?


5、Add the resulting signature to the request URL within a signature parameter. For example:
https://maps.googleapis.com/maps/api/staticmap?center=40.714%2c%20-73.998&zoom=12&size=400x400&key=YOUR_API_KEY&signature=**BASE64_SIGNATURE**


Cannot get place name

I'm using this package for loading a place picker but I can't seem to get the name of the selected place. The getName function returns the coordinates of the place in degrees and direction format i.e 1° 17' 52" S, 36° 45' 54. How can I get the name of the place?

Select this location does not return the actual LatLng

Hi Rafael, thank you for this awesome library.

When users click on select this location button, the library does not return the actual LatLng selected by the users. Instead it only return place object retrieved from the Google Place.

It becomes a problem when the app needs the actual coordinate selected by the users. I will submit a PR

The Library Works one time only

The library works one time only
couldn't load nearby places error keeps showing ,i have tried to add tow key's with restriction on the geolocation and single key without restriction supports all api's Places and Geolocation
with no luck any idea to solve this issue

Crash when Location Permission is denied

Steps to repro,

  • Open PlacePicker deny the permission. See the alert dialog with OK button
  • Tap on search, crashes the app 100% of times
  • There's no obvious way to go back on the devices with soft buttons, unless you try to scroll the nearby list until the toolbar is revealed
java.lang.RuntimeExceptioncom.google.android.libraries.places.widget.AutocompleteActivity
Unable to start activity ComponentInfo{com.test.mobile/com.google.android.libraries.places.widget.AutocompleteActivity}: java.lang.IllegalStateException: Places must be initialized.

Crash happens when "Places must be initialized."

Hi rtchagas,

A crash occurs when clicking the search box in the PlacePickerActivity. And the probability 100% that time. Maybe there is something wrong with the network at that time. I close and open this activity and it becomes normal.

2019-07-30 15:05:18.680 24771-24771/cn.oneplus.opmms D/AndroidRuntime: Shutting down VM
2019-07-30 15:05:18.682 24771-24771/cn.oneplus.opmms E/AndroidRuntime: FATAL EXCEPTION: main
Process: cn.oneplus.opmms, PID: 24771
java.lang.RuntimeException: Unable to start activity ComponentInfo{cn.oneplus.opmms/com.google.android.libraries.places.widget.AutocompleteActivity}: java.lang.IllegalStateException: Places must be initialized.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3047)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3182)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1916)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6898)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.IllegalStateException: Places must be initialized.
at com.google.android.libraries.places.internal.go.b(PG:22)
at com.google.android.libraries.places.widget.AutocompleteActivity.onCreate(PG:2)
at android.app.Activity.performCreate(Activity.java:7149)
at android.app.Activity.performCreate(Activity.java:7140)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1288)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3027)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3182)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1916)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6898)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sample/com.rtchagas.pingplacepicker.ui.PlacePickerActivity}: android.view.InflateException: Binary XML file line #43: Binary XML file line #43: Error inflating class fragment

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sample/com.rtchagas.pingplacepicker.ui.PlacePickerActivity}: android.view.InflateException: Binary XML file line #43: Binary XML file line #43: Error inflating class fragment

The style on this component requires your app theme to be Theme.MaterialComponents

Hello,

in onCreateActivity in at setContentView
I encounter this error for TextInputLayout inflation. Its style is already set to style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"

But I get a crash when I just include your library. (Not even used in the activity)

java.lang.RuntimeException: Unable to start activity ComponentInfo{rentsher.simba.uae/rentsher.simba.modules.setAddress.SetAddressActivity}: android.view.InflateException: Binary XML file line #58: Binary XML file line #58: Error inflating class com.google.android.material.textfield.TextInputLayout
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2951)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6718)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:495)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: android.view.InflateException: Binary XML file line #58: Binary XML file line #58: Error inflating class com.google.android.material.textfield.TextInputLayout
     Caused by: android.view.InflateException: Binary XML file line #58: Error inflating class com.google.android.material.textfield.TextInputLayout
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at android.view.LayoutInflater.createView(LayoutInflater.java:647)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:545)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
        at rentsher.simba.modules.setAddress.SetAddressActivity.onCreate(SetAddressActivity.kt:43)
        at android.app.Activity.performCreate(Activity.java:7144)
        at android.app.Activity.performCreate(Activity.java:7135)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2931)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6718)
2019-08-07 14:57:39.434 31922-31922/rentsher.simba.uae E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:495)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.MaterialComponents (or a descendant).
        at com.google.android.material.internal.ThemeEnforcement.checkTheme(ThemeEnforcement.java:240)
        at com.google.android.material.internal.ThemeEnforcement.checkMaterialTheme(ThemeEnforcement.java:215)
        at com.google.android.material.internal.ThemeEnforcement.checkCompatibleTheme(ThemeEnforcement.java:143)
        at com.google.android.material.internal.ThemeEnforcement.obtainTintedStyledAttributes(ThemeEnforcement.java:116)
        at com.google.android.material.textfield.TextInputLayout.<init>(TextInputLayout.java:413)
        at com.google.android.material.textfield.TextInputLayout.<init>(TextInputLayout.java:392)

When I remove your library from build.gradle everything works as usual

here is my current build.gradle (commenting last two lines doenst lead to crash)


 implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.2'

    //Basic
    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    implementation 'androidx.cardview:cardview:1.0.0'

    //Play Services
    implementation 'com.google.android.gms:play-services-location:17.0.0'
    implementation 'com.google.android.gms:play-services-maps:17.0.0'
    implementation 'com.google.android.gms:play-services-auth:17.0.0'

    //Kotlin Coroutines
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1'

    //Firebase
    implementation 'com.google.firebase:firebase-core:17.0.1'
    implementation 'com.google.firebase:firebase-messaging:19.0.1'
    implementation 'com.google.firebase:firebase-auth:18.1.0'

    //Facebook
    implementation 'com.facebook.android:facebook-login:4.42.0'

    //Netcore Smartech
    implementation 'in.netcore.smartechfcm:smartech-fcm:1.2.7'
    implementation 'com.firebase:firebase-jobdispatcher:0.8.5'

    //Firebase Auth
    //implementation 'com.google.firebase:firebase-auth:16.1.0'
    //implementation 'com.firebaseui:firebase-ui-auth:4.1.0'

    //Firebase Firestore
    //implementation 'com.google.firebase:firebase-database:16.0.6'
    //implementation 'com.firebaseui:firebase-ui-database:4.3.1'

    //Firebase Storage
    //implementation 'com.google.firebase:firebase-storage:16.0.5'
    //implementation 'com.firebaseui:firebase-ui-storage:4.3.1'

    //Reactive
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.10'

    // Networking
    implementation 'com.squareup.retrofit2:retrofit:2.6.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.13.1'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.6.0'
    implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
    debugImplementation 'com.readystatesoftware.chuck:library:1.1.0'

    //RecyclerView Decoration
    implementation 'com.arjinmc.android:recyclerviewdecoration:2.6'

    // Gson by Google
    implementation 'com.google.code.gson:gson:2.8.5'

    //Glide
    implementation 'com.github.bumptech.glide:glide:4.9.0'
    kapt 'com.github.bumptech.glide:compiler:4.9.0'

    //Location Library
    implementation 'io.nlopez.smartlocation:library:3.3.3'

    //Permissions
    implementation 'com.karumi:dexter:5.0.0'

    //Crashlytics
    implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'

    //AppCountry Code Picker
    implementation 'com.hbb20:ccp:2.1.2'

    //File Chooser
    implementation 'com.github.hedzr:android-file-chooser:v1.1.16'

    //Camera Take Pic
    implementation 'com.sandrios.android:sandriosCamera:1.1.0'
    implementation 'com.github.yalantis:ucrop:2.2.2'
    implementation 'id.zelory:compressor:2.1.0'

    //Calendar
    implementation 'com.savvi.datepicker:rangepicker:1.3.0'
    
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

    // Places library
    implementation 'com.google.android.libraries.places:places:2.0.0'
    // PING Place Picker
    implementation 'com.github.rtchagas:pingplacepicker:1.1.2'

Android resource compilation failed

C:<ProjectName>\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:6077: error: duplicate value for resource 'attr/progress' with config ''.
C:<ProjectName>\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:6077: error: resource previously defined here.
C:<ProjectName>\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:6267: error: duplicate value for resource 'attr/rotation' with config ''.
C:<ProjectName>\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:6267: error: resource previously defined here.

Crash when adding dependency

Just after adding pingplacepicker dependency, I get the following crash when launching the app.
I use Firebase In-App Messaging but I don't know how it can affect the use of this library. 😕

2019-05-24 12:33:05.580 31404-31404/com.example.android E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.android, PID: 31404
    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/squareup/picasso/OkHttpDownloader;
        at com.google.firebase.inappmessaging.display.internal.injection.modules.PicassoModule.providesFiamController(com.google.firebase:firebase-inappmessaging-display@@17.1.1:52)
        at com.google.firebase.inappmessaging.display.internal.injection.modules.PicassoModule_ProvidesFiamControllerFactory.get(com.google.firebase:firebase-inappmessaging-display@@17.1.1:34)
        at com.google.firebase.inappmessaging.display.internal.injection.modules.PicassoModule_ProvidesFiamControllerFactory.get(com.google.firebase:firebase-inappmessaging-display@@17.1.1:11)
        at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
        at com.google.firebase.inappmessaging.display.internal.FiamImageLoader_Factory.get(com.google.firebase:firebase-inappmessaging-display@@17.1.1:21)
        at com.google.firebase.inappmessaging.display.internal.FiamImageLoader_Factory.get(com.google.firebase:firebase-inappmessaging-display@@17.1.1:8)
        at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
        at com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay_Factory.get(com.google.firebase:firebase-inappmessaging-display@@17.1.1:62)
        at com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay_Factory.get(com.google.firebase:firebase-inappmessaging-display@@17.1.1:16)
        at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
        at com.google.firebase.inappmessaging.display.internal.injection.components.DaggerAppComponent.providesFirebaseInAppMessagingUI(com.google.firebase:firebase-inappmessaging-display@@17.1.1:102)
        at com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplayRegistrar.buildFirebaseInAppMessagingUI(com.google.firebase:firebase-inappmessaging-display@@17.1.1:74)
        at com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplayRegistrar.access$lambda$0(Unknown Source:0)
        at com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplayRegistrar$$Lambda$1.create(Unknown Source:2)
        at com.google.firebase.components.ComponentRuntime.lambda$new$0(com.google.firebase:firebase-common@@17.0.0:66)
        at com.google.firebase.components.ComponentRuntime$$Lambda$1.get(Unknown Source:4)
        at com.google.firebase.components.Lazy.get(com.google.firebase:firebase-common@@17.0.0:53)
        at com.google.firebase.components.ComponentRuntime.initializeEagerComponents(com.google.firebase:firebase-common@@17.0.0:155)
        at com.google.firebase.FirebaseApp.initializeAllApis(com.google.firebase:firebase-common@@17.0.0:642)
        at com.google.firebase.FirebaseApp.initializeApp(com.google.firebase:firebase-common@@17.0.0:358)
        at com.google.firebase.FirebaseApp.initializeApp(com.google.firebase:firebase-common@@17.0.0:321)
        at com.google.firebase.FirebaseApp.initializeApp(com.google.firebase:firebase-common@@17.0.0:305)
        at com.google.firebase.provider.FirebaseInitProvider.onCreate(com.google.firebase:firebase-common@@17.0.0:53)
        at android.content.ContentProvider.attachInfo(ContentProvider.java:1920)
        at android.content.ContentProvider.attachInfo(ContentProvider.java:1895)
        at com.google.firebase.provider.FirebaseInitProvider.attachInfo(com.google.firebase:firebase-common@@17.0.0:47)
        at android.app.ActivityThread.installProvider(ActivityThread.java:6440)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:5987)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5902)
        at android.app.ActivityThread.access$1100(ActivityThread.java:200)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6718)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
2019-05-24 12:33:05.580 31404-31404/com.example.android E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.squareup.picasso.OkHttpDownloader" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.example.android-5S_ZIreCxrfj2KN-yqj3cQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.android-5S_ZIreCxrfj2KN-yqj3cQ==/lib/arm64, /system/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        	... 37 more

All Constraint Layouts shift to the right

Just when I insert your
implementation 'com.github.rtchagas:pingplacepicker:1.1.0'
in my gradle, all the constraintLayouts that I am using in my app shift to the right.
I haven't used its functionality in my app yet, just inserted the implementation and this happened.

What are you using in your library? Which version of constraintLayout?

Error when importing library : java.lang.RuntimeException: com.android.build.api.transform.TransformException

After I added the project and synced, I got the following error:

java.lang.RuntimeException: com.android.build.api.transform.TransformException: Error while generating the main dex list:
Error while merging dex archives: 
Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
Program type already present: com.google.android.material.internal.package-info
	at com.android.builder.profile.Recorder$Block.handleException(Recorder.java:55)
	at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:104)
	at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
	at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:50)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
	at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
	at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
	at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
	at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
	at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
	at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
	at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
	at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
	at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
	at java.lang.Thread.run(Thread.java:745)
Caused by: com.android.build.api.transform.TransformException: Error while generating the main dex list:
Error while merging dex archives: 
Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
Program type already present: com.google.android.material.internal.package-info
	at com.android.build.gradle.internal.transforms.D8MainDexListTransform.transform(D8MainDexListTransform.kt:147)
	at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239)
	at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235)
	at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
	... 51 more
Caused by: com.android.builder.multidex.D8MainDexList$MainDexListException: Error while merging dex archives: 
Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
Program type already present: com.google.android.material.internal.package-info
	at com.android.builder.multidex.D8MainDexList.getExceptionToRethrow(D8MainDexList.java:107)
	at com.android.builder.multidex.D8MainDexList.generate(D8MainDexList.java:95)
	at com.android.build.gradle.internal.transforms.D8MainDexListTransform.transform(D8MainDexListTransform.kt:131)
	... 54 more
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete
	at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:70)
	at com.android.tools.r8.utils.ExceptionUtils.withMainDexListHandler(ExceptionUtils.java:53)
	at com.android.tools.r8.GenerateMainDexList.run(GenerateMainDexList.java:118)
	at com.android.builder.multidex.D8MainDexList.generate(D8MainDexList.java:93)
	... 55 more
Caused by: com.android.tools.r8.utils.AbortException: Error: Program type already present: com.google.android.material.internal.package-info
	at com.android.tools.r8.utils.Reporter.failIfPendingErrors(Reporter.java:89)
	at com.android.tools.r8.utils.Reporter.fatalError(Reporter.java:60)
	at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:64)

Error after you turn off the location once and again turn on just before opening the pingplacepicker: java.lang.IllegalStateException: location must not be null

Process: com.android.example, PID: 32297
java.lang.IllegalStateException: location must not be null
at com.rtchagas.pingplacepicker.ui.PlacePickerActivity$getDeviceLocation$2.onSuccess(PlacePickerActivity.kt:236)
at com.rtchagas.pingplacepicker.ui.PlacePickerActivity$getDeviceLocation$2.onSuccess(PlacePickerActivity.kt:47)
at com.google.android.gms.tasks.zzn.run(Unknown Source:4)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6863)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Forcing user to enable location detection

Hi,
I have a simple question regarding the search bar. Why is the user only able to search when he enables location detection on his device? Wouldn't it be better to allow searching also when the user has location detection disabled?
Thanks in advance.

support for setLatLngBounds

Hey there,

Th old google place picker had the ablity to set an initial location different than the current location via builder.setLatLngBounds(latLngBounds)

I need to be able to edit already picked locations so this would be really helpful. Is there support planned for that?

java.lang.NoSuchFieldError: No static field rvNearbyPlaces of type I in class Lcom/rtchagas/pingplacepicker/R$id; or its superclasses (declaration of 'com.rtchagas.pingplacepicker.R$id' appears

02-19 19:29:21.903 21021-21021/ptsinergiterangbangsa.listrikon.pelanggan E/AndroidRuntime: FATAL EXCEPTION: main
    Process: ptsinergiterangbangsa.listrikon.pelanggan, PID: 21021
    java.lang.NoSuchFieldError: No static field rvNearbyPlaces of type I in class Lcom/rtchagas/pingplacepicker/R$id; or its superclasses (declaration of 'com.rtchagas.pingplacepicker.R$id' appears in /data/app/ptsinergiterangbangsa.listrikon.pelanggan-2/base.apk:classes2.dex)
        at com.rtchagas.pingplacepicker.ui.PlacePickerActivity.initializeUi(PlacePickerActivity.kt:367)
        at com.rtchagas.pingplacepicker.ui.PlacePickerActivity.onCreate(PlacePickerActivity.kt:119)
        at android.app.Activity.performCreate(Activity.java:6355)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2440)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2547)
        at android.app.ActivityThread.access$1100(ActivityThread.java:151)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1398)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:157)
        at android.app.ActivityThread.main(ActivityThread.java:5603)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:774)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652)

I don't have any idea what the cause of this issue. Any help?

min sdk 24 required

Buils log

Configure project :app
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)

Task :app:buildInfoDebugLoader
Task :app:preBuild UP-TO-DATE
Task :app:preDebugBuild UP-TO-DATE
Task :app:compileDebugAidl NO-SOURCE
Task :app:checkDebugManifest UP-TO-DATE
Task :app:compileDebugRenderscript NO-SOURCE
Task :app:generateDebugBuildConfig UP-TO-DATE
Task :app:prepareLintJar UP-TO-DATE
Task :app:writeDebugApplicationId UP-TO-DATE

Task :app:processDebugGoogleServices
Parsing json file: C:\Users\Rishab aggarwal\Desktop\Findme\app\google-services.json

Task :app:generateDebugSources
Task :app:javaPreCompileDebug UP-TO-DATE
Task :app:mainApkListPersistenceDebug UP-TO-DATE
Task :app:generateDebugResValues UP-TO-DATE
Task :app:generateDebugResources UP-TO-DATE
Task :app:createDebugCompatibleScreenManifests UP-TO-DATE
Task :app:processDebugManifest UP-TO-DATE
Task :app:mergeDebugResources UP-TO-DATE
Task :app:processDebugResources UP-TO-DATE
Task :app:compileDebugJavaWithJavac UP-TO-DATE
Task :app:mergeDebugShaders UP-TO-DATE
Task :app:compileDebugShaders UP-TO-DATE
Task :app:generateDebugAssets UP-TO-DATE
Task :app:validateSigningDebug UP-TO-DATE
Task :app:signingConfigWriterDebug UP-TO-DATE
Task :app:processInstantRunDebugResourcesApk UP-TO-DATE
Task :app:mergeDebugAssets UP-TO-DATE
Task :app:packageInstantRunResourcesDebug UP-TO-DATE
Task :app:checkManifestChangesDebug
Task :app:transformClassesWithExtractJarsForDebug UP-TO-DATE
Task :app:transformClassesWithInstantRunVerifierForDebug UP-TO-DATE
Task :app:checkDebugDuplicateClasses UP-TO-DATE
Task :app:transformClassesWithDependencyCheckerForDebug UP-TO-DATE
Task :app:mergeDebugJniLibFolders UP-TO-DATE
Task :app:processDebugJavaRes NO-SOURCE
Task :app:transformResourcesWithMergeJavaResForDebug UP-TO-DATE
Task :app:transformNativeLibsWithMergeJniLibsForDebug UP-TO-DATE
Task :app:transformNativeLibsAndResourcesWithJavaResourcesVerifierForDebug UP-TO-DATE
Task :app:transformClassesWithInstantRunForDebug UP-TO-DATE
Task :app:transformClassesAndClassesEnhancedWithInstantReloadDexForDebug UP-TO-DATE
Task :app:incrementalDebugTasks UP-TO-DATE
Task :app:preColdswapDebug
Task :app:fastDeployDebugExtractor UP-TO-DATE
Task :app:generateDebugInstantRunAppInfo UP-TO-DATE
AGPBI: {"kind":"error","text":"Default interface methods are only supported starting with Android N (--min-api 24): void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"error","text":"Static interface methods are only supported starting with Android N (--min-api 24): void okhttp3.logging.HttpLoggingInterceptor$Logger.lambda$static$0(java.lang.String)","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"error","text":"Invoke-customs are only supported starting with Android O (--min-api 26)","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"error","text":"Invoke-customs are only supported starting with Android O (--min-api 26)","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"error","text":"Static interface methods are only supported starting with Android N (--min-api 24): java.util.List okhttp3.Dns.lambda$static$0(java.lang.String)","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"error","text":"Invoke-customs are only supported starting with Android O (--min-api 26)","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"error","text":"Static interface methods are only supported starting with Android N (--min-api 24): okhttp3.Request okhttp3.Authenticator.lambda$static$0(okhttp3.Route, okhttp3.Response)","sources":[{}],"tool":"D8"}

Task :app:transformClassesWithDexBuilderForDebug
com.android.builder.dexing.DexArchiveBuilderException: com.android.builder.dexing.DexArchiveBuilderException: Failed to process C:\gradle-4.9\caches\modules-2\files-2.1\com.squareup.okhttp3\okhttp\3.13.1\b49cf3799bd473199e96c4fb9987e9e08395a1c0\okhttp-3.13.1.jar
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:593)
at java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:677)
at java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:720)
at com.android.ide.common.internal.WaitableExecutor.waitForTasksWithQuickFail(WaitableExecutor.java:149)
at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.transform(DexArchiveBuilderTransform.java:420)
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239)
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235)
at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:47)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:41)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.run(ExecuteActionsTaskExecuter.java:284)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:273)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:258)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$200(ExecuteActionsTaskExecuter.java:67)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:145)
at org.gradle.internal.execution.impl.steps.ExecuteStep.execute(ExecuteStep.java:49)
at org.gradle.internal.execution.impl.steps.CancelExecutionStep.execute(CancelExecutionStep.java:34)
at org.gradle.internal.execution.impl.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:69)
at org.gradle.internal.execution.impl.steps.TimeoutStep.execute(TimeoutStep.java:49)
at org.gradle.internal.execution.impl.steps.CatchExceptionStep.execute(CatchExceptionStep.java:33)
at org.gradle.internal.execution.impl.steps.CreateOutputsStep.execute(CreateOutputsStep.java:50)
at org.gradle.internal.execution.impl.steps.SnapshotOutputStep.execute(SnapshotOutputStep.java:43)
at org.gradle.internal.execution.impl.steps.SnapshotOutputStep.execute(SnapshotOutputStep.java:29)
at org.gradle.internal.execution.impl.steps.CacheStep.executeWithoutCache(CacheStep.java:134)
at org.gradle.internal.execution.impl.steps.CacheStep.lambda$execute$3(CacheStep.java:83)
at java.util.Optional.orElseGet(Optional.java:267)
at org.gradle.internal.execution.impl.steps.CacheStep.execute(CacheStep.java:82)
at org.gradle.internal.execution.impl.steps.CacheStep.execute(CacheStep.java:36)
at org.gradle.internal.execution.impl.steps.PrepareCachingStep.execute(PrepareCachingStep.java:33)
at org.gradle.internal.execution.impl.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:38)
at org.gradle.internal.execution.impl.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:23)
at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:96)
at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:89)
at java.util.Optional.map(Optional.java:215)
at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:52)
at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:36)
at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:34)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:91)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:91)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:57)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:119)
at org.gradle.api.internal.tasks.execution.ResolvePreviousStateExecuter.execute(ResolvePreviousStateExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:93)
at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:45)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:94)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:56)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:55)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:67)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:49)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:315)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:305)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:101)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:49)
at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.android.builder.dexing.DexArchiveBuilderException: Failed to process C:\gradle-4.9\caches\modules-2\files-2.1\com.squareup.okhttp3\okhttp\3.13.1\b49cf3799bd473199e96c4fb9987e9e08395a1c0\okhttp-3.13.1.jar
at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.launchProcessing(DexArchiveBuilderTransform.java:909)
at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.lambda$convertToDexArchive$6(DexArchiveBuilderTransform.java:834)
at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: com.android.builder.dexing.DexArchiveBuilderException: Error while dexing.
at com.android.builder.dexing.D8DexArchiveBuilder.getExceptionToRethrow(D8DexArchiveBuilder.java:124)
at com.android.builder.dexing.D8DexArchiveBuilder.convert(D8DexArchiveBuilder.java:101)
at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.launchProcessing(DexArchiveBuilderTransform.java:904)
... 6 more
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete
at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:81)
at com.android.tools.r8.utils.ExceptionUtils.withD8CompilationHandler(ExceptionUtils.java:45)
at com.android.tools.r8.D8.run(D8.java:94)
at com.android.builder.dexing.D8DexArchiveBuilder.convert(D8DexArchiveBuilder.java:99)
... 7 more
Caused by: com.android.tools.r8.utils.AbortException: Error: Static interface methods are only supported starting with Android N (--min-api 24): okhttp3.Request okhttp3.Authenticator.lambda$static$0(okhttp3.Route, okhttp3.Response)
at com.android.tools.r8.utils.Reporter.failIfPendingErrors(Reporter.java:101)
at com.android.tools.r8.utils.Reporter.fatalError(Reporter.java:72)
at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:66)
... 10 more

Task :app:transformClassesWithDexBuilderForDebug FAILED
Task :app:buildInfoGeneratorDebug

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:transformClassesWithDexBuilderForDebug'.

com.android.build.api.transform.TransformException: com.android.builder.dexing.DexArchiveBuilderException: com.android.builder.dexing.DexArchiveBuilderException: Failed to process C:\gradle-4.9\caches\modules-2\files-2.1\com.squareup.okhttp3\okhttp\3.13.1\b49cf3799bd473199e96c4fb9987e9e08395a1c0\okhttp-3.13.1.jar

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.1.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 21s
38 actionable tasks: 6 executed, 32 up-to-date

Google Maps Android API: Authorization failure - no maps

Trying to get this to work.

I've supplied an android key and a geolocation api key and it seems to work fine except for the fact that the actual map doesnt show. logcat shows the following:

Google Maps Android API: Authorization failure
05-18 21:07:47.652  8888  8973 E Google Maps Android API: In the Google Developer Console (https://console.developers.google.com)
05-18 21:07:47.652  8888  8973 E Google Maps Android API: Ensure that the "Google Maps Android API v2" is enabled.
05-18 21:07:47.652  8888  8973 E Google Maps Android API: Ensure that the following Android Key exists:
05-18 21:07:47.652  8888  8973 E Google Maps Android API: 	API Key: AIza<redacted>-2rbZITE9iwI
05-18 21:07:47.652  8888  8973 E Google Maps Android API: 	Android Application (<cert_fingerprint>;<package_name>): <redacted>
05-18 21:11:43.283  8888  8888 I [Koin]  : bind type:'com.rtchagas.pingplacepicker.repository.googlemaps.GoogleMapsAPI' ~ [type:Single,class:'com.rtchagas.pingplacepicker.repository.googlemaps.GoogleMapsAPI']

What am I missing?

"Select this location" don't work

There is a bug in the app. Select this location in the place where is no place on the mapp don't work. I'm working on fix, I'll submit PR soon.

Cann't inflating class androidx.coordinatorlayout.widget.CoordinatorLayout

Add the library to my project and run to crash.
It seems that error is "class androidx.coordinatorlayout.widget.CoordinatorLayout".

java.lang.RuntimeException: Unable to start activity ComponentInfo{cn.oneplus.opmms/com.rtchagas.pingplacepicker.ui.PlacePickerActivity}: android.view.InflateException: Binary XML file line #2 in cn.oneplus.opmms:layout/activity_place_picker: Binary XML file line #2 in cn.oneplus.opmms:layout/activity_place_picker: Error inflating class androidx.coordinatorlayout.widget.CoordinatorLayout
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3368)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3507)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2106)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7512)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:530)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:948)
Caused by: android.view.InflateException: Binary XML file line #2 in cn.oneplus.opmms:layout/activity_place_picker: Binary XML file line #2 in cn.oneplus.opmms:layout/activity_place_picker: Error inflating class androidx.coordinatorlayout.widget.CoordinatorLayout
Caused by: android.view.InflateException: Binary XML file line #2 in cn.oneplus.opmms:layout/activity_place_picker: Error inflating class androidx.coordinatorlayout.widget.CoordinatorLayout
Caused by: java.lang.ClassNotFoundException: androidx.coordinatorlayout.widget.CoordinatorLayout

getRating() and getUserRatingsTotal() always return null

Hello,
No matter the location I choose place.getRating() returns null, even when there are reviews in google maps (getAddress(), getLatLng and getName() work perfectly) .
An idea of why ?
By the way thanks for that place picker !

Crash on calling activity, rvNearbyPlaces missing.

Process: gps_route_finder_nearby_video.navigation.direction, PID: 19561 java.lang.NoSuchFieldError: No static field rvNearbyPlaces of type I in class Lcom/rtchagas/pingplacepicker/R$id; or its superclasses (declaration of 'com.rtchagas.pingplacepicker.R$id' appears in /data/app/gps_route_finder_nearby_video.navigation.direction-SNqdVdncdDTkgxdQO8CE5Q==/split_lib_slice_0_apk.apk) at com.rtchagas.pingplacepicker.ui.PlacePickerActivity.initializeUi(PlacePickerActivity.kt:367) at com.rtchagas.pingplacepicker.ui.PlacePickerActivity.onCreate(PlacePickerActivity.kt:119) at android.app.Activity.performCreate(Activity.java:7327) at android.app.Activity.performCreate(Activity.java:7318) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1275) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3095) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3258) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1955) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7073) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)

Can't get nearby places or selected places.

Hello ,
I used your library as a replacement for the placepicker and i can't seem to make it work,
i have added and restricted the api Keys ( for geo and for place sdk ) , and i can't seem to be able to load nearby places for some reason .. can you help me ?

Got Crash.

Couldn't find out the step..
io.reactivex.exceptions.UndeliverableException: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | com.google.android.gms.common.api.ApiException: 15: Unexpected server error (HTTP Code: N/A. Message: com.android.volley.TimeoutError.)
at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:367)
at io.reactivex.internal.operators.single.SingleCreate$Emitter.onError(SingleCreate.java:81)
at com.rtchagas.pingplacepicker.repository.googlemaps.GoogleMapsRepository$getPlacePhoto$1$2.onFailure(GoogleMapsRepository.kt:105)
at com.google.android.gms.tasks.zzl.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6165)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)

Wrong lat and long while picking the centered marker position

When I use the latitude and longitude received from:
Place place = PingPlacePicker.Companion.getPlace(data);

and use the same lat-long in google maps, the marker instead of pointing to the location what I selected in the library now points to some nearby location. Can you please help me out with this issue. Please refer the screenshots for your reference.
Screenshot_20190329-104815
Screenshot_20190329-104901

It is not possible set an API Key restriction for web using Android

Because the use of a web key API is mandatory, we have a limitation when we go on this way. The restrictions of the web APIs uses an URL from website and we cannot use the option to restrict it for Android devices, because requests are made via REST and the android signature doesn't work for anything.

please add turkish language

Ping Place Picker
<string name="picker_title">Select a location</string>
<string name="picker_select_this">Bu konumu seç</string>
<string name="picker_or_select_nearby">İsterseniz yakındaki bir yeri seçin</string>
<string name="picker_load_places_error">"Yakında bir yer bulunamadı..."</string>
<string name="picker_load_this_place_error">"Seçtiğiniz yer bulunamadı..."</string>
<string name="picker_place_confirm">Bu konum kullanılsın mı?</string>
<string name="picker_place_confirm_cancel">Konumu Değiştir</string>
<string name="picker_location_unavailable">Lokasyon Bulunamadı</string>

<!-- Content descriptions -->
<string name="description_place_image">Seçilen yerin fotoğrafı</string>
<string name="description_place_map">Seçilen yerin haritası</string>

<!-- Permissions -->
<string name="permission_fine_location_title">Konum İzini</string>
<string name="permission_fine_location_message">Yakındaki yerleri gösterebilmek için konum izinine ihtiyacımız var.</string>

100% free version

Isn't is possible to have a 100% free version when I only use a gps location picker without any places/search features?

Wish List

Hi, @rtchagas
I am university student in taiwan
I have a app about hail a taxi for user, but place picker deprecated by Google
This library is useful for me, and I have a bold request

May you add the function about the following

  1. Set country or set latitude and longitude to narrow the range in no positioning
  2. Set multilingual to change text

Thanks for your reading

Manifest and API keys errors

Task :app:processDebugManifest FAILED
X:\Android\beebagi\app\src\main\AndroidManifest.xml:22:18-91 Error:
Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91
is also present at [androidx.core:core:1.1.0-alpha05] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
Suggestion: add 'tools:replace="android:appComponentFactory"' to element at AndroidManifest.xml:6:5-44:19 to override.

See http://g.co/androidstudio/manifest-merger for more information about the manifest merger.

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:processDebugManifest'.

Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91
is also present at [androidx.core:core:1.1.0-alpha05] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
Suggestion: add 'tools:replace="android:appComponentFactory"' to element at AndroidManifest.xml:6:5-44:19 to override.

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 3s
6 actionable tasks: 1 executed, 5 up-to-date
ERROR: Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91
is also present at [androidx.core:core:1.1.0-alpha05] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
Suggestion: add 'tools:replace="android:appComponentFactory"' to element at AndroidManifest.xml:6:5-44:19 to override.

PlacePickerActivity crash when reopen the activity without location permission

Disable app's location permisson and reopen the PlacePickerActivity from recent app menu , then it carsh. 100% Probability.

2019-07-22 10:25:09.642 24929-24929/cn.oneplus.opmms D/AndroidRuntime: Shutting down VM
2019-07-22 10:25:09.642 24929-24929/cn.oneplus.opmms E/AndroidRuntime: FATAL EXCEPTION: main
Process: cn.oneplus.opmms, PID: 24929
kotlin.KotlinNullPointerException
at com.rtchagas.pingplacepicker.inject.PingKoinComponent$DefaultImpls.getKoin(PingKoinComponent.kt:15)
at com.rtchagas.pingplacepicker.ui.PlacePickerActivity.getKoin(PlacePickerActivity.kt:53)
at org.koin.android.ext.android.ComponentCallbackExtKt.getKoin(ComponentCallbackExt.kt:14)
at org.koin.android.viewmodel.ext.android.LifecycleOwnerExtKt.getKoin(LifecycleOwnerExt.kt:71)
at org.koin.android.viewmodel.ext.android.LifecycleOwnerExtKt.getViewModel(LifecycleOwnerExt.kt:85)
at com.rtchagas.pingplacepicker.ui.PlacePickerActivity$$special$$inlined$viewModel$1.invoke(LifecycleOwnerExt.kt:95)
at com.rtchagas.pingplacepicker.ui.PlacePickerActivity$$special$$inlined$viewModel$1.invoke(Unknown Source:0)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at com.rtchagas.pingplacepicker.ui.PlacePickerActivity.getViewModel(Unknown Source:7)
at com.rtchagas.pingplacepicker.ui.PlacePickerActivity.refreshNearbyPlaces(PlacePickerActivity.kt:490)
at com.rtchagas.pingplacepicker.ui.PlacePickerActivity.access$refreshNearbyPlaces(PlacePickerActivity.kt:53)
at com.rtchagas.pingplacepicker.ui.PlacePickerActivity$handler$1.handleMessage(PlacePickerActivity.kt:204)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6940)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Add support for map pointing

Hello rtchagas,

First all thank you for this amazing library. It is exactly what I am looking for.
I would like to add support for map pointing.
My idea is to add a button on top of the gps one, so when is pushed the places requested are those closer to the center of the map (or the ping). This is for a personal app to keep track of my expenses and I usually do this when I am at home, not at supermarket, bar, etc.

I tried to do it myself but I got lost in the function getNearbyPlaces in GoogleMapsRepository, as you do not need to provide a LatLng I guess the system automatically gets the location from the device when building the FindCurrentPlaceRequest.

Again thank you for your time and effort

Regards,

Got a runtime fatal error when clicked search.

image

Another bug is the map not shown.

image

Seems really wrong with the auth, but I gave set every configuration as the documentation.
This just happen on certain devices, currently only appear in Samsung Galaxy S7 Edge.

Looking forward for your response.
Thanks in advance.

I have got this critical error

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.app.flexinc, PID: 29546
java.lang.NoSuchFieldError: No static field rvNearbyPlaces of type I in class Lcom/rtchagas/pingplacepicker/R$id; or its superclasses (declaration of 'com.rtchagas.pingplacepicker.R$id' appears in /data/app/com.app.flexinc-atO6mhm2cIs_NAHrWD0tgA==/split_lib_slice_0_apk.apk)
at com.rtchagas.pingplacepicker.ui.PlacePickerActivity.initializeUi(PlacePickerActivity.kt:383)
at com.rtchagas.pingplacepicker.ui.PlacePickerActivity.onCreate(PlacePickerActivity.kt:130)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

java.lang.UnsupportedOperationException crash when open picker

java.lang.UnsupportedOperationException at com.google.android.libraries.places.internal.hv.set(PG:3) at java.util.List.sort(List.java:504) at java.util.Collections.sort(Collections.java:201) at kotlin.collections.CollectionsKt__MutableCollectionsJVMKt.sortWith(MutableCollectionsJVM.kt:38) at com.rtchagas.pingplacepicker.repository.googlemaps.GoogleMapsRepository.sortByLikelihood(GoogleMapsRepository.kt:146) at com.rtchagas.pingplacepicker.repository.googlemaps.GoogleMapsRepository.access$sortByLikelihood(GoogleMapsRepository.kt:21) at com.rtchagas.pingplacepicker.repository.googlemaps.GoogleMapsRepository$getNearbyPlaces$1$1.onComplete(GoogleMapsRepository.kt:46) at com.google.android.gms.tasks.zzj.run(Unknown Source:4) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6518) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.