summaryrefslogtreecommitdiff
path: root/platform/android
diff options
context:
space:
mode:
authorBrad Leege <bleege@gmail.com>2016-05-16 14:11:34 -0700
committerBrad Leege <bleege@gmail.com>2016-05-17 12:03:59 -0700
commit0c9c52491233c05bd793426f1ebb05fdfbbbb4a5 (patch)
tree61cc786f16184408d8c6ce75e12bcbdfca01fe28 /platform/android
parent22447373ae9f975a11a809d1384e72be0d1889cf (diff)
downloadqtlocation-mapboxgl-0c9c52491233c05bd793426f1ebb05fdfbbbb4a5.tar.gz
[android] #5045 - Adding Async Location Permissions Approval Check
Diffstat (limited to 'platform/android')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java16
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/telemetry/MapboxEventManager.java30
2 files changed, 42 insertions, 4 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java
index c148b02a10..e45f3cc715 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java
@@ -74,8 +74,7 @@ public class LocationServices implements com.mapzen.android.lost.api.LocationLis
* @param enableGPS true if GPS is to be enabled, false if GPS is to be disabled
*/
public void toggleGPS(boolean enableGPS) {
- if ((ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) &&
- (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
+ if (!areLocationPermissionsGranted()) {
Log.w(TAG, "Location Permissions Not Granted Yet. Try again after requesting.");
return;
}
@@ -176,4 +175,17 @@ public class LocationServices implements com.mapzen.android.lost.api.LocationLis
public boolean removeLocationListener(@NonNull LocationListener locationListener) {
return this.locationListeners.remove(locationListener);
}
+
+ /**
+ * Check status of Location Permissions
+ * @return True if granted to the app, False if not
+ */
+ public boolean areLocationPermissionsGranted() {
+ if ((ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) &&
+ (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
+ Log.w(TAG, "Location Permissions Not Granted Yet. Try again after requesting.");
+ return false;
+ }
+ return true;
+ }
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/telemetry/MapboxEventManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/telemetry/MapboxEventManager.java
index b8f5774db1..7679f1d08a 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/telemetry/MapboxEventManager.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/telemetry/MapboxEventManager.java
@@ -18,6 +18,7 @@ import android.net.wifi.WifiManager;
import android.os.AsyncTask;
import android.os.BatteryManager;
import android.os.Build;
+import android.os.Handler;
import android.support.annotation.NonNull;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
@@ -244,8 +245,33 @@ public class MapboxEventManager {
context.startService(new Intent(context, TelemetryService.class));
// Make sure Ambient Mode is started at a minimum
- if (LocationServices.getLocationServices(context).isGPSEnabled()) {
- LocationServices.getLocationServices(context).toggleGPS(false);
+ if (LocationServices.getLocationServices(context).areLocationPermissionsGranted()) {
+ Log.i(TAG, "Permissions are good, see if GPS is enabled and if not then setup Ambient.");
+ if (LocationServices.getLocationServices(context).isGPSEnabled()) {
+ LocationServices.getLocationServices(context).toggleGPS(false);
+ }
+ } else {
+ // Start timer that checks for Permissions
+ Log.i(TAG, "Permissions are not good. Need to do some looping to check on stuff.");
+
+ final Handler permsHandler = new Handler();
+ Runnable runnable = new Runnable() {
+ @Override
+ public void run() {
+ if (LocationServices.getLocationServices(context).areLocationPermissionsGranted()) {
+ Log.i(TAG, "Permissions finally granted, so starting Ambient if GPS isn't already enabled");
+ // Start Ambient
+ if (LocationServices.getLocationServices(context).isGPSEnabled()) {
+ LocationServices.getLocationServices(context).toggleGPS(false);
+ }
+ } else {
+ // Restart Handler
+ Log.i(TAG, "Permissions not granted yet... let's try again in 30 seconds");
+ permsHandler.postDelayed(this, 1000 * 30);
+ }
+ }
+ };
+ permsHandler.postDelayed(runnable, 1000 * 10);
}
// Manage Timer Flush