summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/StaleStateManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/StaleStateManager.java')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/StaleStateManager.java34
1 files changed, 25 insertions, 9 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/StaleStateManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/StaleStateManager.java
index 5c180b5c47..9b6afd2d93 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/StaleStateManager.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/StaleStateManager.java
@@ -10,35 +10,42 @@ import android.os.Handler;
*/
class StaleStateManager {
+ private boolean isEnabled;
private final OnLocationStaleListener innerOnLocationStaleListeners;
private final Handler handler;
private boolean isStale = true;
private long delayTime;
- StaleStateManager(OnLocationStaleListener innerListener, long delayTime) {
+ StaleStateManager(OnLocationStaleListener innerListener, LocationLayerOptions options) {
innerOnLocationStaleListeners = innerListener;
- this.delayTime = delayTime;
handler = new Handler();
- innerOnLocationStaleListeners.onStaleStateChange(true);
+ isEnabled = options.enableStaleState();
+ delayTime = options.staleStateTimeout();
}
private Runnable staleStateRunnable = new Runnable() {
@Override
public void run() {
- isStale = true;
- innerOnLocationStaleListeners.onStaleStateChange(true);
+ setState(true);
}
};
+ void setEnabled(boolean enabled) {
+ if (enabled) {
+ setState(isStale);
+ } else if (isEnabled) {
+ onStop();
+ innerOnLocationStaleListeners.onStaleStateChange(false);
+ }
+ isEnabled = enabled;
+ }
+
boolean isStale() {
return isStale;
}
void updateLatestLocationTime() {
- if (isStale) {
- isStale = false;
- innerOnLocationStaleListeners.onStaleStateChange(false);
- }
+ setState(false);
postTheCallback();
}
@@ -61,4 +68,13 @@ class StaleStateManager {
handler.removeCallbacksAndMessages(null);
handler.postDelayed(staleStateRunnable, delayTime);
}
+
+ private void setState(boolean stale) {
+ if (stale != isStale) {
+ isStale = stale;
+ if (isEnabled) {
+ innerOnLocationStaleListeners.onStaleStateChange(stale);
+ }
+ }
+ }
}