interval change should restart thread reporting locations

Also updates the mockLocation's bearing and speed to be non-zero, since
a real location rarely has exactly 0 bearing or 0 speed.

Bug: 384699906
Test: atest android.location.cts.gnss.GnssLocationUpdateIntervalTest#testLocationUpdatesAtVariousIntervals
Change-Id: I67d513eea50d1399b52aef3e07a73ff31db24ace
diff --git a/gnss/aidl/default/Gnss.cpp b/gnss/aidl/default/Gnss.cpp
index 41720c0..1fd21d8 100644
--- a/gnss/aidl/default/Gnss.cpp
+++ b/gnss/aidl/default/Gnss.cpp
@@ -298,8 +298,14 @@
 ScopedAStatus Gnss::setPositionMode(const PositionModeOptions& options) {
     ALOGD("setPositionMode. minIntervalMs:%d, lowPowerMode:%d", options.minIntervalMs,
           (int)options.lowPowerMode);
-    mMinIntervalMs = std::max(1000, options.minIntervalMs);
-    mGnssMeasurementInterface->setLocationInterval(mMinIntervalMs);
+    if (std::max(1000, options.minIntervalMs) != mMinIntervalMs) {
+        mMinIntervalMs = std::max(1000, options.minIntervalMs);
+        mGnssMeasurementInterface->setLocationInterval(mMinIntervalMs);
+        if (mIsActive) {
+            stop();
+            start();
+        }
+    }
     return ScopedAStatus::ok();
 }
 
diff --git a/gnss/common/utils/default/MockLocation.cpp b/gnss/common/utils/default/MockLocation.cpp
index c90075f..512af21 100644
--- a/gnss/common/utils/default/MockLocation.cpp
+++ b/gnss/common/utils/default/MockLocation.cpp
@@ -21,7 +21,7 @@
 float gMockLatitudeDegrees{37.4219999};
 float gMockLongitudeDegrees{-122.0840575};
 float gMockAltitudeMeters{1.60062531};
-float gMockBearingDegrees{0};
-float gMockSpeedMetersPerSec{0};
+float gMockBearingDegrees{0.0001};  // a real location rarely has exactly zero bearing
+float gMockSpeedMetersPerSec{0.0001};
 
 }  // namespace android::hardware::gnss::common