diff options
author | Pablo Guardiola <guardiola31337@gmail.com> | 2017-04-20 20:10:29 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-20 20:10:29 +0200 |
commit | c6be40b71b2f81f07e24c14f0b9624b0fcf85798 (patch) | |
tree | 276e05bd8c40a6852dfbfacf6345fb7d3bd0be09 /platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MockLocationEngine.java | |
parent | 97f2a448594d7f904f298c61ab7ba673418d36e5 (diff) | |
download | qtlocation-mapboxgl-c6be40b71b2f81f07e24c14f0b9624b0fcf85798.tar.gz |
[android] Add a way to use a custom location source (#8710)
* add a way to use a custom location source
* add custom location engine example to test app
Diffstat (limited to 'platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MockLocationEngine.java')
-rw-r--r-- | platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MockLocationEngine.java | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MockLocationEngine.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MockLocationEngine.java new file mode 100644 index 0000000000..b87c723fda --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MockLocationEngine.java @@ -0,0 +1,93 @@ +package com.mapbox.mapboxsdk.testapp.activity.userlocation; + + +import android.location.Location; +import android.os.Handler; + +import com.mapbox.services.android.telemetry.location.LocationEngine; +import com.mapbox.services.android.telemetry.location.LocationEngineListener; + +/** + * Sample LocationEngine that provides mocked locations simulating GPS updates + */ +public class MockLocationEngine extends LocationEngine { + + // Mocked data + private static final int UPDATE_INTERVAL_MS = 1000; + private static final double[][] locations = new double[][] { + new double[] {39.489309, -0.360415}, + new double[] {39.492469, -0.358777}, + new double[] {40.393285, -3.707260}, + new double[] {40.394374, -3.707767}, + new double[] {40.398012, -3.715943}, + new double[] {40.416913, -3.703861}}; + + private Handler handler; + int currentIndex; + + public MockLocationEngine() { + super(); + } + + @Override + public void activate() { + currentIndex = 0; + + // "Connection" is immediate here + for (LocationEngineListener listener : locationListeners) { + listener.onConnected(); + } + } + + @Override + public void deactivate() { + handler = null; + } + + @Override + public boolean isConnected() { + return true; // Always connected + } + + @Override + public Location getLastLocation() { + return getNextLocation(); + } + + @Override + public void requestLocationUpdates() { + // Fake regular updates with a handler + handler = new Handler(); + handler.postDelayed(new LocationUpdateRunnable(), UPDATE_INTERVAL_MS); + } + + @Override + public void removeLocationUpdates() { + handler.removeCallbacksAndMessages(null); + } + + private Location getNextLocation() { + // Build the next location and rotate the index + Location location = new Location(MockLocationEngine.class.getSimpleName()); + location.setLatitude(locations[currentIndex][0]); + location.setLongitude(locations[currentIndex][1]); + currentIndex = (currentIndex == locations.length - 1 ? 0 : currentIndex + 1); + return location; + } + + private class LocationUpdateRunnable implements Runnable { + @Override + public void run() { + // Notify of an update + Location location = getNextLocation(); + for (LocationEngineListener listener : locationListeners) { + listener.onLocationChanged(location); + } + + if (handler != null) { + // Schedule the next update + handler.postDelayed(new LocationUpdateRunnable(), UPDATE_INTERVAL_MS); + } + } + } +} |