Skip to content

Commit b00326c

Browse files
author
Michael Tran
committed
Merge branch '24-locationstate-livedata-returns-outdated-values' into 'master'
Resolve "LocationState LiveData returns outdated values" Closes #24 See merge request pace/mobile/android/pace-cloud-sdk!19
2 parents 8b34795 + 03582f2 commit b00326c

File tree

3 files changed

+38
-20
lines changed

3 files changed

+38
-20
lines changed

library/src/main/java/cloud/pace/sdk/appkit/location/AppLocationManager.kt

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -39,26 +39,25 @@ class AppLocationManagerImpl(
3939
}
4040
}
4141
}
42-
private val locationStateObserver: Observer<LocationState> by lazy {
43-
Observer<LocationState> {
44-
if (it == LocationState.PERMISSION_DENIED) {
45-
callback?.invoke(Result.failure(PermissionDenied))
46-
stop()
47-
} else if (it == LocationState.NO_LOCATION_FOUND) {
48-
callback?.invoke(Result.failure(NoLocationFound))
49-
stop()
50-
}
51-
}
52-
}
5342

5443
override fun start(callback: (Result<Location>) -> Unit) {
5544
this.callback = callback
5645
startTime = systemManager.getCurrentTimeMillis()
5746
handler.postDelayed(locationTimeoutRunnable, LOCATION_TIMEOUT)
58-
locationProvider.apply {
59-
location.observeForever(locationObserver)
60-
locationState.observeForever(locationStateObserver)
61-
requestLocationUpdates()
47+
48+
when (locationProvider.getLocationState()) {
49+
LocationState.PERMISSION_DENIED -> {
50+
callback(Result.failure(PermissionDenied))
51+
stop()
52+
}
53+
LocationState.NO_LOCATION_FOUND -> {
54+
callback(Result.failure(NoLocationFound))
55+
stop()
56+
}
57+
else -> {
58+
locationProvider.location.observeForever(locationObserver)
59+
locationProvider.requestLocationUpdates()
60+
}
6261
}
6362
}
6463

@@ -99,11 +98,8 @@ class AppLocationManagerImpl(
9998

10099
override fun stop() {
101100
handler.removeCallbacks(locationTimeoutRunnable)
102-
locationProvider.apply {
103-
location.removeObserver(locationObserver)
104-
locationState.removeObserver(locationStateObserver)
105-
removeLocationUpdates()
106-
}
101+
locationProvider.location.removeObserver(locationObserver)
102+
locationProvider.removeLocationUpdates()
107103
}
108104

109105
companion object {

library/src/main/java/cloud/pace/sdk/utils/LocationProvider.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ interface LocationProvider {
2222

2323
fun requestLocationUpdates()
2424
fun getLastKnownLocation(completion: (Location?) -> Unit)
25+
fun getLocationState(): LocationState
2526
fun removeLocationUpdates()
2627
}
2728

@@ -129,6 +130,23 @@ class LocationProviderImpl(
129130
}
130131
}
131132

133+
override fun getLocationState(): LocationState {
134+
return when {
135+
!systemManager.isLocationPermissionGranted() -> {
136+
LocationState.PERMISSION_DENIED
137+
}
138+
locationManager?.isProviderEnabled(LocationManager.GPS_PROVIDER) == true -> {
139+
LocationState.LOCATION_HIGH_ACCURACY
140+
}
141+
locationManager?.isProviderEnabled(LocationManager.NETWORK_PROVIDER) == true -> {
142+
LocationState.LOCATION_LOW_ACCURACY
143+
}
144+
else -> {
145+
LocationState.NO_LOCATION_FOUND
146+
}
147+
}
148+
}
149+
132150
override fun removeLocationUpdates() {
133151
try {
134152
context.unregisterReceiver(locationProviderReceiver)

library/src/test/java/cloud/pace/sdk/appkit/utils/MockFactory.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ open class TestLocationProvider(private val mockedLocationState: LocationState,
4040
completion(mockedLocation)
4141
}
4242

43+
override fun getLocationState(): LocationState {
44+
return mockedLocationState
45+
}
46+
4347
override fun removeLocationUpdates() {}
4448
}
4549

0 commit comments

Comments
 (0)