implement places search

This commit is contained in:
Johan von Forstner
2020-04-12 20:17:07 +02:00
parent 04fef1e5d2
commit 749f3e242b
4 changed files with 32 additions and 1 deletions

View File

@@ -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));
}
}

View File

@@ -16,7 +16,6 @@ import com.johan.evmap.api.ChargeLocation
const val REQUEST_LOCATION_PERMISSION = 1
class MapsActivity : AppCompatActivity() {
interface FragmentCallback {
fun getRootView(): CoordinatorLayout

View File

@@ -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<out String>,
@@ -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