diff options
author | Tobrun <tobrun@mapbox.com> | 2017-04-26 12:16:38 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-26 12:16:38 +0200 |
commit | 184cbda4e8e150de22792a1fd8204fddf7897401 (patch) | |
tree | 7accbff23bcff4722a32136a1849b2c18fb216fe /platform | |
parent | 3c175adf30546fe58713b8fed29ac35a85e150be (diff) | |
download | qtlocation-mapboxgl-184cbda4e8e150de22792a1fd8204fddf7897401.tar.gz |
[android] - fix test app runtime permissions (#8823)
Diffstat (limited to 'platform')
5 files changed, 69 insertions, 148 deletions
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/BaseLocationActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/BaseLocationActivity.java new file mode 100644 index 0000000000..a8d1772cb2 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/BaseLocationActivity.java @@ -0,0 +1,49 @@ +package com.mapbox.mapboxsdk.testapp.activity.userlocation; + +import android.Manifest; +import android.content.pm.PackageManager; +import android.os.Build; +import android.support.annotation.NonNull; +import android.support.annotation.UiThread; +import android.support.v4.app.ActivityCompat; +import android.support.v7.app.AppCompatActivity; + +import com.mapbox.services.android.telemetry.permissions.PermissionsManager; + +public abstract class BaseLocationActivity extends AppCompatActivity { + + private static final int PERMISSIONS_LOCATION = 0; + + @UiThread + protected final void toggleGps(boolean enableGps) { + if (enableGps) { + if (!PermissionsManager.areLocationPermissionsGranted(this)) { + ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSIONS_LOCATION); + } else { + enableLocation(true); + } + } else { + enableLocation(false); + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + if (requestCode == PERMISSIONS_LOCATION) { + if (!isRuntimePermissionsRequired() || isPermissionAccepted(grantResults)) { + enableLocation(true); + } + } + } + + private boolean isPermissionAccepted(int[] grantResults) { + return grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED; + } + + private boolean isRuntimePermissionsRequired() { + return android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M; + } + + protected abstract void enableLocation(boolean enabled); +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/CustomLocationEngineActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/CustomLocationEngineActivity.java index f4268830a0..660404f144 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/CustomLocationEngineActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/CustomLocationEngineActivity.java @@ -1,13 +1,7 @@ package com.mapbox.mapboxsdk.testapp.activity.userlocation; -import android.Manifest; -import android.content.pm.PackageManager; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.UiThread; import android.support.design.widget.FloatingActionButton; -import android.support.v4.app.ActivityCompat; -import android.support.v7.app.AppCompatActivity; import android.view.View; import com.mapbox.mapboxsdk.maps.MapView; @@ -15,9 +9,8 @@ import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.testapp.R; import com.mapbox.services.android.telemetry.location.LocationEngine; -import com.mapbox.services.android.telemetry.permissions.PermissionsManager; -public class CustomLocationEngineActivity extends AppCompatActivity { +public class CustomLocationEngineActivity extends BaseLocationActivity { private MapView mapView; private MapboxMap mapboxMap; @@ -25,8 +18,6 @@ public class CustomLocationEngineActivity extends AppCompatActivity { private LocationEngine locationServices; - private static final int PERMISSIONS_LOCATION = 0; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -56,6 +47,16 @@ public class CustomLocationEngineActivity extends AppCompatActivity { } @Override + protected void enableLocation(boolean enabled) { + mapboxMap.setMyLocationEnabled(enabled); + if (enabled) { + locationToggleFab.setImageResource(R.drawable.ic_location_disabled); + } else { + locationToggleFab.setImageResource(R.drawable.ic_my_location); + } + } + + @Override protected void onStart() { super.onStart(); mapView.onStart(); @@ -96,36 +97,4 @@ public class CustomLocationEngineActivity extends AppCompatActivity { super.onLowMemory(); mapView.onLowMemory(); } - - @UiThread - public void toggleGps(boolean enableGps) { - if (enableGps) { - if (!PermissionsManager.areLocationPermissionsGranted(this)) { - ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.ACCESS_COARSE_LOCATION, - Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSIONS_LOCATION); - } else { - enableLocation(true); - } - } else { - enableLocation(false); - } - } - - private void enableLocation(boolean enabled) { - mapboxMap.setMyLocationEnabled(enabled); - if (enabled) { - locationToggleFab.setImageResource(R.drawable.ic_location_disabled); - } else { - locationToggleFab.setImageResource(R.drawable.ic_my_location); - } - } - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - if (requestCode == PERMISSIONS_LOCATION) { - if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - enableLocation(true); - } - } - } } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationDrawableActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationDrawableActivity.java index d31bd1fa51..5560f81fa9 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationDrawableActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationDrawableActivity.java @@ -1,15 +1,10 @@ package com.mapbox.mapboxsdk.testapp.activity.userlocation; -import android.Manifest; -import android.content.pm.PackageManager; import android.graphics.Color; import android.location.Location; import android.os.Bundle; -import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; -import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.ViewGroup; @@ -27,9 +22,7 @@ import com.mapbox.services.android.telemetry.location.LocationEngineListener; /** * Test activity showcasing how to change the MyLocationView drawable. */ -public class MyLocationDrawableActivity extends AppCompatActivity implements LocationEngineListener { - - private static final int PERMISSIONS_LOCATION = 0; +public class MyLocationDrawableActivity extends BaseLocationActivity implements LocationEngineListener { private MapView mapView; private MapboxMap mapboxMap; @@ -71,24 +64,8 @@ public class MyLocationDrawableActivity extends AppCompatActivity implements Loc }); } - public void toggleGps(boolean enableGps) { - if (enableGps) { - if ((ContextCompat.checkSelfPermission(this, - Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) - || (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) - != PackageManager.PERMISSION_GRANTED)) { - ActivityCompat.requestPermissions(this, new String[] { - Manifest.permission.ACCESS_COARSE_LOCATION, - Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSIONS_LOCATION); - } else { - enableLocation(true); - } - } else { - enableLocation(false); - } - } - - private void enableLocation(boolean enabled) { + @Override + protected void enableLocation(boolean enabled) { if (enabled) { mapboxMap.setMyLocationEnabled(true); Location location = mapboxMap.getMyLocation(); @@ -103,15 +80,6 @@ public class MyLocationDrawableActivity extends AppCompatActivity implements Loc } @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - if (requestCode == PERMISSIONS_LOCATION) { - if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - enableLocation(true); - } - } - } - - @Override public void onConnected() { // Nothing } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationTintActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationTintActivity.java index 0417b1829f..a219b369f6 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationTintActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationTintActivity.java @@ -1,18 +1,13 @@ package com.mapbox.mapboxsdk.testapp.activity.userlocation; -import android.Manifest; import android.app.Activity; -import android.content.pm.PackageManager; import android.graphics.Color; import android.location.Location; import android.os.Bundle; import android.support.annotation.IdRes; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.annotation.UiThread; -import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; -import android.support.v7.app.AppCompatActivity; import android.view.View; import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; @@ -30,14 +25,12 @@ import com.mapbox.services.android.telemetry.location.LocationEngineListener; /** * Test activity showcasing how to tint the MyLocationView. */ -public class MyLocationTintActivity extends AppCompatActivity implements LocationEngineListener { +public class MyLocationTintActivity extends BaseLocationActivity implements LocationEngineListener { private MapView mapView; private MapboxMap mapboxMap; private boolean firstRun; - private static final int PERMISSIONS_LOCATION = 0; - @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -180,25 +173,8 @@ public class MyLocationTintActivity extends AppCompatActivity implements Locatio mapView.onSaveInstanceState(outState); } - @UiThread - public void toggleGps(boolean enableGps) { - if (enableGps) { - if ((ContextCompat.checkSelfPermission(this, - Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) - || (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) - != PackageManager.PERMISSION_GRANTED)) { - ActivityCompat.requestPermissions(this, new String[] { - Manifest.permission.ACCESS_COARSE_LOCATION, - Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSIONS_LOCATION); - } else { - enableLocation(true); - } - } else { - enableLocation(false); - } - } - - private void enableLocation(boolean enabled) { + @Override + protected void enableLocation(boolean enabled) { if (enabled) { mapboxMap.setMyLocationEnabled(true); if (mapboxMap.getMyLocation() != null) { @@ -211,15 +187,6 @@ public class MyLocationTintActivity extends AppCompatActivity implements Locatio } } - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - if (requestCode == PERMISSIONS_LOCATION) { - if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - enableLocation(true); - } - } - } - private static class ViewUtils { public static void attachClickListener( diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationToggleActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationToggleActivity.java index 9e98d8c6b9..ac6c346a88 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationToggleActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationToggleActivity.java @@ -1,14 +1,8 @@ package com.mapbox.mapboxsdk.testapp.activity.userlocation; -import android.Manifest; -import android.content.pm.PackageManager; import android.location.Location; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.UiThread; import android.support.design.widget.FloatingActionButton; -import android.support.v4.app.ActivityCompat; -import android.support.v7.app.AppCompatActivity; import android.view.View; import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; @@ -20,9 +14,8 @@ import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.testapp.R; import com.mapbox.services.android.telemetry.location.LocationEngine; import com.mapbox.services.android.telemetry.location.LocationEngineListener; -import com.mapbox.services.android.telemetry.permissions.PermissionsManager; -public class MyLocationToggleActivity extends AppCompatActivity { +public class MyLocationToggleActivity extends BaseLocationActivity { private MapView mapView; private MapboxMap mapboxMap; @@ -31,8 +24,6 @@ public class MyLocationToggleActivity extends AppCompatActivity { private LocationEngine locationServices; private LocationEngineListener locationListener; - private static final int PERMISSIONS_LOCATION = 0; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -107,21 +98,8 @@ public class MyLocationToggleActivity extends AppCompatActivity { mapView.onLowMemory(); } - @UiThread - public void toggleGps(boolean enableGps) { - if (enableGps) { - if (!PermissionsManager.areLocationPermissionsGranted(this)) { - ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.ACCESS_COARSE_LOCATION, - Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSIONS_LOCATION); - } else { - enableLocation(true); - } - } else { - enableLocation(false); - } - } - - private void enableLocation(boolean enabled) { + @Override + protected void enableLocation(boolean enabled) { if (enabled) { // To move the camera instantly, we attempt to get the last known location and either // ease or animate the camera to that position depending on the zoom level. @@ -156,14 +134,4 @@ public class MyLocationToggleActivity extends AppCompatActivity { } mapboxMap.setMyLocationEnabled(enabled); } - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - if (requestCode == PERMISSIONS_LOCATION) { - if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - enableLocation(true); - } - } - } - } |