11package com.marknkamau.justjava.ui.addAddress
22
3+ import android.Manifest
34import android.app.Activity
5+ import android.content.Context
46import android.content.Intent
7+ import android.content.pm.PackageManager
8+ import android.location.Location
59import android.os.Bundle
610import androidx.appcompat.app.AppCompatActivity
11+ import androidx.core.app.ActivityCompat
12+ import androidx.core.content.ContextCompat
713import com.google.android.gms.common.api.Status
14+ import com.google.android.gms.location.LocationServices
815import com.google.android.gms.maps.CameraUpdateFactory
916import com.google.android.gms.maps.GoogleMap
1017import com.google.android.gms.maps.OnMapReadyCallback
@@ -17,6 +24,10 @@ import com.marknjunge.core.data.model.Address
1724import com.marknkamau.justjava.R
1825import com.marknkamau.justjava.utils.trimmedText
1926import kotlinx.android.synthetic.main.activity_add_address.*
27+ import kotlinx.coroutines.CoroutineScope
28+ import kotlinx.coroutines.Dispatchers
29+ import kotlinx.coroutines.launch
30+ import kotlinx.coroutines.tasks.await
2031import timber.log.Timber
2132
2233class AddAddressActivity : AppCompatActivity (), OnMapReadyCallback {
@@ -27,6 +38,9 @@ class AddAddressActivity : AppCompatActivity(), OnMapReadyCallback {
2738
2839 private lateinit var googleMap: GoogleMap
2940 private lateinit var target: LatLng
41+ private val PERMISSIONS_REQUEST = 99
42+ private val fusedLocationClient by lazy { LocationServices .getFusedLocationProviderClient(this ) }
43+ private val uiCoroutineScope = CoroutineScope (Dispatchers .Main )
3044
3145 override fun onCreate (savedInstanceState : Bundle ? ) {
3246 super .onCreate(savedInstanceState)
@@ -74,6 +88,35 @@ class AddAddressActivity : AppCompatActivity(), OnMapReadyCallback {
7488 googleMap.setOnCameraIdleListener {
7589 target = googleMap.cameraPosition.target
7690 }
91+
92+
93+ if (hasPermission(Manifest .permission.ACCESS_FINE_LOCATION )) {
94+ getLastLocation()
95+ } else {
96+ ActivityCompat .requestPermissions(
97+ this ,
98+ arrayOf(Manifest .permission.ACCESS_FINE_LOCATION ),
99+ PERMISSIONS_REQUEST
100+ )
101+ }
102+ }
103+
104+ override fun onRequestPermissionsResult (requestCode : Int , permissions : Array <out String >, grantResults : IntArray ) {
105+ if (requestCode == PERMISSIONS_REQUEST ) {
106+ if (grantResults.permissionsGranted()) {
107+ getLastLocation()
108+ }
109+ }
110+ }
111+
112+ private fun getLastLocation () {
113+ uiCoroutineScope.launch {
114+ val location: Location ? = fusedLocationClient.lastLocation.await()
115+ location?.let {
116+ val userLoc = LatLng (it.latitude, it.longitude)
117+ googleMap.animateCamera(CameraUpdateFactory .newLatLngZoom(userLoc, 14f ))
118+ }
119+ }
77120 }
78121
79122 private fun isValid (): Boolean {
@@ -88,4 +131,9 @@ class AddAddressActivity : AppCompatActivity(), OnMapReadyCallback {
88131 }
89132
90133 private fun LatLng.asString () = " $latitude ,$longitude "
134+
135+ private fun Context.hasPermission (permission : String ) =
136+ ContextCompat .checkSelfPermission(this , permission) == PackageManager .PERMISSION_GRANTED
137+
138+ private fun IntArray.permissionsGranted () = this .isNotEmpty() && this [0 ] == PackageManager .PERMISSION_GRANTED
91139}
0 commit comments