Skip to content
This repository was archived by the owner on Dec 16, 2023. It is now read-only.

Commit a651c3c

Browse files
committed
Use last Known location as default when adding an address
1 parent dcdd613 commit a651c3c

1 file changed

Lines changed: 48 additions & 0 deletions

File tree

app/src/main/java/com/marknkamau/justjava/ui/addAddress/AddAddressActivity.kt

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
package com.marknkamau.justjava.ui.addAddress
22

3+
import android.Manifest
34
import android.app.Activity
5+
import android.content.Context
46
import android.content.Intent
7+
import android.content.pm.PackageManager
8+
import android.location.Location
59
import android.os.Bundle
610
import androidx.appcompat.app.AppCompatActivity
11+
import androidx.core.app.ActivityCompat
12+
import androidx.core.content.ContextCompat
713
import com.google.android.gms.common.api.Status
14+
import com.google.android.gms.location.LocationServices
815
import com.google.android.gms.maps.CameraUpdateFactory
916
import com.google.android.gms.maps.GoogleMap
1017
import com.google.android.gms.maps.OnMapReadyCallback
@@ -17,6 +24,10 @@ import com.marknjunge.core.data.model.Address
1724
import com.marknkamau.justjava.R
1825
import com.marknkamau.justjava.utils.trimmedText
1926
import 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
2031
import timber.log.Timber
2132

2233
class 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

Comments
 (0)