From 004f40bff568ca13d12077f9858e71f5ba474a1f Mon Sep 17 00:00:00 2001
From: Maxime NATUREL <maxime.naturel@niji.fr>
Date: Wed, 27 Jul 2022 15:48:40 +0200
Subject: [PATCH 1/3] Setting 5 seconds for min period of update for location
 tracking

---
 .../java/im/vector/app/features/location/Config.kt     |  2 +-
 .../im/vector/app/features/location/LocationTracker.kt | 10 +++++++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

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..6f947290e2 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,5 @@ 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_TIME_TO_UPDATE_LOCATION_MILLIS = 5 * 1_000L // every 5 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 aa05fe764b..079a65d9b9 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
@@ -61,6 +61,7 @@ class LocationTracker @Inject constructor(
     @VisibleForTesting
     var hasLocationFromGPSProvider = false
 
+    private var firstLocationHandled = false
     private val _locations = MutableSharedFlow<Location>(replay = 1)
 
     /**
@@ -68,7 +69,14 @@ class LocationTracker @Inject constructor(
      */
     val locations = _locations.asSharedFlow()
             .onEach { Timber.d("new location emitted") }
-            .debounce(MIN_TIME_TO_UPDATE_LOCATION_MILLIS)
+            .debounce {
+                if (firstLocationHandled) {
+                    MIN_TIME_TO_UPDATE_LOCATION_MILLIS
+                } else {
+                    firstLocationHandled = true
+                    0
+                }
+            }
             .onEach { Timber.d("new location emitted after debounce") }
             .map { it.toLocationData() }
 

From 0944b2ff393fa530b7f1d39f3bee4e0f759b1fa0 Mon Sep 17 00:00:00 2001
From: Maxime NATUREL <maxime.naturel@niji.fr>
Date: Wed, 27 Jul 2022 16:02:27 +0200
Subject: [PATCH 2/3] Adding changelog entry

---
 changelog.d/6653.misc | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 changelog.d/6653.misc

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

From 49ad37a7f69b9d59863c6afb6a9591ee93d37824 Mon Sep 17 00:00:00 2001
From: Maxime NATUREL <maxime.naturel@niji.fr>
Date: Tue, 2 Aug 2022 09:27:27 +0200
Subject: [PATCH 3/3] Using Duration to have clearer syntax

---
 .../java/im/vector/app/features/location/Config.kt |  2 --
 .../app/features/location/LocationTracker.kt       | 11 +++++++++--
 .../app/features/location/LocationTrackerTest.kt   | 14 +++++++-------
 3 files changed, 16 insertions(+), 11 deletions(-)

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 6f947290e2..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 = 5 * 1_000L // every 5 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 079a65d9b9..966a2600b4 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(
@@ -64,6 +68,9 @@ class LocationTracker @Inject constructor(
     private var firstLocationHandled = false
     private val _locations = MutableSharedFlow<Location>(replay = 1)
 
+    @VisibleForTesting
+    val minDurationToUpdateLocationMillis = 5.seconds.inWholeMilliseconds
+
     /**
      * SharedFlow to collect location updates.
      */
@@ -71,7 +78,7 @@ class LocationTracker @Inject constructor(
             .onEach { Timber.d("new location emitted") }
             .debounce {
                 if (firstLocationHandled) {
-                    MIN_TIME_TO_UPDATE_LOCATION_MILLIS
+                    minDurationToUpdateLocationMillis
                 } else {
                     firstLocationHandled = true
                     0
@@ -103,7 +110,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 454a73cd70..d6d6410c99 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
@@ -75,19 +75,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
             )
@@ -154,7 +154,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,
@@ -188,7 +188,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,
@@ -217,7 +217,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,
@@ -243,7 +243,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,