diff --git a/changelog.d/6653.misc b/changelog.d/6653.misc new file mode 100644 index 0000000000..1b5be1b83f --- /dev/null +++ b/changelog.d/6653.misc @@ -0,0 +1 @@ +[Location share] Update minimum sending period to 5 seconds for a live diff --git a/vector/src/main/java/im/vector/app/features/location/Config.kt b/vector/src/main/java/im/vector/app/features/location/Config.kt index c29e2e911a..b65b5517d1 100644 --- a/vector/src/main/java/im/vector/app/features/location/Config.kt +++ b/vector/src/main/java/im/vector/app/features/location/Config.kt @@ -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_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 diff --git a/vector/src/main/java/im/vector/app/features/location/LocationTracker.kt b/vector/src/main/java/im/vector/app/features/location/LocationTracker.kt index a416cd90f5..c617277f3f 100644 --- a/vector/src/main/java/im/vector/app/features/location/LocationTracker.kt +++ b/vector/src/main/java/im/vector/app/features/location/LocationTracker.kt @@ -36,6 +36,10 @@ import kotlinx.coroutines.launch import timber.log.Timber import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Duration.Companion.seconds + +@VisibleForTesting +const val MIN_DISTANCE_TO_UPDATE_LOCATION_METERS = 10f @Singleton class LocationTracker @Inject constructor( @@ -62,14 +66,25 @@ class LocationTracker @Inject constructor( @VisibleForTesting var hasLocationFromGPSProvider = false + private var firstLocationHandled = false private val _locations = MutableSharedFlow(replay = 1) + @VisibleForTesting + val minDurationToUpdateLocationMillis = 5.seconds.inWholeMilliseconds + /** * SharedFlow to collect location updates. */ val locations = _locations.asSharedFlow() .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") } .map { it.toLocationData() } @@ -96,7 +111,7 @@ class LocationTracker @Inject constructor( locationManager.requestLocationUpdates( provider, - MIN_TIME_TO_UPDATE_LOCATION_MILLIS, + minDurationToUpdateLocationMillis, MIN_DISTANCE_TO_UPDATE_LOCATION_METERS, this ) diff --git a/vector/src/test/java/im/vector/app/features/location/LocationTrackerTest.kt b/vector/src/test/java/im/vector/app/features/location/LocationTrackerTest.kt index 54f7412238..ebb7419ddc 100644 --- a/vector/src/test/java/im/vector/app/features/location/LocationTrackerTest.kt +++ b/vector/src/test/java/im/vector/app/features/location/LocationTrackerTest.kt @@ -76,19 +76,19 @@ class LocationTrackerTest { verifyOrder { fakeLocationManager.instance.requestLocationUpdates( LocationManager.FUSED_PROVIDER, - MIN_TIME_TO_UPDATE_LOCATION_MILLIS, + locationTracker.minDurationToUpdateLocationMillis, MIN_DISTANCE_TO_UPDATE_LOCATION_METERS, locationTracker ) fakeLocationManager.instance.requestLocationUpdates( LocationManager.GPS_PROVIDER, - MIN_TIME_TO_UPDATE_LOCATION_MILLIS, + locationTracker.minDurationToUpdateLocationMillis, MIN_DISTANCE_TO_UPDATE_LOCATION_METERS, locationTracker ) fakeLocationManager.instance.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, - MIN_TIME_TO_UPDATE_LOCATION_MILLIS, + locationTracker.minDurationToUpdateLocationMillis, MIN_DISTANCE_TO_UPDATE_LOCATION_METERS, locationTracker ) @@ -155,7 +155,7 @@ class LocationTrackerTest { locationTracker.onLocationChanged(fusedLocation) locationTracker.onLocationChanged(gpsLocation) locationTracker.onLocationChanged(networkLocation) - advanceTimeBy(MIN_TIME_TO_UPDATE_LOCATION_MILLIS + 1) + advanceTimeBy(locationTracker.minDurationToUpdateLocationMillis + 1) val expectedLocationData = LocationData( latitude = 1.0, @@ -189,7 +189,7 @@ class LocationTrackerTest { locationTracker.onLocationChanged(gpsLocation) locationTracker.onLocationChanged(networkLocation) - advanceTimeBy(MIN_TIME_TO_UPDATE_LOCATION_MILLIS + 1) + advanceTimeBy(locationTracker.minDurationToUpdateLocationMillis + 1) val expectedLocationData = LocationData( latitude = 1.0, @@ -218,7 +218,7 @@ class LocationTrackerTest { val resultUpdates = locationTracker.locations.test(this) locationTracker.onLocationChanged(networkLocation) - advanceTimeBy(MIN_TIME_TO_UPDATE_LOCATION_MILLIS + 1) + advanceTimeBy(locationTracker.minDurationToUpdateLocationMillis + 1) val expectedLocationData = LocationData( latitude = 1.0, @@ -244,7 +244,7 @@ class LocationTrackerTest { val resultUpdates = locationTracker.locations.test(this) locationTracker.requestLastKnownLocation() - advanceTimeBy(MIN_TIME_TO_UPDATE_LOCATION_MILLIS + 1) + advanceTimeBy(locationTracker.minDurationToUpdateLocationMillis + 1) val expectedLocationData = LocationData( latitude = A_LATITUDE,