diff options
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.java | 34 |
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); + } + } + } } |