From 749f3e242b1364039de2aeaebeff5c7f4def5b4f Mon Sep 17 00:00:00 2001 From: Johan von Forstner Date: Sun, 12 Apr 2020 20:17:07 +0200 Subject: [PATCH] implement places search --- app/build.gradle | 1 + .../java/com/johan/evmap/EvMapApplication.kt | 2 ++ .../main/java/com/johan/evmap/MapsActivity.kt | 1 - .../com/johan/evmap/fragment/MapFragment.kt | 29 +++++++++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 9ca19640..56924524 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -71,6 +71,7 @@ dependencies { implementation 'com.github.johan12345:CustomBottomSheetBehavior:c2dcf0dc' implementation 'com.google.android.gms:play-services-maps:17.0.0' implementation 'com.google.android.gms:play-services-location:17.0.0' + implementation 'com.google.android.libraries.places:places:2.2.0' implementation 'com.squareup.retrofit2:retrofit:2.7.2' implementation 'com.squareup.retrofit2:converter-moshi:2.7.2' implementation 'com.squareup.moshi:moshi-kotlin:1.9.2' diff --git a/app/src/main/java/com/johan/evmap/EvMapApplication.kt b/app/src/main/java/com/johan/evmap/EvMapApplication.kt index 24cde797..b6b6743c 100644 --- a/app/src/main/java/com/johan/evmap/EvMapApplication.kt +++ b/app/src/main/java/com/johan/evmap/EvMapApplication.kt @@ -2,10 +2,12 @@ package com.johan.evmap import android.app.Application import com.facebook.stetho.Stetho +import com.google.android.libraries.places.api.Places class EvMapApplication : Application() { override fun onCreate() { super.onCreate() Stetho.initializeWithDefaults(this); + Places.initialize(getApplicationContext(), getString(R.string.google_maps_key)); } } \ No newline at end of file diff --git a/app/src/main/java/com/johan/evmap/MapsActivity.kt b/app/src/main/java/com/johan/evmap/MapsActivity.kt index 698e61f7..9aece720 100644 --- a/app/src/main/java/com/johan/evmap/MapsActivity.kt +++ b/app/src/main/java/com/johan/evmap/MapsActivity.kt @@ -16,7 +16,6 @@ import com.johan.evmap.api.ChargeLocation const val REQUEST_LOCATION_PERMISSION = 1 - class MapsActivity : AppCompatActivity() { interface FragmentCallback { fun getRootView(): CoordinatorLayout diff --git a/app/src/main/java/com/johan/evmap/fragment/MapFragment.kt b/app/src/main/java/com/johan/evmap/fragment/MapFragment.kt index 1cc3b584..9562925c 100644 --- a/app/src/main/java/com/johan/evmap/fragment/MapFragment.kt +++ b/app/src/main/java/com/johan/evmap/fragment/MapFragment.kt @@ -2,6 +2,7 @@ package com.johan.evmap.fragment import android.Manifest import android.annotation.SuppressLint +import android.app.Activity import android.content.Intent import android.content.pm.PackageManager import android.content.res.Configuration @@ -25,6 +26,9 @@ import com.google.android.gms.maps.GoogleMap import com.google.android.gms.maps.OnMapReadyCallback import com.google.android.gms.maps.SupportMapFragment import com.google.android.gms.maps.model.* +import com.google.android.libraries.places.api.model.Place +import com.google.android.libraries.places.widget.Autocomplete +import com.google.android.libraries.places.widget.model.AutocompleteActivityMode import com.google.android.material.snackbar.Snackbar import com.johan.evmap.GalleryActivity import com.johan.evmap.MapsActivity @@ -45,6 +49,8 @@ import com.johan.evmap.viewmodel.viewModelFactory import com.mahc.custombottomsheetbehavior.BottomSheetBehaviorGoogleMapsLike import kotlinx.android.synthetic.main.fragment_map.* +const val REQUEST_AUTOCOMPLETE = 2 + class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallback { private lateinit var binding: FragmentMapBinding private val vm: MapViewModel by viewModels(factoryProducer = { @@ -134,6 +140,15 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac binding.detailView.topPart.setOnClickListener { bottomSheetBehavior.state = BottomSheetBehaviorGoogleMapsLike.STATE_ANCHOR_POINT } + binding.search.setOnClickListener { + val fields = listOf(Place.Field.LAT_LNG) + val intent: Intent = Autocomplete.IntentBuilder( + AutocompleteActivityMode.OVERLAY, fields + ) + .build(requireContext()) + .addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION) + startActivityForResult(intent, REQUEST_AUTOCOMPLETE) + } } private fun setupObservers() { @@ -317,6 +332,7 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac ) } } + override fun onRequestPermissionsResult( requestCode: Int, permissions: Array, @@ -347,6 +363,19 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac } } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + when (requestCode) { + REQUEST_AUTOCOMPLETE -> { + if (resultCode == Activity.RESULT_OK) { + val place = Autocomplete.getPlaceFromIntent(data!!) + val zoom = 12f + map?.animateCamera(CameraUpdateFactory.newLatLngZoom(place.latLng, zoom)) + } + } + else -> super.onActivityResult(requestCode, resultCode, data) + } + } + override fun goBack(): Boolean { return if (bottomSheetBehavior.state != BottomSheetBehaviorGoogleMapsLike.STATE_COLLAPSED && bottomSheetBehavior.state != BottomSheetBehaviorGoogleMapsLike.STATE_HIDDEN