Merge pull request #6654 from vector-im/feature/mna/update-sending-period-lls
[Location share] Update minimum sending period to 5 seconds for a live
This commit is contained in:
commit
dd69b254f9
1
changelog.d/6653.misc
Normal file
1
changelog.d/6653.misc
Normal file
@ -0,0 +1 @@
|
|||||||
|
[Location share] Update minimum sending period to 5 seconds for a live
|
@ -22,5 +22,3 @@ const val DEFAULT_PIN_ID = "DEFAULT_PIN_ID"
|
|||||||
|
|
||||||
const val INITIAL_MAP_ZOOM_IN_PREVIEW = 15.0
|
const val INITIAL_MAP_ZOOM_IN_PREVIEW = 15.0
|
||||||
const val INITIAL_MAP_ZOOM_IN_TIMELINE = 17.0
|
const val INITIAL_MAP_ZOOM_IN_TIMELINE = 17.0
|
||||||
const val MIN_TIME_TO_UPDATE_LOCATION_MILLIS = 2 * 1_000L // every 2 seconds
|
|
||||||
const val MIN_DISTANCE_TO_UPDATE_LOCATION_METERS = 10f
|
|
||||||
|
@ -36,6 +36,10 @@ import kotlinx.coroutines.launch
|
|||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
import kotlin.time.Duration.Companion.seconds
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
const val MIN_DISTANCE_TO_UPDATE_LOCATION_METERS = 10f
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
class LocationTracker @Inject constructor(
|
class LocationTracker @Inject constructor(
|
||||||
@ -62,14 +66,25 @@ class LocationTracker @Inject constructor(
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
var hasLocationFromGPSProvider = false
|
var hasLocationFromGPSProvider = false
|
||||||
|
|
||||||
|
private var firstLocationHandled = false
|
||||||
private val _locations = MutableSharedFlow<Location>(replay = 1)
|
private val _locations = MutableSharedFlow<Location>(replay = 1)
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
val minDurationToUpdateLocationMillis = 5.seconds.inWholeMilliseconds
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SharedFlow to collect location updates.
|
* SharedFlow to collect location updates.
|
||||||
*/
|
*/
|
||||||
val locations = _locations.asSharedFlow()
|
val locations = _locations.asSharedFlow()
|
||||||
.onEach { Timber.d("new location emitted") }
|
.onEach { Timber.d("new location emitted") }
|
||||||
.debounce(MIN_TIME_TO_UPDATE_LOCATION_MILLIS)
|
.debounce {
|
||||||
|
if (firstLocationHandled) {
|
||||||
|
minDurationToUpdateLocationMillis
|
||||||
|
} else {
|
||||||
|
firstLocationHandled = true
|
||||||
|
0
|
||||||
|
}
|
||||||
|
}
|
||||||
.onEach { Timber.d("new location emitted after debounce") }
|
.onEach { Timber.d("new location emitted after debounce") }
|
||||||
.map { it.toLocationData() }
|
.map { it.toLocationData() }
|
||||||
|
|
||||||
@ -96,7 +111,7 @@ class LocationTracker @Inject constructor(
|
|||||||
|
|
||||||
locationManager.requestLocationUpdates(
|
locationManager.requestLocationUpdates(
|
||||||
provider,
|
provider,
|
||||||
MIN_TIME_TO_UPDATE_LOCATION_MILLIS,
|
minDurationToUpdateLocationMillis,
|
||||||
MIN_DISTANCE_TO_UPDATE_LOCATION_METERS,
|
MIN_DISTANCE_TO_UPDATE_LOCATION_METERS,
|
||||||
this
|
this
|
||||||
)
|
)
|
||||||
|
@ -76,19 +76,19 @@ class LocationTrackerTest {
|
|||||||
verifyOrder {
|
verifyOrder {
|
||||||
fakeLocationManager.instance.requestLocationUpdates(
|
fakeLocationManager.instance.requestLocationUpdates(
|
||||||
LocationManager.FUSED_PROVIDER,
|
LocationManager.FUSED_PROVIDER,
|
||||||
MIN_TIME_TO_UPDATE_LOCATION_MILLIS,
|
locationTracker.minDurationToUpdateLocationMillis,
|
||||||
MIN_DISTANCE_TO_UPDATE_LOCATION_METERS,
|
MIN_DISTANCE_TO_UPDATE_LOCATION_METERS,
|
||||||
locationTracker
|
locationTracker
|
||||||
)
|
)
|
||||||
fakeLocationManager.instance.requestLocationUpdates(
|
fakeLocationManager.instance.requestLocationUpdates(
|
||||||
LocationManager.GPS_PROVIDER,
|
LocationManager.GPS_PROVIDER,
|
||||||
MIN_TIME_TO_UPDATE_LOCATION_MILLIS,
|
locationTracker.minDurationToUpdateLocationMillis,
|
||||||
MIN_DISTANCE_TO_UPDATE_LOCATION_METERS,
|
MIN_DISTANCE_TO_UPDATE_LOCATION_METERS,
|
||||||
locationTracker
|
locationTracker
|
||||||
)
|
)
|
||||||
fakeLocationManager.instance.requestLocationUpdates(
|
fakeLocationManager.instance.requestLocationUpdates(
|
||||||
LocationManager.NETWORK_PROVIDER,
|
LocationManager.NETWORK_PROVIDER,
|
||||||
MIN_TIME_TO_UPDATE_LOCATION_MILLIS,
|
locationTracker.minDurationToUpdateLocationMillis,
|
||||||
MIN_DISTANCE_TO_UPDATE_LOCATION_METERS,
|
MIN_DISTANCE_TO_UPDATE_LOCATION_METERS,
|
||||||
locationTracker
|
locationTracker
|
||||||
)
|
)
|
||||||
@ -155,7 +155,7 @@ class LocationTrackerTest {
|
|||||||
locationTracker.onLocationChanged(fusedLocation)
|
locationTracker.onLocationChanged(fusedLocation)
|
||||||
locationTracker.onLocationChanged(gpsLocation)
|
locationTracker.onLocationChanged(gpsLocation)
|
||||||
locationTracker.onLocationChanged(networkLocation)
|
locationTracker.onLocationChanged(networkLocation)
|
||||||
advanceTimeBy(MIN_TIME_TO_UPDATE_LOCATION_MILLIS + 1)
|
advanceTimeBy(locationTracker.minDurationToUpdateLocationMillis + 1)
|
||||||
|
|
||||||
val expectedLocationData = LocationData(
|
val expectedLocationData = LocationData(
|
||||||
latitude = 1.0,
|
latitude = 1.0,
|
||||||
@ -189,7 +189,7 @@ class LocationTrackerTest {
|
|||||||
|
|
||||||
locationTracker.onLocationChanged(gpsLocation)
|
locationTracker.onLocationChanged(gpsLocation)
|
||||||
locationTracker.onLocationChanged(networkLocation)
|
locationTracker.onLocationChanged(networkLocation)
|
||||||
advanceTimeBy(MIN_TIME_TO_UPDATE_LOCATION_MILLIS + 1)
|
advanceTimeBy(locationTracker.minDurationToUpdateLocationMillis + 1)
|
||||||
|
|
||||||
val expectedLocationData = LocationData(
|
val expectedLocationData = LocationData(
|
||||||
latitude = 1.0,
|
latitude = 1.0,
|
||||||
@ -218,7 +218,7 @@ class LocationTrackerTest {
|
|||||||
val resultUpdates = locationTracker.locations.test(this)
|
val resultUpdates = locationTracker.locations.test(this)
|
||||||
|
|
||||||
locationTracker.onLocationChanged(networkLocation)
|
locationTracker.onLocationChanged(networkLocation)
|
||||||
advanceTimeBy(MIN_TIME_TO_UPDATE_LOCATION_MILLIS + 1)
|
advanceTimeBy(locationTracker.minDurationToUpdateLocationMillis + 1)
|
||||||
|
|
||||||
val expectedLocationData = LocationData(
|
val expectedLocationData = LocationData(
|
||||||
latitude = 1.0,
|
latitude = 1.0,
|
||||||
@ -244,7 +244,7 @@ class LocationTrackerTest {
|
|||||||
val resultUpdates = locationTracker.locations.test(this)
|
val resultUpdates = locationTracker.locations.test(this)
|
||||||
|
|
||||||
locationTracker.requestLastKnownLocation()
|
locationTracker.requestLastKnownLocation()
|
||||||
advanceTimeBy(MIN_TIME_TO_UPDATE_LOCATION_MILLIS + 1)
|
advanceTimeBy(locationTracker.minDurationToUpdateLocationMillis + 1)
|
||||||
|
|
||||||
val expectedLocationData = LocationData(
|
val expectedLocationData = LocationData(
|
||||||
latitude = A_LATITUDE,
|
latitude = A_LATITUDE,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user